· 10 years ago · Jul 14, 2016, 01:21 AM
1import math
2import sys
3import random
4import os
5import datetime
6import time
7sys.path.insert(0, 'conn')
8import pw
9
10########################################################################################
11# #
12# Author Bence Dezso | CPU Temp Checker | Auto mail send when warning | Auto shutdown #
13# #
14########################################################################################
15
16
17class homerseklet_check():
18 def __init__(self,homerseklet):
19 self.physical = homerseklet[2].split()[3].split(".")[0].replace("+","")
20 for i,k in enumerate(homerseklet[3:9],1):
21 fok = k.rstrip().lstrip().split()[2].split(".")[0].replace("+","")
22 exec('self.mag%d = %s' % (i,fok))
23 self.mag0 = self.physical
24 self.mitortent = list()
25 self.total = 0
26 self.usagee = 0
27
28 def warning(self):
29 mitortent = list()
30 riasztas = 0
31 for i in range(0,7):
32 if eval("int(self.mag%d)" % (i)) > 60:
33 if riasztas != 2:riasztas = 1
34 elif eval("int(self.mag%d)" % (i)) > 72:
35 riasztas = 2
36 self.mitortent.append("Processzor (mag%d) %s fok" % (i,eval("self.mag%d" % (i))))
37 return riasztas
38
39 def log(self):
40 directory = str(datetime.datetime.now()).split()[0]
41 if not os.path.exists("proclogs/"+directory):
42 os.makedirs("proclogs/"+directory)
43 ido = str(datetime.datetime.now()).split(".")[0].replace(":","-")
44 with open("proclogs/"+directory+"/"+ido+".processor_log","w") as f:
45 print(self.__str__(),file = f)
46
47 def darabol(self,mit):
48 darabok = list()
49 text = ""
50 for i in mit:
51 if i != " ":
52 text += i
53 elif len(text) > 0:
54 darabok.append(text)
55 text = ""
56 return darabok
57
58 def usage_(self):
59 info = os.popen("free -m").read().splitlines()
60 a = self.darabol(info[1])
61 self.total = a[1]
62 self.usagee = a[2]
63
64 def sql_log(self):
65 from pymysql import connect, err, sys, cursors
66 szint = self.warning()
67 datum = str(datetime.datetime.now()).split(".")[0].replace(":","-")
68 conn = connect( host = 'localhost',
69 port = 3306,
70 user = 'root',
71 passwd = pw.rootpw,
72 db = 'Emma' );
73 cursor = conn.cursor( cursors.DictCursor )
74 #CREATE TABLE IF NOT EXISTS
75 cursor.execute( "INSERT INTO `Processzor_Homerseklet` "\
76 "( `Processzor`, `Mag1` , `Mag2` , `Mag3` , `Mag4` , `Mag5` , `Mag6` ," \
77 " MemTotal,MemUsage,`datum` , `szint`) VALUES( '%s', '%s' , '%s', '%s', '%s' , '%s', '%s', '%s' , '%s','%s' , '%s' ) " %\
78 (self.mag0,self.mag1,self.mag2,self.mag3,self.mag4,self.mag5,self.mag6,self.total,self.usagee,datum,szint))
79 conn.commit()
80 conn.close()
81 return "SQL LOG Letrehozva."
82
83 def __str__(self):
84 Text = "LOG:\n" +\
85 "Processzor homerseklete : %s celsius fok\n" % (self.physical)+\
86 "Mag1 = %s celsius fok\n" % (self.mag1) +\
87 "Mag2 = %s celsius fok\n" % (self.mag2)+\
88 "Mag3 = %s celsius fok\n" % (self.mag3)+\
89 "Mag4 = %s celsius fok\n" % (self.mag4)+\
90 "Mag5 = %s celsius fok\n" % (self.mag5)+\
91 "Mag6 = %s celsius fok\n" % (self.mag6)
92 if self.warning() == 2:
93 Text = "|Emma automatikusan kikapcsolt!|\n" + Text
94 return Text
95 else:
96 return Text
97
98
99 def send_mail(self,warninglevel):
100 #########################
101 try:
102 from email.mime.multipart import MIMEMultipart
103 from email.mime.text import MIMEText
104 import smtplib
105 me = "dezsobence98@gmail.com"
106 you = "dj@onlygame.hu"
107
108 msg = MIMEMultipart('alternative')
109 msg['Subject'] = "Processzor homerseklet (60 fok ^ ) | Warning!"
110 msg['From'] = me
111 msg['To'] = you
112
113 process_list = "<br />".join(os.popen("ps aux | less").read().splitlines())
114 os.popen("echo q | htop | aha --black --line-fix > htop.html")
115 time.sleep(5)
116 memm = "Memória használat: "+self.total+"/"+self.usagee
117 self.mitortent.append(memm)
118 f = "<b>"+"".join(open("htop.html","r").read().splitlines())+"</b>"
119 text = "<br />".join(self.mitortent)+"<br /> <br /> <br /> <i>***ps aux | less***</i> <br /> <br />"+process_list
120 if warninglevel == 2:
121 text = "<b>A processzor 70 fok fölé emelkedett, Emma kikapcsolt.</b> <br />"+text
122 msg['Subject'] = "### Emma kikapcsolt (70 fok ^) | Warning! ###"
123 else:
124 text = "<b>A processzor 60 fok fölé emelkedett</b> <br />"+text
125 html = text+f
126 #part1 = MIMEText(text, 'plain')
127 part2 = MIMEText(html, 'html')
128
129 #msg.attach(part1)
130 msg.attach(part2)
131
132 username = 'dezsobence98@gmail.com'
133 password = pw.mailpw
134 server = smtplib.SMTP('smtp.gmail.com:587')
135 server.starttls()
136 server.login(username,password)
137 server.sendmail(me, you, msg.as_string())
138 server.quit()
139 print("Mail elkuldve!")
140 except Exception as err:
141 print(err)
142
143 #########################
144 """
145 process_list = "\n".join(os.popen("ps aux | less").read().splitlines())
146 try:
147 SUBJECT,TEXT = "",""
148 fromaddr = 'dezsobence98@gmail.com'
149 toaddrs = 'dj@onlygame.hu'
150 if warninglevel == 2:
151 SUBJECT = "Emma kikapcsolva ||| Processzor tulmelegedett"
152 TEXT = "Emma tulmelegedett, automatikusan kikapcsolva.\n\n"+\
153 "\n".join(self.mitortent)+"\n***ps aux | less***\n"+process_list
154 else:
155 SUBJECT = "Processzor tulmelegedett! |Figyelmeztetes|"
156 TEXT = "\n".join(self.mitortent)+"\n\n***ps aux | less***\n"+process_list
157 msg = 'Subject: %s\n\n%s' % (SUBJECT, TEXT)
158 username = 'dezsobence98@gmail.com'
159 password = pw.mailpw
160 server = smtplib.SMTP('smtp.gmail.com:587')
161 server.starttls()
162 server.login(username,password)
163 server.sendmail(fromaddr, toaddrs, msg)
164 server.quit()
165 print("Sikeres mail kuldes")
166 except Exception as err:
167 print(err)
168 """
169 def shutdownEmma(self):
170 print("A szerver 1 perc múlva leáll.")
171 print("Túl nagy a terhelés.")
172 time.sleep(65)
173 os.popen("echo %s | sudo -S shutdown" % (rootpw))
174
175if __name__ == "__main__":
176 temp = os.popen('sensors').read().splitlines()
177 sensor = homerseklet_check(temp)
178 warninglevel = sensor.warning()
179 sensor.usage_()
180 if warninglevel != 0:
181 sensor.send_mail(warninglevel)
182 #sensor.log()
183 sensor.sql_log()
184 print(str(sensor))
185 if warninglevel == 2:
186 sensor.shutdownEmma()