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 import time 00020 00021 from LATTE.monitoring.Retriever import Retriever 00022 from LATTE.monitoring.Trendable import Trendable 00023 from LATTE.database.gLAT import GLAT 00024 00025 class HskLatRetriever(Retriever): 00026 """Fully populated LAT retriever. 00027 Should get all available LAT housekeeping quantities and trend them. 00028 """ 00029 def __init__(self, glat): 00030 Retriever.__init__(self) 00031 from LATTE.monitoring.TrendMaps import GLATTrendMap 00032 self.__trendMap = GLATTrendMap(glat) 00033 # Deal with GEBM TEM multiplexer... 00034 self.__mux = [] 00035 for i in range(16): 00036 self.__mux.append('LHKETEM%XRS'%i) 00037 00038 def retrievePacket(self): 00039 packet = [] 00040 timestamp = time.time() # time() returns seconds since epoch, UTC 00041 for key in self.__trendMap.mapKeys(): 00042 atuple = self.__trendMap.mapGet(key) 00043 if atuple is not None: 00044 node, attr = atuple 00045 if node is not None and attr != '': 00046 try: 00047 if key in self.__mux: # have a GEBM TEM multiplexer... 00048 muxes = node.downEBMC().tem_statistics 00049 mux0 = ( muxes ) & 0xf 00050 mux1 = ( muxes >> 4 ) & 0xf 00051 tem = self.__mux.index(key) 00052 if tem == mux0: 00053 value = node.downEBMST().regs['receive_tem_mux0'].get(bypass=1) 00054 elif tem == mux1: 00055 value = node.downEBMST().regs['receive_tem_mux1'].get(bypass=1) 00056 else: 00057 value = 0 00058 else: 00059 value = node.regs[attr.lower()].get(bypass=1) 00060 except Exception, e: 00061 # print e 00062 value = None 00063 packet.append( Trendable( key, timestamp, { 'Raw Value' : value } ) ) 00064 return packet 00065 00066 class HskTestRetriever(Retriever): 00067 """ Test HskRetriever 00068 """ 00069 def __init__(self, glat): 00070 self.__monitorList={} 00071 from HskRegisters import NodeRegisterList 00072 00073 AEQ = glat.downAEM().downAEQ() 00074 self.__monitorList["AEQ"] = NodeRegisterList(AEQ) 00075 from LATTE.monitoring.HskRegisters import AEQHskRegMap 00076 self.__hskMap = AEQHskRegMap() 00077 00078 def retrievePacket(self): 00079 packet=[] 00080 timestamp = time.time() # time() returns seconds since epoch, UTC 00081 00082 for reg in self.__monitorList["AEQ"].map().values(): 00083 reg.write(self.aeqBuildDummy(timestamp)) 00084 parsed = self.__hskMap.decodeRegister(reg.name(), reg.read()) 00085 for key in parsed: 00086 tName = reg.name() + ":" + key 00087 packet.append( Trendable(tName, timestamp, {'Raw Value' : parsed[key]}) ) 00088 00089 return packet 00090 00091 def aeqBuildDummy(self,timestamp): 00092 import math 00093 ret = 0L 00094 for i in range(2): 00095 word = long( math.fabs(math.sin( (timestamp*math.pi)/(i*12+12) )) * 0xfff) 00096 ret |= word << (16*i) 00097 return ret 00098