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

parseFswHsk.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__ = "Housekeeping trending tester module"
00012 __author__   = "J. Panetta <panetta@SLAC.Stanford.edu> SLAC - GLAST LAT I&T/Online"
00013 __date__     = "7/20/2004"
00014 __version__  = "$Revision: 1.3 $"
00015 __credits__  = "SLAC"
00016 
00017 
00018 import LATTE.copyright_SLAC
00019 
00020 import os, sys
00021 import xml.dom.minidom             as minidom
00022 from LATTE.client.gOptions         import Options
00023 from LATTE.database.gSchemaConfig  import getChildNodes
00024 
00025 class HskPacketWriter(object):
00026   def __init__(self, codeFile=sys.stdout, sqlFile=sys.stdout):
00027     self.__name      = None
00028     self.__apid      = None
00029     self.__length    = None
00030     self.__brief     = None
00031     self.__descr     = None
00032     self.__payload   = []
00033     self.codeFile    = codeFile
00034     self.sqlFile     = sqlFile
00035     pass
00036   
00037   def dump(self):
00038     prefix = '  '
00039     # print "HSK telemetry packet: "
00040     # print "%sHeader:"              % ( prefix )
00041     # print "%s%sapid    = 0x%04x"   % ( prefix, prefix, self.apid()   )
00042     # print "%s%slength  = 0x%04x"   % ( prefix, prefix, self.length() ) 
00043     # print "%s%sbrief   = %s"       % ( prefix, prefix, self.brief()  )
00044     # print "%s%sdescr   = %s"       % ( prefix, prefix, self.descr()  )
00045     # print "%sPayload: "            % ( prefix )
00046     # print self.payload()
00047     # print ""
00048     
00049   def writeCode(self):
00050     className = "HskPacket%03x" % self.apid()
00051     t         = '  '
00052     
00053     msg = ""
00054     msg += "class %s(HskPacket):\n" % className
00055     # insert readList here.
00056     msg += t + "mnemList = [\n"
00057     for tag,bitkey,brief in self.payload():
00058       msg += t + t + '(\'' + tag + '\', \'' + bitkey + '\'),\n'
00059     msg += t + t + "]\n"
00060     
00061     msg += t + "def __init__(self, ui):\n"
00062     msg += t + t + "HskPacket.__init__(self, ui)\n"
00063     msg += t + t + "self.name  = \"%s\"\n" % self.name()
00064     msg += t + t + "self.brief = \"%s\"\n" % self.brief()
00065     msg += t + t + "self.descr = \"%s\"\n" % self.descr()
00066     msg += t + t + "self.read()\n"
00067     print >> self.codeFile, msg
00068     print >> self.codeFile, ""
00069     
00070   def writeSQL(self):
00071     for tag,bitkey,brief in self.payload():
00072       msg = ''
00073       msg += 'INSERT ignore INTO tlmfields (MNEM,DESCRIP) VALUES'
00074       msg += '(\'' + tag + '\', \'' + brief + '\');'
00075       print >> self.sqlFile, msg
00076     
00077   def name(self, a=None):
00078     if a is not None:
00079       self.__name = str(a)
00080     return self.__name
00081     
00082   def apid(self, a=None):
00083     if a is not None:
00084       self.__apid = int(a)
00085     return self.__apid
00086     
00087   def length(self, a=None):
00088     if a is not None:
00089       self.__length = int(a)/8
00090     return self.__length
00091     
00092   def brief(self, a=None):
00093     if a is not None:
00094       self.__brief = a
00095     return self.__brief
00096     
00097   def descr(self, a=None):
00098     if a is not None:
00099       self.__descr = a
00100     return self.__descr
00101     
00102   def payload(self):
00103     return self.__payload
00104 
00105   def addPayload(self, item):
00106     self.__payload.append(item)
00107 
00108 
00109 
00110 def readCATH(fileName, codeFile, sqlFile):
00111   fn = "readCATH"
00112   curDir = os.getcwd()
00113   mainFilePath = os.path.dirname(fileName)
00114   mainFileName = os.path.basename(fileName)
00115   if mainFilePath != '': os.chdir(mainFilePath)
00116   try:
00117     doc = minidom.parse(mainFileName)
00118   except Exception, e:
00119     os.chdir(curDir)
00120     raise e
00121   
00122   comments = []
00123   for n in doc.childNodes:
00124     if n.nodeType == minidom.Node.COMMENT_NODE:
00125       comments.append(n.data)
00126 
00127   for n in getChildNodes(doc.documentElement):
00128     if n.nodeType == minidom.Node.ELEMENT_NODE:
00129       tagName = n.tagName.lower()
00130       if tagName == "tlm_pkt":
00131         processTlmPkt(n, codeFile, sqlFile)
00132       if tagName == "tlm_fld":
00133         processTlmFld(n, codeFile)
00134         
00135 def processTlmFld(node, codeFile):
00136   nodeID = node.getAttribute('id')
00137   t = '  '
00138   for n in getChildNodes(node):
00139     tagName = n.tagName.lower()
00140     if tagName == 'length':
00141       length = n.firstChild.data.strip()
00142   
00143   msg = t + t + '\'' + nodeID + '\': ' + length + ','
00144   print >> codeFile, msg
00145 
00146 def processTlmPkt(node, codeFile, sqlFile):
00147   nodeID = node.getAttribute('id')
00148   packetCode = HskPacketWriter(codeFile, sqlFile)
00149   packetCode.name(nodeID)
00150   for n in getChildNodes(node):
00151     tagName = n.tagName.lower()
00152     if   tagName == 'apid':
00153       apid = n.firstChild.data.strip()
00154       packetCode.apid(apid)
00155     elif tagName == 'length':
00156       length = n.firstChild.data.strip()
00157       packetCode.length(length)
00158     elif tagName == 'brief':
00159       brief = n.firstChild.data.strip()
00160       packetCode.brief(brief)
00161     elif tagName == 'descr':
00162       descr = n.firstChild.data.strip()
00163       packetCode.descr(descr)
00164     elif tagName == 'tlm_payload':
00165       processTlmPayload(n, packetCode)
00166     else:
00167       pass
00168   packetCode.writeSQL()
00169   packetCode.writeCode()
00170 
00171 def processTlmPayload(node, packetCode):
00172   for n in getChildNodes(node):
00173     tagName = n.tagName.lower()
00174     if   tagName == 'tlm_itos':
00175       processTlmITOS(n, packetCode)
00176     else:
00177       pass
00178 
00179 def processTlmITOS(node, packetCode):
00180   for n in getChildNodes(node):
00181     tagName = n.tagName.lower()
00182     if   tagName == 'tlm_mne':
00183       processMnemonic(n, packetCode)
00184     else:
00185       raise KeyError, 'unrecognized node= ', tagName
00186   
00187 def processMnemonic(node, packetCode):
00188   nodeID     = str(node.getAttribute('id'))
00189   nodeField  = str(node.getAttribute('tlm_fld'))
00190   for n in getChildNodes(node):
00191     tagName = n.tagName.lower()
00192     if   tagName == 'brief':
00193       brief = n.firstChild.data.strip()
00194     else:
00195       pass
00196   packetCode.addPayload( (nodeID, nodeField, brief) )
00197     
00198 
00199 
00200 
00201 def startHeader(codeFile):
00202   t = '  '
00203   msg = ''
00204   msg += "from LATTE.monitoring.HskPacketDecoder import HskPacketBase\n"
00205   msg += "\n"
00206   msg += "class HskPacket(HskPacketBase):\n"
00207   msg += t + 'bitDict = {'
00208   print >> codeFile, msg
00209   
00210 
00211 def endHeader(codeFile):
00212   t = '  '
00213   msg = ''
00214   msg += t + '}\n'
00215   msg += t + "def __init__(self, ui):\n"
00216   msg += t + t + "HskPacketBase.__init__(self, ui)\n"
00217   print >> codeFile, msg
00218   # print >> codeFile, "\n"
00219   
00220 if __name__ == '__main__':
00221   
00222   # Options, first list mandatory, second list optional 
00223   options = Options(['field','packet'],
00224                     [])
00225   try:
00226     options.parse()
00227   except Exception, msg:
00228     # options.usage(usage())
00229     raise Exception, msg
00230   
00231   field  = options.field
00232   packet = options.packet
00233 
00234   online = os.environ['ONLINE_ROOT']
00235   
00236   codeFile = open(os.path.join(online, 'LATTE/monitoring/HskPacket.py'), 'w')
00237   sqlFile  = open(os.path.join(online, 'LATTE/monitoring/HskSql.sql'),   'w')
00238 
00239   print >> sqlFile, "__version__  = $Revision: 1.3 $"
00240   print >> sqlFile, "use itosdb;"
00241 
00242   startHeader(codeFile)
00243   readCATH(field,  codeFile, sqlFile)
00244   endHeader(codeFile)
00245   readCATH(packet, codeFile, sqlFile)
00246   
00247   
00248   

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