Annotation of checkStation/checkStation.py, revision 1.2
1.1 dwinter 1: from OFS.SimpleItem import SimpleItem
2: from Globals import package_home
3:
4: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
5: import os
6: import os.path
7: import time
8:
1.2 ! dwinter 9: module_list=['11150','11220','11240','11340','12010','13110','13210','13310','13500','20610','21210','21600','22310','23110','24110','24212','24231','24241','24251','24321','24341','24411','24421','24431','24441','24511','24521','30511','31111','31120','31131','31142','31151','31161','31171','31211','31221','31231','31252','31305','31410','32010','33100']
1.1 dwinter 10: grepString="DragThing"
11:
12: def zptFile(self, path, orphaned=False):
13: """returns a page template file from the product"""
14: if orphaned:
15: # unusual case
16: pt=PageTemplateFile(os.path.join(package_home(globals()), path))
17: else:
18: pt=PageTemplateFile(os.path.join(package_home(globals()), path)).__of__(self)
19: return pt
20:
21:
22: def getLastLine(lines):
23: """letzte"""
24: length=len(lines)
25:
26: if length>0:
27: return lines[length-1]
28: else:
29: return None
30:
31: def checkFormat(line,formats):
32: """checke formats"""
1.2 ! dwinter 33:
1.1 dwinter 34: splitted=line.split("GET")
35: splitted=splitted[1].split()
1.2 ! dwinter 36:
1.1 dwinter 37: splitted2=splitted[0].split("/")
38:
1.2 ! dwinter 39: try:
! 40: if splitted2[4][0:3] in formats:
1.1 dwinter 41: return True
1.2 ! dwinter 42: else:
! 43: return False
! 44: except:
1.1 dwinter 45: return False
46:
47: def cmpLine(line):
1.2 ! dwinter 48: """gibt minuten zwischen letztem Eintrag und localtime"""
1.1 dwinter 49:
1.2 ! dwinter 50: # Z2.log
! 51: ## tmp=line.split("[")
! 52: ## tmp=tmp[1].split("]")
! 53:
! 54: ## timestr=tmp[0]
1.1 dwinter 55:
1.2 ! dwinter 56: ##
! 57:
! 58: #pound log
! 59: tmp=line.split()
! 60: timestr=tmp[2]
1.1 dwinter 61:
62:
63: split=timestr.split(":")
1.2 ! dwinter 64: time1=int(split[0])*60+int(split[1])
1.1 dwinter 65:
66: localtime=time.asctime(time.localtime())
1.2 ! dwinter 67:
1.1 dwinter 68: split=localtime.split(":")
69: time2=int(split[0].split()[3])*60+int(split[1])
70:
71:
72: return time2-time1
73:
74: class checkStation(SimpleItem):
75: """test ob station lebt"""
76:
77: meta_type="check Media Stations"
78:
1.2 ! dwinter 79: manage_options=SimpleItem.manage_options+(
! 80: {'label':'Overview Stations','action':'overviewStations'},
! 81: {'label':'change check','action':'changeCheckStationForm'},
! 82: {'label':'checkRebootDead','action':'checkRebootDead'},
! 83: )
1.1 dwinter 84: def asctime(self):
85: return time.asctime(tm)
86:
87: def __init__(self, id, path):
88: """init"""
89: self.path=path #pfad fuer logfile
90: self.id=id
91: self.modulOverview={}
92:
93: def checkStation(self,nr,time=5,formats=["VID"]):
94: """check station with nr nr"""
95: txt=[]
96:
97: txtFh = os.popen("grep /%s/ %s | tail "%(nr,self.path))
98: for line in txtFh.readlines():
99: txt.append(line)
100:
101:
102: line=getLastLine(txt)
103:
104: if not line:
105: return True,"",0
106:
107: cmpT=cmpLine(line)
108:
109: if not checkFormat(line,formats):
110: # teste ob letzte Zeile vom format in formats
111:
112: return True,line,cmpT
113:
114:
115: if cmpT > time:
116: return False,line,cmpT
117:
118: else:
119: return True,line,cmpT
120:
121: def getModuls(self):
122: """getModuls"""
123: return module_list
124: def overviewStations(self,time=5):
125: """overview"""
126: self.REQUEST.SESSION['outTime']=time
127:
128: zp=zptFile(self,"zpt/overview.zpt")
129: return zp()
130:
131: ips={"22222":"127.0.0.1","33335":"127.0.0.2"}
132:
133: def rebootStation(self,modul):
134: """neustart"""
1.2 ! dwinter 135: retStr=""
1.1 dwinter 136: ip=self.ips[modul]
137:
138: str="""ssh root@%s "ps -xa | grep %s" """
139: rets=os.popen(str%(ip,grepString)).readlines()
140:
141: for ret in rets:
142:
143: if ret.find("grep") <= 0:
144: process=ret.split()[0]
145: str="""ssh root@%s kill -9 %s """
1.2 ! dwinter 146: #os.popen(str%(ip,process)).readlines()
! 147: retStr+=str%(ip,process) + "/n"
! 148: return retStr
1.1 dwinter 149:
150: def checkRebootDead(self,timer=5):
151: """checks and reboots non responding firefox"""
152: self.lastCheck=time.localtime()
1.2 ! dwinter 153: ret=""
1.1 dwinter 154:
155: for modul in self.getModuls():
156:
157: checked=self.checkStation(modul,time=timer,formats=["VID"])
158: if not checked[0]:
159:
1.2 ! dwinter 160: ret+=self.rebootStation(modul)
1.1 dwinter 161: if not hasattr(self,'modulOverview'):
162: setattr(self,'modulOverview',{})
163: self.modulOverview[modul]=time.localtime()
164:
165:
166: def rebootOverview(self):
167: """give Overview"""
168: pt=zptFile(self,'zpt/rebootOverview.zpt')
169: return pt()
170:
171: def changeCheckStationForm(self):
172: """form for change"""
173:
174: pt=zptFile(self, 'zpt/ChangeCheckStation.zpt')
175:
176: return pt()
177:
178: def changeCheckStation(self,path,RESPONSE=None):
179: """change"""
180: self.path=path
181:
182: if RESPONSE:
183: RESPONSE.redirect("manage_main")
184:
185:
186: def manage_addCheckStationForm(self):
187: """add"""
188: pt=zptFile(self,'zpt/AddCheckStation')
189: return pt()
190:
191: def manage_addCheckStation(self,id,path,RESPONSE=None):
192: """manage checkstation"""
193:
194: newObj=checkStation(id,path)
195: self._setObject(id,newObj)
196:
197: if RESPONSE is not None:
198: RESPONSE.redirect('manage_main')
199:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>