import threading , socket , getpass
from . import O2A , A2O # Data flow Orchestrator To Agent
from . import Processor # Processor Queue
# Main def
def Agent ( inGSettings ) :
lL = inGSettings [ " Logger " ]
# Detect Machine host name and username
inGSettings [ " AgentDict " ] [ " HostNameUpperStr " ] = socket . gethostname ( ) . upper ( )
inGSettings [ " AgentDict " ] [ " UserUpperStr " ] = getpass . getuser ( ) . upper ( )
# Processor thread
lProcessorThread = threading . Thread ( target = Processor . ProcessorRunSync , kwargs = { " inGSettings " : inGSettings } )
lProcessorThread . daemon = True # Run the thread in daemon mode.
lProcessorThread . start ( ) # Start the thread execution.
if lL : lL . info ( " Processor has been started (ProcessorDict) " ) #Logging
# Start thread to wait data from Orchestrator (O2A)
lO2AThread = threading . Thread ( target = O2A . O2A_Loop , kwargs = { " inGSettings " : inGSettings } )
lO2AThread . start ( )
# Send log that Agent has been started
A2O . LogListSend ( inGSettings = inGSettings , inLogList = [ f ' Host: { inGSettings [ " AgentDict " ] [ " HostNameUpperStr " ] } , User: { inGSettings [ " AgentDict " ] [ " UserUpperStr " ] } , Agent has been started. ' ] )