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