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

HskRecorder.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.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()

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