· 10 years ago · Jul 13, 2016, 07:00 PM
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
26 def warning(self):
27 mitortent = list()
28 riasztas = 0
29 for i in range(0,7):
30 if eval("int(self.mag%d)" % (i)) > 60:
31 if riasztas != 2:riasztas = 1
32 elif eval("int(self.mag%d)" % (i)) > 70:
33 riasztas = 2
34 self.mitortent.append("Processzor (mag%d) tulmelegedett %s fokra" % (i,eval("self.mag%d" % (i))))
35 return riasztas
36
37 def log(self):
38 directory = str(datetime.datetime.now()).split()[0]
39 if not os.path.exists("proclogs/"+directory):
40 os.makedirs("proclogs/"+directory)
41 ido = str(datetime.datetime.now()).split(".")[0].replace(":","-")
42 with open("proclogs/"+directory+"/"+ido+".processor_log","w") as f:
43 print(self.__str__(),file = f)
44
45 def sql_log(self):
46 from pymysql import connect, err, sys, cursors
47 szint = self.warning()
48 datum = str(datetime.datetime.now()).split(".")[0].replace(":","-")
49 conn = connect( host = 'localhost',
50 port = 3306,
51 user = 'root',
52 passwd = pw.rootpw,
53 db = 'Emma' );
54 cursor = conn.cursor( cursors.DictCursor )
55 #CREATE TABLE IF NOT EXISTS
56 cursor.execute( "INSERT INTO `Processzor_Homerseklet` "\
57 "( `Processzor`, `Mag1` , `Mag2` , `Mag3` , `Mag4` , `Mag5` , `Mag6` ," \
58 " `datum` , `szint`) VALUES( '%s', '%s' , '%s', '%s', '%s' , '%s', '%s', '%s' , '%s' ) " %\
59 (self.mag0,self.mag1,self.mag2,self.mag3,self.mag4,self.mag5,self.mag6,datum,szint))
60 conn.commit()
61 conn.close()
62 return "SQL LOG Letrehozva."
63
64 def __str__(self):
65 Text = "LOG:\n" +\
66 "Processzor homerseklete : %s celsius fok\n" % (self.physical)+\
67 "Mag1 = %s celsius fok\n" % (self.mag1) +\
68 "Mag2 = %s celsius fok\n" % (self.mag2)+\
69 "Mag3 = %s celsius fok\n" % (self.mag3)+\
70 "Mag4 = %s celsius fok\n" % (self.mag4)+\
71 "Mag5 = %s celsius fok\n" % (self.mag5)+\
72 "Mag6 = %s celsius fok\n" % (self.mag6)
73 if self.warning() == 2:
74 Text = "|Emma automatikusan kikapcsolt!|\n" + Text
75 return Text
76 else:
77 return Text
78
79
80 def send_mail(self,warninglevel):
81 import smtplib
82 try:
83 SUBJECT,TEXT = "",""
84 fromaddr = 'dezsobence98@gmail.com'
85 toaddrs = 'dj@onlygame.hu'
86 if warninglevel == 2:
87 SUBJECT = "Emma kikapcsolva ||| Processzor tulmelegedett"
88 TEXT = "Emma tulmelegedett, automatikusan kikapcsolva.\n\n"+\
89 "\n".join(self.mitortent)+"\n"+str("\n".join(os.popen("top -n 1").read().splitlines()))
90 else:
91 SUBJECT = "Processzor tulmelegedett! |Figyelmeztetes|"
92 TEXT = "\n".join(self.mitortent)+"\n"+\
93 str("\n".join(os.popen("top -n 1").read().splitlines()))
94 msg = 'Subject: %s\n\n%s' % (SUBJECT, TEXT)
95 username = 'dezsobence98@gmail.com'
96 password = pw.mailpw
97 server = smtplib.SMTP('smtp.gmail.com:587')
98 server.starttls()
99 server.login(username,password)
100 server.sendmail(fromaddr, toaddrs, msg)
101 server.quit()
102 print("Sikeres mail kuldes")
103 except Exception as err:
104 print(err)
105 def shutdownEmma(self):
106 print("A szerver 1 perc múlva leáll.")
107 print("Túl nagy a terhelés.")
108 time.sleep(65)
109 os.popen("echo %s | sudo -S shutdown" % (rootpw))
110
111if __name__ == "__main__":
112 temp = os.popen('sensors').read().splitlines()
113 sensor = homerseklet_check(temp)
114 warninglevel = sensor.warning()
115 if warninglevel != 0:
116 sensor.send_mail(warninglevel)
117 #sensor.log()
118 sensor.sql_log()
119 print(str(sensor))
120 if warninglevel == 2:
121 sensor.shutdownEmma()