import psutil
from smtplib import SMTP_SSL
from email.header import Header
from email.mime.text import MIMEText
import os
import re
import socket
import platform
cpu = {'user': 0, 'system': 0, 'idle': 0, 'percent': 0}
mem = {'total': 0, 'avaiable': 0, 'percent': 0, 'used': 0, 'free': 0}
#判断操作系统,获取IP
day = platform.system()
def selsys():
if day == 'Linux':
def valid_ip(ip):
if ("255" in ip) or ( ip == "127.0.0.1") or ( ip == "0.0.0.0" ):
return False
else:
return True
def get_ip(valid_ip):
ipss = ''.join(os.popen("ifconfig").readlines())
match = "\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}"
ips = re.findall(match, ipss, flags=re.M)
ip = filter(valid_ip, ips)
return ''.join(ip)
ip_addr = get_ip(valid_ip)
return ip_addr
else:
localIP = socket.gethostbyname(socket.gethostname())#得到本地ip
return localIP
# 获取CPU信息
def get_cpu_info():
cpu_times = psutil.cpu_times()
cpu['user'] = cpu_times.user
cpu['system'] = cpu_times.system
cpu['idle'] = cpu_times.idle
cpu['percent'] = psutil.cpu_percent(interval=2)
# 获取内存信息
def get_mem_info():
mem_info = psutil.virtual_memory()
mem['total'] = mem_info.total
mem['available'] = mem_info.available
mem['percent'] = mem_info.percent
mem['used'] = mem_info.used
mem['free'] = mem_info.free
#邮箱
def fyemail(self):
mail_info = {
"from": "****@qq.com",
"to": "****@163.com",
"hostname": "smtp.qq.com",
"username": "****@qq.com",
"password": "youpasswd",
"mail_subject": "Fyszy服务器监控",
"mail_text": '''
你好:
服务器:%s,CPU已用:%d%%,内存已用:%d%%,请关闭占用进程以免影响后续使用!
'''%(self,cpu_status,mem_status),
"mail_encoding": "utf-8"
}
if __name__ == '__main__':
# 这里使用SMTP_SSL就是默认使用465端口
smtp = SMTP_SSL(mail_info["hostname"])
smtp.set_debuglevel(1)
smtp.ehlo(mail_info["hostname"])
smtp.login(mail_info["username"], mail_info["password"])
msg = MIMEText(mail_info["mail_text"], "plain", mail_info["mail_encoding"])
msg["Subject"] = Header(mail_info["mail_subject"], mail_info["mail_encoding"])
msg["from"] = mail_info["from"]
msg["to"] = mail_info["to"]
smtp.sendmail(mail_info["from"], mail_info["to"], msg.as_string())
smtp.quit()
#若来连续10个10秒CPU或内存超过80%则执行
i = 10
while True:
if __name__ == '__main__':
get_cpu_info()
cpu_status = cpu['percent']
get_mem_info()
mem_status = mem['percent']
if i != 0:
if cpu_status > 80 or mem_status > 80:
i -= 1
time.sleep(10)
#发送邮件后时间恢
else:
fyemail(selsys())
i += 10