Main Page | Packages | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | Related Pages

HskReceiver.py

00001 #!/usr/local/bin/python
00002 #
00003 #                               Copyright 2004
00004 #                                     by
00005 #                        The Board of Trustees of the
00006 #                     Leland Stanford Junior University.
00007 #                            All rights reserved.
00008 #
00009 
00010 __facility__ = "Online"
00011 __abstract__ = "GLAST LAT Housekeeping server infrastructure"
00012 __author__   = "Jim Panetta <panetta@slac.stanford.edu> SLAC - GLAST I&T"
00013 __date__     = "07/28/04"
00014 __version__  = "$Revision: 1.9 $"
00015 __release__  = "$Name: R04-12-00 $"
00016 __credits__  = "SLAC"
00017 
00018 import LATTE.copyright_SLAC
00019 
00020 from LATTE.monitoring.Receiver       import Receiver
00021 from LATTE.client.gOptions           import Options
00022 
00023 import logging
00024 from linecache import *
00025 import time
00026 
00027 second  = 1
00028 minute  = 60 * second
00029 hour    = minute * 60
00030 day     = hour * 24
00031 era     = 10**9
00032 
00033 timeFmt = '%Y/%m/%d  %H:%M:%S'
00034 dataFile     = None
00035 timeDepth    = 2*hour / 5
00036 
00037 class HskSimpleTextReceiver(Receiver):
00038   """
00039   """
00040   def __init__(self, flatFile, startTime):
00041     Receiver.__init__(self)
00042     self.log     = logging.getLogger('HskSimpleTextReceiver')
00043     self.__flatFile   = flatFile
00044     self.__keyList    = []
00045     self.__lineNumber = 1
00046     self.__startTime  = startTime
00047 
00048   def shutdown(self):
00049     self.setReceiving(0)
00050 
00051   def receive(self):
00052     if self.__lineNumber == 1:
00053       checkcache()
00054       keyList = getline(self.__flatFile, self.__lineNumber)
00055       if keyList == '': time.sleep(0.1); return
00056       # create a list of keys from whitespace separated text blobs
00057       self.__keyList = keyList.split()
00058       self.__lineNumber += 1
00059     while True:
00060       line = getline(self.__flatFile, self.__lineNumber)
00061       # print line
00062       if line == '': 
00063         checkcache()
00064         break
00065       # if self.__lineNumber % 100 == 3: 
00066         # from HskGuiReceiver import memget
00067         # print  memget()
00068       self.__lineNumber += 1
00069       trendMap = {}
00070       values = line.split()
00071       # first key is 'TimeStamp', so this is always safe:
00072       if float(values[0]) < self.__startTime:
00073         continue
00074       for key in self.__keyList:
00075         v = values[self.__keyList.index(key)]
00076         if v == 'None':    # No value in table.
00077           trendMap[key] = None
00078         else:
00079           trendMap[key] = float(values[self.__keyList.index(key)])
00080       self.dispatch(trendMap)
00081     time.sleep(10)
00082 
00083   def dispatch(self, trendMap):
00084     if trendMap == {}: return
00085     print time.strftime(timeFmt, time.localtime(trendMap['TimeStamp'])), '    ' \
00086           'DAQ TEMP:', trendMap['LHKAEMDAQBT']
00087 
00088 class HskCfgTextReceiver(HskSimpleTextReceiver):
00089   def __init__(self, flatFile, startTime, trendList):
00090     HskSimpleTextReceiver.__init__(self, flatFile, startTime)
00091     self.__trendList = trendList
00092     
00093   def dispatch(self, trendMap):
00094     if trendMap == {}: return
00095     dispatchMap = {'TimeStamp':trendMap['TimeStamp']}
00096     for item in trendMap:
00097       if self.trendItem(item):
00098         dispatchMap[item] = trendMap[item]
00099     self.process(dispatchMap)
00100     
00101   def process(self, dispatchMap):
00102     line = ''
00103     for item in dispatchMap:
00104       line += item + ":" + str(dispatchMap[item]) + "    "
00105     # print line
00106     
00107   def trendItem(self, item):
00108     if item in self.__trendList:
00109       return True
00110     else:
00111       return False
00112 
00113 def parseKeyFile(keyFile):
00114   keyList = {}
00115   f       = open(keyFile, 'r')
00116   for line in f.readlines():
00117     line.strip()
00118     if line[0] != '#' and line != '':
00119       (key,title)  = line.split(':', 1)
00120       keyList[key.strip()] = title.strip()
00121   f.close()
00122   return keyList
00123 
00124 def startup():
00125   logging.basicConfig()
00126   logging.root.setLevel(logging.DEBUG)
00127   
00128 def usage():
00129   pass
00130 
00131 if __name__ == '__main__':
00132   startup()
00133 
00134   # Options, first list mandatory, second list optional 
00135   options = Options(['dataFile'], ['timeDepth', 'keyFile'])
00136   try:
00137     options.parse()
00138   except Exception, msg:
00139     options.usage(usage())
00140     raise Exception, msg
00141   
00142   dataFile = options.dataFile
00143   if options.timeDepth is not None:
00144     timeDepth = int(options.timeDepth)
00145   else:
00146     timeDepth = 2*hour
00147   startTime = time.time() - timeDepth
00148 
00149   if options.keyFile is not None:
00150     keyFile = options.keyFile
00151     keyList = parseKeyFile(keyFile)
00152   else:  # really really basic set of histos.
00153     keyList = {'LHKAEMDAQB33V':'AEM DAQ board 3.3 V', 
00154                'LHKAEMFR11T'  :'AEM Free board 11 Temp',
00155                'LHKAEMDAQBT'  :'AEM DAQ board Temp', 
00156                'LHKAEMFR11V1' :'AEM Free 11 HV 1',
00157                'LHKAEMFR11V2' :'AEM Free 11 HV 2',
00158                'LHKAEMFR11VD' :'AEM Free 11 VDD',
00159                }
00160   
00161   # r = HskSimpleTextReceiver(dataFile, startTime)
00162   r = HskCfgTextReceiver(dataFile, startTime, keyList.keys())
00163   
00164   
00165   r.setReceiving(1)
00166   
00167   try:
00168     while 1:
00169       time.sleep(1)
00170   except Exception, e:
00171     r.shutdown()
00172 
00173 

Generated on Fri Jul 21 13:26:30 2006 for LATTE R04-12-00 by doxygen 1.4.3