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