File:  [Repository] / checkStation / checkStation.py
Revision 1.1: download - view: text, annotated - select for diffs - revision graph
Sun May 15 08:35:00 2005 UTC (19 years ago) by dwinter
Branches: MAIN
CVS tags: HEAD
Initial revision

    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: 
    9: module_list=['33335','22222','ff']
   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"""
   33:     splitted=line.split("GET")
   34:     splitted=splitted[1].split()
   35:     splitted2=splitted[0].split("/")
   36: 
   37:     if splitted2[4][0:3] in formats:
   38:         return True
   39:     else:
   40:         return False
   41: 
   42: 
   43: def cmpLine(line):
   44:     """gibt minuten differenz der letzen beiden eintraege"""
   45: 
   46:     
   47:     tmp=line.split("[")
   48:     tmp=tmp[1].split("]")
   49:     
   50:     timestr=tmp[0]
   51:     
   52:     split=timestr.split(":")
   53:     time1=int(split[1])*60+int(split[2])
   54: 
   55:     localtime=time.asctime(time.localtime())
   56:     split=localtime.split(":")
   57:     time2=int(split[0].split()[3])*60+int(split[1])
   58: 
   59: 
   60:     return time2-time1
   61:     
   62: class checkStation(SimpleItem):
   63:     """test ob station lebt"""
   64: 
   65:     meta_type="check Media Stations"
   66: 
   67:     def asctime(self):
   68:         return time.asctime(tm)
   69:         
   70:     def __init__(self, id, path):
   71:         """init"""
   72:         self.path=path #pfad fuer logfile
   73:         self.id=id
   74:         self.modulOverview={}
   75: 
   76:     def checkStation(self,nr,time=5,formats=["VID"]):
   77:         """check station with nr nr"""
   78:         txt=[]
   79: 
   80:         txtFh = os.popen("grep /%s/ %s | tail "%(nr,self.path))
   81:         for line in txtFh.readlines():
   82:             txt.append(line)
   83: 
   84:         
   85:         line=getLastLine(txt)
   86: 
   87:         if not line:
   88:             return True,"",0
   89: 
   90:         cmpT=cmpLine(line)
   91: 
   92:         if not checkFormat(line,formats):
   93:             # teste ob letzte Zeile vom format in formats
   94: 
   95:             return True,line,cmpT
   96: 
   97: 
   98:         if cmpT > time:
   99:             return False,line,cmpT
  100: 
  101:         else:
  102:             return True,line,cmpT
  103: 
  104:     def getModuls(self):
  105:         """getModuls"""
  106:         return module_list
  107:     def overviewStations(self,time=5):
  108:         """overview"""
  109:         self.REQUEST.SESSION['outTime']=time
  110:         
  111:         zp=zptFile(self,"zpt/overview.zpt")
  112:         return zp()
  113: 
  114:     ips={"22222":"127.0.0.1","33335":"127.0.0.2"}
  115:     
  116:     def rebootStation(self,modul):
  117:         """neustart"""
  118:         ip=self.ips[modul]
  119: 
  120:         str="""ssh root@%s "ps -xa | grep %s" """
  121:         rets=os.popen(str%(ip,grepString)).readlines()
  122: 
  123:         for ret in rets:
  124: 
  125:             if ret.find("grep") <= 0:
  126:                 process=ret.split()[0]
  127:                 str="""ssh root@%s kill -9 %s """
  128:                 rets=os.popen(str%(ip,process)).readlines()
  129:                 print "WW",str%(ip,process)
  130:         
  131:     def checkRebootDead(self,timer=5):
  132:         """checks and reboots non responding firefox"""
  133:         self.lastCheck=time.localtime()
  134:         
  135:         for modul in self.getModuls():
  136: 
  137:             checked=self.checkStation(modul,time=timer,formats=["VID"])
  138:             if not checked[0]:
  139: 
  140:                 self.rebootStation(modul)
  141:                 if not hasattr(self,'modulOverview'):
  142:                     setattr(self,'modulOverview',{})
  143:                 self.modulOverview[modul]=time.localtime()
  144:                 
  145: 
  146:     def rebootOverview(self):
  147:         """give Overview"""
  148:         pt=zptFile(self,'zpt/rebootOverview.zpt')
  149:         return pt()
  150:     
  151:     def changeCheckStationForm(self):
  152:         """form for change"""
  153: 
  154:         pt=zptFile(self, 'zpt/ChangeCheckStation.zpt')
  155: 
  156:         return pt()
  157: 
  158:     def changeCheckStation(self,path,RESPONSE=None):
  159:         """change"""
  160:         self.path=path
  161: 
  162:         if RESPONSE:
  163:             RESPONSE.redirect("manage_main")
  164: 
  165: 
  166: def manage_addCheckStationForm(self):
  167:     """add"""
  168:     pt=zptFile(self,'zpt/AddCheckStation')
  169:     return pt()
  170: 
  171: def manage_addCheckStation(self,id,path,RESPONSE=None):
  172:     """manage checkstation"""
  173:     
  174:     newObj=checkStation(id,path)
  175:     self._setObject(id,newObj)
  176:     
  177:     if RESPONSE is not None:
  178:         RESPONSE.redirect('manage_main')
  179: 

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>