예제 #1
0
    def Shunt(self, namespace, ID, dataTuple, Value):

        Statistics.GetStatistics().OnPacketShunted()
        newTuple = (namespace, ID, dataTuple[4], Value)
        shuntFile = dataTuple[2]

        self.__ShuntLock.acquire()

        try:
            if not shuntFile in self.__ShuntedDataByFile:
                self.__ShuntedDataByFile[shuntFile] = []

            self.__ShuntedDataByFile[shuntFile].append(newTuple)

        except Exception as Ex:
            Log.getLogger().info("Unknown in Shunt function:  " + str(Ex))

        finally:
            self.__ShuntLock.release()

        if not self.__ShuntThreadCreated:
            self.__ShuntThreadCreated = True
            threadName = "ShuntProc:" + str(self)
            ThreadManager.GetThreadManager().CreateThread(
                threadName, self.ShuntWorkerProc)
            ThreadManager.GetThreadManager().StartThread(threadName)
예제 #2
0
    def Start(self):
        if None != self.m_Name:
            return

        self.m_Name = str(self)
        self.m_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        try:
            self.m_socket.bind((self.getIP(), self.getPort()))
            self.m_socket.setblocking(True)
            self.m_socket.settimeout(0.01)

        except Exception:
            Log.getLogger().error("Invalid Socket IP or Port " + str(self))
            return False

        if 0 == self.getPort():  # let the OS choose the port
            self.__Port = self.m_socket.getsockname()[
                1]  #can use this to pass to Marvin

        self.__Port = self.__Port  # ungly kludge
        self.__IP = self.__IP  # ungly kludge

        self._objNamespace.__ListenPort = self.__Port

        Log.getLogger().debug("Namespace[" + str(self._objNamespace) +
                              "] listening on -->" + str(self))

        ThreadManager.GetThreadManager().CreateThread(self.m_Name,
                                                      self.workerProc)
        ThreadManager.GetThreadManager().StartThread(self.m_Name)
    def Start(self):
        if None != self.m_Name:
            return

        self.m_Name = "ServerUDP:" + str(self)
        self.m_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        try:
            self.m_socket.bind((self.getIP(), self.getPort()))
            self.m_socket.setblocking(True)
            self.m_socket.settimeout(0.001)
        except Exception as ex:
            Log.getLogger().error("Invalid Socket IP or Port " + str(self) +
                                  " - " + str(ex))
            return False

        if 0 == self.getPort():  # let the OS choose the port
            self.Port = self.m_socket.getsockname()[
                1]  #can use this to pass to Marvin

        self.m_ConnPoint.Port = self.Port  # ungly kludge
        self.m_ConnPoint.IP = self.IP  # ungly kludge

        Log.getLogger().info(self.getTypeStr() + " listening on -->" +
                             str(self))

        ThreadManager.GetThreadManager().CreateThread(self.m_Name,
                                                      self.workerProc)
        ThreadManager.GetThreadManager().StartThread(self.m_Name)

        return True
예제 #4
0
    def __AlternateCollectionMethodMultiThread(self,fnKillSignalled,startIndex):
        processedWithoutRestdummymakelooklikeother = 0
        ThreadCount = -1
        ProcessThreadCount = self.__CreateInitialCollectorThreadGroupings()
        AddActiveProcessingThreads(ProcessThreadCount)
        firstGroupID = None
        firstGroupCollectors = []
        collectorCount = len(self._Collectors)

        if collectorCount < 1:
            Log.getLogger().error("No Collectors to process")
            return

        for processThreadID,collectorList in self.__ProcessThreadGroupings.items():
            if None == firstGroupID:
                firstGroupID = processThreadID
                firstGroupCollectors = collectorList

            else:
                ID = str(self) + processThreadID
                ThreadManager.GetThreadManager().CreateThread(ID,self.__SlicedThreadProc,processThreadID) # create a worker thread and pass it a list of collectors to update
                ThreadManager.GetThreadManager().StartThread(ID)
                ThreadCount += 1

        while not fnKillSignalled():  # now go process the 1st group in this thread
            processed = self.__CollectSingleRange(fnKillSignalled,firstGroupID)
            if processed == 0:
               Sleep.SleepMs(Namespace.SleepIntervalIfNoDataCollected)
               if collectorCount != len(self._Collectors): # dynamic collectos must have added some
                   pass
예제 #5
0
    def Start(self):
        Log.getLogger().info(self.getTypeStr() + " Connecting to -->" +
                             str(self))

        ThreadManager.GetThreadManager().CreateThread(
            self.m_Name, self.recvTCP_WorkerProc_Client, None)
        ThreadManager.GetThreadManager().StartThread(self.m_Name)

        return True
예제 #6
0
    def CollectionProc(self):
        if True == self.SpawnThread:
            if None == self.ThreadName:
                self.ThreadName = "UserPlugin." + str(
                    UserPluginFramework.Instance
                ) + "." + self.ScriptName + self.FunctionName
                UserPluginFramework.Instance += 1
                ThreadManager.GetThreadManager().CreateThread(
                    self.ThreadName, self.__CallUserPlugin)
                ThreadManager.GetThreadManager().StartThread(self.ThreadName)
            return "HelenKeller"

        else:
            self.__CallUserPlugin()
예제 #7
0
    def acceptThread(self, fnKillSignalled, userData):
        self.m_socket.listen(5)
        while not fnKillSignalled(
        ):  # run until signalled to end - call passed function to check for the signal
            try:
                clientSock, clientAddr = self.m_socket.accept()
                clientThreadName = self.m_Name + str(clientAddr)
                ThreadManager.GetThreadManager().CreateThread(
                    clientThreadName, self.recvTCP_WorkerProc,
                    (clientSock, clientAddr))
                ThreadManager.GetThreadManager().StartThread(clientThreadName)

                self.__clients.append(clientSock)

            except socket.timeout:
                time.sleep(.5)
                pass
예제 #8
0
    def Begin(self,runOnce=False):
        #start udp server
        # start collectors
        if  False and False == Namespace._UseSingleCollectorThreadPerNamespace and not Namespace._UseMultiThreadPerNamespace:  # deprecated
            for collector in self._Collectors:
                if not collector.IsInGroup() and not collector.IsOnDemand():
                    collector.BeginCollecting(runOnce)
                    Sleep.SleepMs(5) # so not at all same time

        # this has now really been deprecated and should not be used anymore
        elif True == Namespace._UseSingleCollectorThreadPerNamespace or runOnce: #one thread to do all collecting
            ThreadManager.GetThreadManager().CreateThread(self._ID,self.__AlternateCollectionMethod,runOnce)
            ThreadManager.GetThreadManager().StartThread(self._ID)

        else: # many threads, with multiple collectors per thread
            ThreadManager.GetThreadManager().CreateThread(self._ID,self.__AlternateCollectionMethodMultiThread)
            ThreadManager.GetThreadManager().StartThread(self._ID)

        if True == runOnce:
            return len(self._Collectors)

        self._Server = ServerUDP.ServerUDP(self.__ListenIP,self.__ListenPort,self)
        self._Server.Start()

        threadName = "ConnUpdateThread:" + str(self) + ":" + str(self.__ListenPort)
        ThreadManager.GetThreadManager().CreateThread(threadName,self.__sendConnectionInfoProc)
        ThreadManager.GetThreadManager().StartThread(threadName)
        return len(self._Collectors)
    def __init__(self):
        if None != Playback._instance:
            return

        Playback._instance = self

        self.PlaybackData=[]
        self.LoopCount = 1
        self.PlaybackSpeed=1
        self.CurrentIndex=0
        self.LoopMode = RepeatMode.NONE
        self.Stopped=True
        self.Paused=False
        self.StartTime=None
        self.threadName = "PlaybackObject" + ":" + str(self)
        self.IndexExternallySet=False

        self.startIndex=0
        self.endIndex = None

        ThreadManager.GetThreadManager().CreateThread(self.threadName,self.__workerProc)
        ThreadManager.GetThreadManager().StartThread(self.threadName)
    def __init__(self,
                 ip=None,
                 Port=None,
                 ConnType=ConnectionType.Unknown,
                 canTimeout=True):
        super(Target, self).__init__(ip, Port, ConnType)
        self.ConfigurationDefinedTarget = ip
        self.m_IP_InUse = None  #m_ip could be DNS name
        self.m_socket = None
        self.m_lastHeartbeat = Time.GetCurrMS()
        self.m_PacketsSent = 0
        self.m_BytestSent = 0
        self.m_InitialRefreshSent = False
        self.m_objLockDict = threading.Lock()
        self.m_SendList = []
        self.m_hasTimedOut = False
        self.m_LastDNSResolution = Time.GetCurrMS()
        self.m_DNSResolutionPeriod = 30000  #30 seconds
        self.m_CanTimeout = canTimeout
        self.threadName = None
        self.lastRefreshRequestID = 0
        self.MarkedForRemoval = False

        try:
            self.m_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM,
                                          socket.IPPROTO_UDP)
            self.m_socket.setblocking(True)
            self.m_socket.settimeout(0.001)

        except Exception as _:
            Log.getLogger().error("Error setting up Target Socket -->" +
                                  str(super.m_Connection))

        self.threadName = "Target:" + self.getIP() + "[" + str(
            self.getPort()) + "]"
        ThreadManager.GetThreadManager().CreateThread(self.threadName,
                                                      self.WorkerProc)
        ThreadManager.GetThreadManager().StartThread(self.threadName)
예제 #11
0
def main():
    if not HandleCommandlineArguments():
        return

    if not Configuration.get().ReadConfigFile():
        return

    PrintVersion()
    downstreamConnInfo = Configuration.get().GetDownstreamConnection()
    upstreamConnInfo = Configuration.get().GetUpstreamConnection()

    downstreamServer = ServerUDP.ServerUDP(downstreamConnInfo,ConnectionType.DownstreamServer)
    upstreamServer = ServerUDP.ServerUDP(upstreamConnInfo,ConnectionType.UpstreamServer)

#    if None == Configuration.get().GetAutorunFilename() or 1==1:
    if upstreamServer.Start():
        if None == downstreamConnInfo:
            return

        if None == upstreamConnInfo:
            return

        ThreadManager.GetThreadManager().CreateThread("StartupStuff",StartupWorkerProc,(downstreamServer,upstreamServer))
        if not Configuration.get().GetUseGUI():
            GuiMgr.Initialize(GuiMgr.UI.NONE,downstreamServer,upstreamServer)

        else:
            try:
                GuiMgr.Initialize(GuiMgr.UI.TKINTR,downstreamServer,upstreamServer)
            except Exception as Ex:
                print(str(Ex))
                GuiMgr.Initialize(GuiMgr.UI.NONE,downstreamServer,upstreamServer)

        ThreadManager.GetThreadManager().StartThread("StartupStuff")

        GuiMgr.Start()

    ThreadManager.GetThreadManager().StopAllThreads()
    def __SimpleWorker(self):
        while not ThreadManager.GetThreadManager().AllStopSignalled():
            dataBlock = self.GetItemFromSynchQueue()  # get data to process

            if None != dataBlock:
                rawData, FromAddr = dataBlock
                self.__HandleLiveData(rawData, FromAddr)  # go process teh data
            else:  # no data to process, maybe reduce woker count
                if self._GetWorkerThreadCount() > 2:
                    self._DecrementWorkerThreadCount()
                    #Log.getLogger().debug("Reducing worker threads")
                    return
                else:
                    Sleep.SleepMs(10)
예제 #13
0
    def Start(self):
        try:
            self.m_socket.bind((self.getIP(), self.getPort()))
            #self.m_socket.setblocking(True)
        except Exception as ex:
            Log.getLogger().error("Invalid Socket IP or Port " + str(self) +
                                  " - " + str(ex))
            return False
# this should not be OK for TCP, remove
        if 0 == self.getPort():  # let the OS choose the port
            self.Port = self.m_socket.getsockname()[
                1]  #can use this to pass to Marvin

        self.m_ConnPoint.Port = self.Port  # ungly kludge
        self.m_ConnPoint.IP = self.IP  # ungly kludge

        Log.getLogger().info(self.getTypeStr() + " listening on -->" +
                             str(self))

        ThreadManager.GetThreadManager().CreateThread(self.m_Name,
                                                      self.acceptThread)
        ThreadManager.GetThreadManager().StartThread(self.m_Name)

        return True
예제 #14
0
    def __SimpleWorker(self):
        while not ThreadManager.GetThreadManager().AllStopSignalled():
            packet = self.GetDownstreamPacket()  # get data to process

            if None != packet:
                sendBuffer, ignoreTimeout, domNode, isGroup = packet
                self._BroadcastDownstream(sendBuffer, ignoreTimeout, domNode,
                                          isGroup)
            else:  # no data to process, maybe reduce woker count
                if self.GetWorkerThreadCount() > 2:
                    self.DecrementWorkerThreadCount()
                    #Log.getLogger().debug("Reducing worker threads [" + str(self.GetWorkerThreadCount()) +']')
                    return
                else:
                    Sleep.SleepMs(10)
 def StopProcessing(self):
     ThreadManager.GetThreadManager().StopThread(self.threadName)
     ThreadManager.GetThreadManager().RemoveThread(self.threadName)
 def BeginCollecting(self, runOnce):
     ThreadManager.GetThreadManager().CreateThread(self._Name,
                                                   self.__collectionProc)
     ThreadManager.GetThreadManager().StartThread(self._Name)
예제 #17
0
def main():
    parser = argparse.ArgumentParser(description='Minion Data Collector.')
    parser.add_argument("-i",
                        "--input",
                        dest='argFilename',
                        help='specifies input file',
                        type=extant_file,
                        metavar="FILE")
    parser.add_argument("-v",
                        "--verbose",
                        help="prints information, values 0-3",
                        type=int)
    parser.add_argument("-r",
                        "--runonce",
                        help="calls all collectors once and exits",
                        action="store_true")
    parser.add_argument(
        "-a",
        "--aliasfile",
        help="specify an external file that has alias defintions",
        type=str)

    try:
        args = parser.parse_args()
        if None == args.verbose:
            _VerboseLevel = 0
        else:
            _VerboseLevel = args.verbose
        _RunOnce = args.runonce

    except:
        return

    ShowVersion()
    if not VersionCheck.CheckVersion():
        Log.getLogger().error("Invalid version of Python")
        return

    if 3 <= _VerboseLevel:
        Log.setLevel(logging.DEBUG)

    elif 2 == _VerboseLevel:
        Log.setLevel(logging.WARNING)

    elif 1 == _VerboseLevel:
        Log.setLevel(logging.INFO)

    else:
        Log.setLevel(logging.ERROR)

    curr_dir_path = os.path.dirname(os.path.realpath(__file__))
    Alias.AliasMgr.AddAlias("WORKING_DIR", curr_dir_path)

    Alias.AliasMgr.AddEnvironmentVariables()
    if None != args.aliasfile:
        if not Alias.AliasMgr.LoadExternalAliasFile(args.aliasfile):
            return

    signal.signal(
        signal.SIGINT, signal.SIG_IGN
    )  # turn of Ctrl+C signal handler (will get inherted by sub processes

    if not os.path.exists(_ConfigFilename):
        Log.getLogger().error("Config file [" + _ConfigFilename +
                              "] not found!")
        return

    config = Configuration.Configuration(_ConfigFilename, True)

    if None == config or not config.IsValid():
        pass

    else:
        print("Starting Collectors...")
        totalCollectors = 0
        for namespace in config.GetNamespaces():
            totalCollectors += namespace.Begin(_RunOnce)

        signal.signal(signal.SIGINT,
                      signal_handler)  # make my own Ctrl+C handler now

        print(str(totalCollectors) + " Collectors started.")

        if False == _RunOnce:
            print("Press CTRL+C to Exit")
        else:
            print("Running Once")

        if False == _RunOnce:
            while _ThreadActive:
                if 0 == _VerboseLevel:
                    for c in spinning_cursor():
                        countStr = '[' + str(config.GetCollectorCount()) + '] '
                        sys.stdout.write(countStr)
                        sys.stdout.write(c)
                        Sleep.SleepMs(100)
                        sys.stdout.flush()
                        sys.stdout.write('\b')
                        for c in countStr:
                            sys.stdout.write('\b')

                else:
                    Sleep.SleepMs(100)

        print("Shutting down...")
        try:
            ThreadManager.GetThreadManager().StopAllThreads()
        except:
            pass
 def __init__(self):
     name = "Connection Update Timer Thread"
     self.__WorkerThread = ThreadManager.GetThreadManager().CreateThread(
         name, self.WorkerProc)
     ThreadManager.GetThreadManager().StartThread(name)
def main():
    if not HandleCommandlineArguments():
        return

    if not Configuration.get().ReadConfigFile():
        return

    PrintVersion()
    downstreamConnInfo = Configuration.get().GetDownstreamConnection()
    upstreamConnInfo = Configuration.get().GetUpstreamConnection()

    downstreamServer = Server.ServerUDP(downstreamConnInfo,
                                        ConnectionType.DownstreamServer)
    upstreamServer = Server.ServerUDP(upstreamConnInfo,
                                      ConnectionType.UpstreamServer)

    proxyServer = None
    proxyClient = None
    goodToGo = True

    if upstreamServer.Start():
        if None == downstreamConnInfo:
            return

        if None == upstreamConnInfo:
            return

        ThreadManager.GetThreadManager().CreateThread(
            "StartupStuff", StartupWorkerProc,
            (downstreamServer, upstreamServer))
        if not Configuration.get().GetUseGUI():
            GuiMgr.Initialize(GuiMgr.UI.NONE, downstreamServer, upstreamServer)

        else:
            try:
                GuiMgr.Initialize(GuiMgr.UI.TKINTR, downstreamServer,
                                  upstreamServer)
            except Exception as Ex:
                print(str(Ex))
                GuiMgr.Initialize(GuiMgr.UI.NONE, downstreamServer,
                                  upstreamServer)

        if None != Configuration.get().GetProxyConnection():
            proxyConnInfo_server = Configuration.get().GetProxyConnection()

            proxyServer = Server.ServerTCP(
                proxyConnInfo_server, ConnectionType.ProxyConnection_Server,
                downstreamServer, upstreamServer)
            if False == proxyServer.Start():
                goodToGo = False

        elif None != Configuration.get().GetProxyServerConnection():
            proxyConnInfo_Client = Configuration.get(
            ).GetProxyServerConnection()
            proxyClient = Server.ClientTCP(
                proxyConnInfo_Client, ConnectionType.ProxyConnection_Client,
                downstreamServer, upstreamServer)
            if False == proxyClient.Start():
                goodToGo = False

        if True == goodToGo:
            ThreadManager.GetThreadManager().StartThread("StartupStuff")
            GuiMgr.Start()

    ThreadManager.GetThreadManager().StopAllThreads()
 def Quit(self):
     ThreadManager.GetThreadManager().StopAllThreads()
     self.pGui.OnQuit()
    def Stop(self):
        ThreadManager.GetThreadManager().StopThread(self.m_Name)

        if None != self.m_socket:
            self.m_socket.close()
            self.m_socket = None
 def __init__(self):
     name = "Watchdog Timer Thread"
     self.__WorkerThread = ThreadManager.GetThreadManager().CreateThread(
         name, self.WatchdogProc)
     ThreadManager.GetThreadManager().StartThread(name)