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)
示例#2
0
    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)
示例#3
0
 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)
示例#5
0
    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