This commit is contained in:
İsmail Başaran 2016-03-23 10:04:31 +02:00
parent 104530c62b
commit 9790371289
6 changed files with 55 additions and 52 deletions

View file

@ -10,13 +10,13 @@ from base.Scope import Scope
from base.messaging.Messaging import Messaging
from base.messaging.Messager import Messager
from base.execution.ExecutionManager import ExecutionManager
from base.registration.Registration import Registration
#from base.registration.Registration import Registration
from base.messaging.MessageResponseQueue import MessageResponseQueue
from base.event.EventManager import EventManager
from base.plugin.PluginManager import PluginManager
from base.task.TaskManager import TaskManager
from base.database.AhenkDbService import AhenkDbService
import threading, time, sys, os, signal, configparser
import threading, time, sys, os, signal, configparser,queue
pidfilePath = '/var/run/ahenk.pid'
@ -70,9 +70,9 @@ class AhenkDeamon(BaseDaemon):
globalscope.setTaskManager(taskManager)
logger.info('[AhenkDeamon] Task Manager was set')
registration=Registration()
globalscope.setRegistration(registration)
logger.info('[AhenkDeamon] Registration was set')
#registration=Registration()
#globalscope.setRegistration(registration)
#logger.info('[AhenkDeamon] Registration was set')
execution_manager=ExecutionManager()
globalscope.setExecutionManager(execution_manager)
@ -80,9 +80,9 @@ class AhenkDeamon(BaseDaemon):
#TODO restrict number of attemption
while registration.is_registered() is False:
logger.debug('[AhenkDeamon] Attempting to register')
registration.registration_request()
#while registration.is_registered() is False:
# logger.debug('[AhenkDeamon] Attempting to register')
# registration.registration_request()
logger.info('[AhenkDeamon] Ahenk is registered')
@ -96,9 +96,9 @@ class AhenkDeamon(BaseDaemon):
globalscope.setMessager(messager)
logger.info('[AhenkDeamon] Messager was set')
if registration.is_ldap_registered() is False:
logger.debug('[AhenkDeamon] Attempting to registering ldap')
registration.ldap_registration_request() #TODO work on message
#if registration.is_ldap_registered() is False:
# logger.debug('[AhenkDeamon] Attempting to registering ldap')
# registration.ldap_registration_request() #TODO work on message
logger.info('[AhenkDeamon] LDAP registration of Ahenk is completed')
@ -119,6 +119,12 @@ class AhenkDeamon(BaseDaemon):
#messager.send_direct_message('test')
responseQueue = queue.Queue()
messageResponseQueue = MessageResponseQueue(responseQueue)
messageResponseQueue.setDaemon(True)
messageResponseQueue.start()
globalscope.setResponseQueue(responseQueue)
while True:
time.sleep(1)
@ -126,14 +132,10 @@ class AhenkDeamon(BaseDaemon):
#logger.info('[AhenkDeamon] Requesting policies...')
#messager.send_direct_message(messageManager.policy_request_msg())
"""
this is must be created after message services
responseQueue = queue.Queue()
messageResponseQueue = MessageResponseQueue(responseQueue)
messageResponseQueue.setDaemon(True)
messageResponseQueue.start()
globalscope.setResponseQueue(responseQueue)
"""
#this is must be created after message services
def signal_handler (self, num, stack):
@ -202,7 +204,3 @@ if __name__ == '__main__':
else:
print('Usage : %s start|stop|restart|status' % sys.argv[0])
sys.exit(2)

View file

@ -22,6 +22,7 @@ class ExecutionManager(object):
self.logger=scope.getLogger()
self.db_service=scope.getDbService()
# TODO move this event names to enumeration
self.event_manager.register_event('EXECUTE_SCRIPT',self.execute_script)
self.event_manager.register_event('REQUEST_FILE',self.request_file)
self.event_manager.register_event('MOVE_FILE',self.move_file)

View file

@ -13,17 +13,18 @@ class MessageResponseQueue(threading.Thread):
super(MessageResponseQueue, self).__init__()
scope = Scope.getInstance()
self.logger = scope.getLogger()
self.messageManager = scope.getMessageManager()
self.messageManager = scope.getMessager()
self.outQueue = outQueue
def run(self):
try:
# This item will send response to lider.
# item must be response message. Response message may be generic message type
responseMessage = self.outQueue.get()
print(item)
# Call message manager for response
self.messageManager.sendResponse(responseMessage)
#self.outQueue.task_done()
while True :
# This item will send response to lider.
# item must be response message. Response message may be generic message type
responseMessage = self.outQueue.get(block=True)
print(responseMessage)
# Call message manager for response
self.messageManager.send_direct_message(responseMessage)
#self.outQueue.task_done()
except:
pass

View file

@ -7,22 +7,24 @@ from base.Scope import Scope
class Plugin(threading.Thread):
"""docstring for Plugin"""
def __init__(self, name,InQueue):
super(Plugin, self).__init__()
threading.Thread.__init__(self)
self.name = name
self.InQueue = InQueue
self.scope=Scope.getInstance()
self.pluginManager = self.scope.getPluginManager()
scope = Scope.getInstance()
self.pluginManager = scope.getPluginManager()
self.logger = scope.getLogger()
def run():
try:
task=self.InQueue.get()
command = self.pluginManager.findCommand(self.getName(),task.getCommandId())
command.handle_task(task)
# TODO add result to response queue
def run(self):
while True :
try:
task=self.InQueue.get(block=True)
command = Scope.getInstance().getPluginManager().findCommand(self.getName(),task.command_cls_id)
command.handle_task(task)
# TODO add result to response queue
except Exception as e:
#TODO error log here
print("exception occured when executing plugin")
except Exception as e:
#TODO error log here
self.logger.error("Plugin running exception " + str(e))
def getName(self):
return self.name

View file

@ -18,7 +18,6 @@ class PluginManager(object):
self.logger = self.scope.getLogger()
def loadPlugins(self):
print("loading")
self.plugins = []
possibleplugins = os.listdir(self.configManager.get("PLUGIN", "pluginFolderPath"))
for pname in possibleplugins:
@ -42,21 +41,21 @@ class PluginManager(object):
def findCommand(self,pluginName,commandId):
location = os.path.join(self.configManager.get("PLUGIN", "pluginFolderPath"), pluginName)
if os.path.dir(location) and commandId + ".py" in os.listdir(location):
if os.path.isdir(location) and commandId + ".py" in os.listdir(location):
info = imp.find_module(commandId, [location])
return imp.load_module(commandId, *info)
else:
self.logger.warning('Command id - - not found')
self.logger.warning('Command id -' + commandId +' - not found')
return None
def processTask(self,task):
try:
if task.getPluginId().lower() in self.pluginQueueDict :
self.pluginQueueDict[task.getPluginId().lower()].put(task,task.priority)
if task.plugin.name.lower() in self.pluginQueueDict :
self.pluginQueueDict[task.plugin.name.lower()].put(task,1)
except Exception as e:
# TODO error log here
# TODO update task - status to not found command
pass
self.logger.error("[PluginManager] Exception occurred when processing task " + str(e))
def reloadPlugins(self):
# Not implemented yet

View file

@ -10,7 +10,7 @@ class TaskManager(object):
"""docstring for TaskManager"""
def __init__(self):
super(TaskManager, self).__init__()
#super(TaskManager, self).__init__()
scope = Scope.getInstance()
self.pluginManager = scope.getPluginManager()
self.logger = scope.getLogger()
@ -19,11 +19,13 @@ class TaskManager(object):
def addTask(self, task):
try:
self.logger.debug('Adding task ... ')
self.saveTask(task)
#self.saveTask(task)
self.logger.info('Task saved ')
# TODO send task received message
self.pluginManager.processTask(task)
except Exception as e:
# TODO error log here
self.logger.debug('Exception occured when adding task ' + str(e))
pass
def saveTask(self, task):