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.7 $" 00015 __release__ = "$Name: R04-12-00 $" 00016 __credits__ = "SLAC" 00017 00018 import LATTE.copyright_SLAC 00019 00020 from LATTE.monitoring.Recorder import Recorder 00021 from LATTE.database.gHSK import GHSK 00022 from LATTE.monitoring.TrendMaps import GHSKTrendMap 00023 import logging as log 00024 00025 class HskAlarmRecorder(Recorder): 00026 """Applys the trends to the housekeeping node structure. 00027 As alarms are part of the node structure, we get those for 00028 free. 00029 """ 00030 def __init__(self, ghsk): 00031 Recorder.__init__(self) 00032 self.__ghsk = ghsk 00033 self.__trendMap = GHSKTrendMap(ghsk) 00034 00035 def processTrends(self, trendables): 00036 if trendables is None: return 00037 for t in trendables: 00038 key = t.name 00039 value = t.content['Raw Value'] 00040 tuple = self.__trendMap.mapGet(key) 00041 if tuple is not None: 00042 node, attr = tuple 00043 if node is not None: 00044 if attr != '' and attr is not None: 00045 node.regs[attr.lower()].set(value, bypass=True) 00046 elif isinstance(node, str): 00047 pass 00048 00049 class HskFileRecorder(Recorder): 00050 """Writes the Hsk EGUs to a flat file for later retrieval. 00051 """ 00052 def __init__(self, ghsk, flatFile): 00053 Recorder.__init__(self) 00054 self.__ghsk = ghsk 00055 self.__trendMap = GHSKTrendMap(ghsk) 00056 self.__flatFile = open(flatFile, 'a+') 00057 00058 keyList = self.__flatFile.readline() 00059 if keyList == '': # No file, 00060 self.processTrends = self.__createFileHeader 00061 else: 00062 # create a list of keys from whitespace separated text blobs 00063 self.__keyList = keyList.split() 00064 self.processTrends = self.__processTrends 00065 self.__flatFile.seek(0,2) 00066 self.__pad = ' ' 00067 00068 def __processTrends(self, trendables): 00069 if trendables is None: return 00070 00071 from TrendMaps import makeSimpleMap 00072 trendMap = makeSimpleMap(trendables, self.__trendMap) 00073 00074 line = '' 00075 for k in self.__keyList: 00076 if k in trendMap: 00077 line += str(trendMap[k]) + self.__pad 00078 else: 00079 line += "None " + self.__pad 00080 line += '\n' 00081 self.__flatFile.write(line) 00082 self.__flatFile.flush() 00083 00084 def __createFileHeader(self, trendables): 00085 if trendables is None: return 00086 # 1: reset function pointer to processTrends 00087 self.processTrends = self.__processTrends 00088 # 2: create the sorted key list 00089 self.__keyList = [] 00090 for t in trendables: 00091 self.__keyList.append(t.name) 00092 self.__keyList.sort() 00093 self.__keyList.insert(0, 'TimeStamp') 00094 line = '' 00095 # 3: write the index line of the file: 00096 for k in self.__keyList: 00097 line += (k + self.__pad) 00098 line += '\n' 00099 self.__flatFile.writelines([line]) 00100 # 4: Profit! 00101 self.processTrends(trendables) 00102 00103 class HskPacketRecorder(Recorder): 00104 def __init__(self, ghsk, flatFile): 00105 Recorder.__init__(self) 00106 self.__ghsk = ghsk 00107 self.__trendMap = GHSKTrendMap(ghsk) 00108 self.__flatFile = open(flatFile, 'a+') 00109 self.__flatFile.seek(0,2) 00110 self.__pad = ' ' 00111 00112 def processTrends(self, trendables): 00113 if trendables is None: return 00114 trendMap = {} 00115 # Add the timestamp 00116 timeStamp = trendables[0].time 00117 trendMap['TimeStamp'] =timeStamp 00118 line = '' 00119 00120 line += 'TimeStamp' + ':' + str(timeStamp) + self.__pad 00121 00122 for t in trendables: 00123 key = t.name 00124 tuple = self.__trendMap.mapGet(key) 00125 if tuple is not None: 00126 node, attr = tuple 00127 if node is not None and attr != '': 00128 value = node.regs[attr.lower()].get(bypass=False) 00129 raw = node.regs[attr.lower()].get(bypass=True) 00130 00131 line += key + ':' + str(value) + self.__pad 00132 line += '\n' 00133 self.__flatFile.write(line) 00134 self.__flatFile.flush()