· 10 years ago · Jul 14, 2016, 01:06 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)) > 70:
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
65
66
67 def sql_log(self):
68 from pymysql import connect, err, sys, cursors
69 szint = self.warning()
70 datum = str(datetime.datetime.now()).split(".")[0].replace(":","-")
71 conn = connect( host = 'localhost',
72 port = 3306,
73 user = 'root',
74 passwd = pw.rootpw,
75 db = 'Emma' );
76 cursor = conn.cursor( cursors.DictCursor )
77 #CREATE TABLE IF NOT EXISTS
78 cursor.execute( "INSERT INTO `Processzor_Homerseklet` "\
79 "( `Processzor`, `Mag1` , `Mag2` , `Mag3` , `Mag4` , `Mag5` , `Mag6` ," \
80 " MemTotal,MemUsage,`datum` , `szint`) VALUES( '%s', '%s' , '%s', '%s', '%s' , '%s', '%s', '%s' , '%s','%s' , '%s' ) " %\
81 (self.mag0,self.mag1,self.mag2,self.mag3,self.mag4,self.mag5,self.mag6,self.total,self.usagee,datum,szint))
82 conn.commit()
83 conn.close()
84 return "SQL LOG Letrehozva."
85
86 def __str__(self):
87 Text = "LOG:\n" +\
88 "Processzor homerseklete : %s celsius fok\n" % (self.physical)+\
89 "Mag1 = %s celsius fok\n" % (self.mag1) +\
90 "Mag2 = %s celsius fok\n" % (self.mag2)+\
91 "Mag3 = %s celsius fok\n" % (self.mag3)+\
92 "Mag4 = %s celsius fok\n" % (self.mag4)+\
93 "Mag5 = %s celsius fok\n" % (self.mag5)+\
94 "Mag6 = %s celsius fok\n" % (self.mag6)
95 if self.warning() == 2:
96 Text = "|Emma automatikusan kikapcsolt!|\n" + Text
97 return Text
98 else:
99 return Text
100
101
102 def send_mail(self,warninglevel):
103 #########################
104 try:
105 from email.mime.multipart import MIMEMultipart
106 from email.mime.text import MIMEText
107 import smtplib
108 me = "dezsobence98@gmail.com"
109 you = "dj@onlygame.hu"
110
111 msg = MIMEMultipart('alternative')
112 msg['Subject'] = "Processzor homerseklet (60 fok ^ ) | Warning!"
113 msg['From'] = me
114 msg['To'] = you
115
116 process_list = "<br />".join(os.popen("ps aux | less").read().splitlines())
117 os.popen("echo q | htop | aha --black --line-fix > htop.html")
118 time.sleep(5)
119 memm = "Memória használat: "+self.total+"/"+self.usagee
120 self.mitortent.append(memm)
121 f = "<b>"+"".join(open("htop.html","r").read().splitlines())+"</b>"
122 text = "<br />".join(self.mitortent)+"<br /> <br /> <br /> <i>***ps aux | less***</i> <br /> <br />"+process_list
123 if warninglevel == 2:
124 text = "<b>A processzor 70 fok fölé emelkedett, Emma kikapcsolt.</b> <br />"+text
125 msg['Subject'] = "### Emma kikapcsolt (70 fok ^) | Warning! ###"
126 else:
127 text = "<b>A processzor 60 fok fölé emelkedett</b> <br />"+text
128 html = text+f
129 #part1 = MIMEText(text, 'plain')
130 part2 = MIMEText(html, 'html')
131
132 #msg.attach(part1)
133 msg.attach(part2)
134
135 username = 'dezsobence98@gmail.com'
136 password = pw.mailpw
137 server = smtplib.SMTP('smtp.gmail.com:587')
138 server.starttls()
139 server.login(username,password)
140 server.sendmail(me, you, msg.as_string())
141 server.quit()
142 except Exception as err:
143 print(err)
144
145 #########################
146 """
147 process_list = "\n".join(os.popen("ps aux | less").read().splitlines())
148 try:
149 SUBJECT,TEXT = "",""
150 fromaddr = 'dezsobence98@gmail.com'
151 toaddrs = 'dj@onlygame.hu'
152 if warninglevel == 2:
153 SUBJECT = "Emma kikapcsolva ||| Processzor tulmelegedett"
154 TEXT = "Emma tulmelegedett, automatikusan kikapcsolva.\n\n"+\
155 "\n".join(self.mitortent)+"\n***ps aux | less***\n"+process_list
156 else:
157 SUBJECT = "Processzor tulmelegedett! |Figyelmeztetes|"
158 TEXT = "\n".join(self.mitortent)+"\n\n***ps aux | less***\n"+process_list
159 msg = 'Subject: %s\n\n%s' % (SUBJECT, TEXT)
160 username = 'dezsobence98@gmail.com'
161 password = pw.mailpw
162 server = smtplib.SMTP('smtp.gmail.com:587')
163 server.starttls()
164 server.login(username,password)
165 server.sendmail(fromaddr, toaddrs, msg)
166 server.quit()
167 print("Sikeres mail kuldes")
168 except Exception as err:
169 print(err)
170 """
171 def shutdownEmma(self):
172 print("A szerver 1 perc múlva leáll.")
173 print("Túl nagy a terhelés.")
174 time.sleep(65)
175 os.popen("echo %s | sudo -S shutdown" % (rootpw))
176
177if __name__ == "__main__":
178 temp = os.popen('sensors').read().splitlines()
179 sensor = homerseklet_check(temp)
180 warninglevel = sensor.warning()
181 sensor.usage_()
182 if warninglevel != 0:
183 sensor.send_mail(warninglevel)
184 #sensor.log()
185 sensor.sql_log()
186 print(str(sensor))
187 if warninglevel == 2:
188 sensor.shutdownEmma()