def HandleIncomingGroupPacket(self, rawData, node, fromAddress): from Helpers import Configuration if Configuration.get().GetBITW_Active(): rawData = Configuration.get().HandleBITWBuffer( rawData) # handle Bump in the wire if 0 != TargetManager.GetTargetManager().BroadcastDownstream( rawData, False, node, True): # send to all - towards a Marvin Statistics.GetStatistics().OnPacketChainedDownstream(rawData) # Break up packet and do bump in the wire. # If BITW not active, maybe we don't need to do this could be a lot of processing for nothing.... objGroupPacket = MarvinGroupData.MarvinDataGroup( "", "", "", 0, "1.0", True) for packet in node.getElementsByTagName('Oscar'): objMarvinPacket = self.CreateMarvinData(packet, rawData, fromAddress) if None == objMarvinPacket: return objGroupPacket.AddPacket(objMarvinPacket) # objData = MarvinData.MarvinData(namespace,ID,value,0,version,True) GuiMgr.OnDataPacketSentDownstream(objGroupPacket, "Chained") Recorder.get().AddData(objGroupPacket)
def PerformInsertBookmark(self,Params): #<?xml version="1.0" encoding="utf-8"?> #<Marvin Type="OscarTask"> # <Version>1.0</Version> # <OscarID>DemoOscar</OscarID> # <UniqueID>1233456</UniqueID> # <Task>InsertBookmark</Task> # <Param>Namespace=foo</Param> # <Param>ID=TestMarker</Param> # <Param>Data=StartTest</Param> # <Param>Propagate=True</Param> -- if True, the data is sent back upstream towards Marvin #</Marvin> if len(Params) >= 3: fPropagate = False for param in Params: parts = param.split("=") if len(parts)==2: if parts[0].lower()=='namespace': namespace = Alias.Alias(parts[1]) elif parts[0].lower()=='id': id = Alias.Alias(parts[1]) elif parts[0].lower()=='data': data = Alias.Alias(parts[1]) elif parts[0].lower()=='propagate': propagate = Alias.Alias(parts[1]) if propagate.lower() == "true": fPropagate = True else: Log.getLogger().error("Received invalid InsertBookmark task parameter: " + str(param)) return else: Log.getLogger().error("Received invalid InsertBookmark task. Insufficient Parameters.") return if None == namespace: Log.getLogger().error("Received invalid InsertBookmark task. Namespace not specified.") return if None == id: Log.getLogger().error("Received invalid InsertBookmark task. ID not specified.") return if None == data: Log.getLogger().error("Received invalid InsertBookmark task. Data not specified.") return eTime = Time.GetCurrMS() objData = MarvinData.MarvinData(namespace,id,data,eTime,1.0) if None != objData: Recorder.get().AddData(objData) GuiMgr.OnDataPacketSentDownstream(objData,"Minion") if fPropagate: TargetManager.GetTargetManager().BroadcastDownstream(objData.ToXML(),False,None)
def HandleIncomingMinionData(self, rawData, node, fromAddress): # <?xml version="1.0" encoding="utf-8"?> # <Minion> # <Version>1</Version> # <PacketNumber>44</PacketNumber> # <Namespace>Namespace_Foo</Namespace> # <Name>CPU_UTIL_CORE0</Name> # <Value>33.2</Value> # <Normalized>False</Normalized> # <ElapsedTime>253</ElapsedTime> # </Minion> objData = self.CreateMarvinPacket(rawData, node, fromAddress) if None != objData: TargetManager.GetTargetManager().BroadcastDownstream( objData.ToXML(), False, node) GuiMgr.OnDataPacketSentDownstream(objData, "Minion") Recorder.get().AddData(objData)
def HandleIncomingOscarDatapacket(self, node, rawData, fromAddress): from Helpers import Configuration # Use this object to update the gui and for recording # is also where BITW check update of checked map occurs objData = self.CreateMarvinData(node, rawData, fromAddress) if Configuration.get().GetBITW_Active(): rawData = Configuration.get().HandleBITWBuffer( rawData) # handle Bump in the wire if 0 != TargetManager.GetTargetManager().BroadcastDownstream( rawData, False, node): # send to all - towards a Marvin Statistics.GetStatistics().OnPacketChainedDownstream(rawData) if None != objData: GuiMgr.OnDataPacketSentDownstream(objData, "Chained") Recorder.get().AddData(objData)
def HandleIncomingGroupPacket(self, rawData, node, fromAddress): # <?xml version="1.0" encoding="utf-8"?> # <MinionGroup> # <Minion> # <Version>1</Version> # <PacketNumber>44</PacketNumber> # <Namespace>Namespace_Foo</Namespace> # <Name>CPU_UTIL_CORE0</Name> # <Value>33.2</Value> # <Normalized>False</Normalized> # <ElapsedTime>253</ElapsedTime> # </Minion> # <Minion> # <Version>1</Version> # <PacketNumber>45</PacketNumber> # <Namespace>Namespace_Foo</Namespace> # <Name>CPU_UTIL_CORE1</Name> # <Value>3.2</Value> # <Normalized>False</Normalized> # <ElapsedTime>273</ElapsedTime> # </Minion> # </MinionGroup> objGroupPacket = MarvinGroupData.MarvinDataGroup( "", "", "", 0, "1.0", True) for packet in node.getElementsByTagName('Minion'): objMarvinPacket = self.CreateMarvinPacket(rawData, packet, fromAddress) if None == objMarvinPacket: return objGroupPacket.AddPacket(objMarvinPacket) GuiMgr.OnDataPacketSentDownstream(objGroupPacket, "Minion") TargetManager.GetTargetManager().BroadcastDownstream( objGroupPacket.ToXML(), False, None, True) Recorder.get().AddData(objGroupPacket)
def __workerProc(self, fnKillSignalled, userData): from Helpers import GuiMgr self.CurrentIndex = self.startIndex self.StartTime = None xmlList = [] while not fnKillSignalled( ): # run until signalled to end - call passed function to check for the signal if self.Paused or self.Stopped: Sleep.SleepMs(100) continue if None == self.StartTime: self.StartTime = int( self.PlaybackData[self.CurrentIndex].ArrivalTime ) - 10 # can't remember why I subract 10ms... objData = self.PlaybackData[self.CurrentIndex] sleepVal = (int(objData.ArrivalTime) - self.StartTime) / self.PlaybackSpeed Sleep.SleepMs(sleepVal) try: # when looping, this data will be here after the 1st loop xmlData = self.PlaybackData[self.CurrentIndex].xmlData node = self.PlaybackData[self.CurrentIndex].firstNode except: xmlData = objData.ToXML( ) # be more efficient if I create a list of already created xmldata self.PlaybackData[ self. CurrentIndex].xmlData = xmlData # LOVe how you can just add stuff to an object in Python! if Configuration.get().GetShunting(): try: dom = xml.dom.minidom.parseString(rawData) node = dom._get_firstChild() except Exception as ex: Log.getLogger().error( "Error Something bad in Trying to re-encode saved data" ) else: node = None self.PlaybackData[self.CurrentIndex].firstNode = node TargetManager.GetTargetManager().BroadcastDownstream( xmlData, False, node) GuiMgr.OnDataPacketSentDownstream(objData, "Playback") try: self.StartTime = int( self.PlaybackData[self.CurrentIndex].ArrivalTime) except Exception: self.StartTime = None # just in case get an out of bounds error self.CurrentIndex += 1 if None == self.endIndex: self.endIndex = len(self.PlaybackData) - 1 if self.CurrentIndex >= self.endIndex: preProcessingDone = True if self.LoopMode == RepeatMode.NONE: GuiMgr.OnStopPlayback() if Configuration.get().GetExitAfterAutoPlay(): Log.getLogger().info( "Playback finished, exiting application per arguments" ) GuiMgr.Quit() elif self.LoopMode == RepeatMode.REPEAT: self.CurrentIndex = 0 self.LoopCount += 1 elif self.LoopMode == RepeatMode.LOOP: self.CurrentIndex = self.startIndex self.LoopCount += 1 self.StartTime = None