小豆浆 使用psutil获取监控数据并使用yagmail发送邮件(使用jinja2模板渲染) www.xdoujiang.com

  • A+
所属分类:python实战
  1. 只修改了以下信息 其他基本没改 都是书里的代码
  2. smtp.exmail.qq.com, port=465(支持ssl 一般是25)
  3. 需要安装pip install psutil yagmail
  4. #!/usr/bin/python
  5. # -*- coding: utf-8 -*-
  6. #--------------------------------------------------
  7. #Author:gongzheng
  8. #Email:85646830@163.com
  9. #FileName:12.py
  10. #Function: 
  11. #Version:1.0 
  12. #Created:2017-11-30
  13. #--------------------------------------------------
  14. from __future__ import unicode_literals
  15. import os
  16. import socket
  17. from datetime import datetime
  18. import jinja2
  19. import yagmail
  20. import psutil
  21. EMAIL_USER = '111@aaa.com'
  22. EMAIL_PASSWORD = '111'
  23. RECIPIENTS = ['222@bbb.com']
  24. def render(tpl_path, **kwargs):
  25.     path, filename = os.path.split(tpl_path)
  26.     return jinja2.Environment(
  27.         loader=jinja2.FileSystemLoader(path or './')
  28.     ).get_template(filename).render(**kwargs)
  29. def bytes2human(n):
  30.     symbols = ('K', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y')
  31.     prefix = {}
  32.     for i, s in enumerate(symbols):
  33.         prefix展开 = 1 << (i + 1) * 10
  34.     for s in reversed(symbols):
  35.         if n >= prefix展开:
  36.             value = float(n) / prefix展开
  37.             return '%.1f%s' % (value, s)
  38.     return "%sB" % n
  39. def get_cpu_info():
  40.     cpu_count = psutil.cpu_count()
  41.     cpu_percent = psutil.cpu_percent(interval=1)
  42.     return dict(cpu_count=cpu_count, cpu_percent=cpu_percent)
  43. def get_memory_info():
  44.     virtual_mem = psutil.virtual_memory()
  45.     mem_total = bytes2human(virtual_mem.total)
  46.     mem_percent = virtual_mem.percent
  47.     mem_free = bytes2human(virtual_mem.free + virtual_mem.buffers + virtual_mem.cached)
  48.     mem_used = bytes2human(virtual_mem.total * virtual_mem.percent)
  49.     return dict(mem_total=mem_total, mem_percent=mem_percent,
  50.                 mem_free=mem_free, mem_used=mem_used)
  51. def get_disk_info():
  52.     disk_usage = psutil.disk_usage('/')
  53.     disk_total = bytes2human(disk_usage.total)
  54.     disk_percent = disk_usage.percent
  55.     disk_free = bytes2human(disk_usage.free)
  56.     disk_used = bytes2human(disk_usage.used)
  57.     return dict(disk_total=disk_total, disk_percent=disk_percent,
  58.                 disk_free=disk_free, disk_used=disk_used)
  59. def get_boot_info():
  60.     boot_time = datetime.fromtimestamp(psutil.boot_time()).strftime("%Y-%m-%d %H:%M:%S")
  61.     return dict(boot_time=boot_time)
  62. def collect_monitor_data():
  63.     data = {}
  64.     data.update(get_boot_info())
  65.     data.update(get_cpu_info())
  66.     data.update(get_memory_info())
  67.     data.update(get_disk_info())
  68.     return data
  69. def main():
  70.     hostname = socket.gethostname()
  71.     data = collect_monitor_data()
  72.     data.update(dict(hostname=hostname))
  73.     content = render('monitor.html', **data)
  74.     print content
  75.     with yagmail.SMTP(user=EMAIL_USER, password=EMAIL_PASSWORD,
  76.                       host='smtp.exmail.qq.com', port=465) as yag:
  77.         for recipient in RECIPIENTS:
  78.             yag.send(recipient, "监控信息".encode('utf-8'), content.encode('utf-8'))
  79. if __name__ == '__main__':
  80.     main()
  81. monitor.html
  82. root@192.168.4.97:scripts# cat monitor.html 
  83. <html>
  84.     <head><title>监控信息</title>
  85.     <body>
  86.         <table border="1">
  87.             <tr><td>服务器名称</td><td>{{hostname}}</td></tr>
  88.             <tr><td>开机时间</td><td>{{boot_time}}</td></tr>
  89.             <tr><td>cpu个数</td><td>{{cpu_count}}</td></tr>
  90.             <tr><td>cpu利用率</td><td>{{cpu_percent}}</td></tr>
  91.             <tr><td>内存总量</td><td>{{mem_percent}}</td></tr>
  92.             <tr><td>内存利用率</td><td>{{mem_total}}</td></tr>
  93.             <tr><td>内存已用空间</td><td>{{mem_used}}</td></tr>
  94.             <tr><td>内存可用空间</td><td>{{mem_free}}</td></tr>
  95.             <tr><td>磁盘空间总量</td><td>{{disk_total}}</td></tr>
  96.             <tr><td>磁盘空间利用率</td><td>{{disk_percent}}</td></tr>
  97.             <tr><td>磁盘已用空间</td><td>{{disk_used}}</td></tr>
  98.             <tr><td>磁盘可用空间</td><td>{{disk_free}}</td></tr>
  99.         </table>
  100.     </body>
  101. </html>
  102. 效果:
  103. 小豆浆 使用psutil获取监控数据并使用yagmail发送邮件(使用jinja2模板渲染) www.xdoujiang.com
  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: