50 lines
2.0 KiB
Python
50 lines
2.0 KiB
Python
import importlib
|
|
from multiprocessing import Process, Queue
|
|
|
|
class Dispatcher:
|
|
def __init__(self, config):
|
|
self.config = config
|
|
self.plugins = config['server']['plugins']
|
|
self.collector_to_storage_queue = Queue()
|
|
self.manage_queue = Queue()
|
|
self.get_queue = Queue()
|
|
|
|
def start_plugins(self):
|
|
self.processes = []
|
|
|
|
# storage模块
|
|
storage_config = self.config['modules']['storage'][0]
|
|
storage_instance = self.get_module_instance(storage_config)
|
|
storage_instance.set_input_queue(self.collector_to_storage_queue)
|
|
storage_instance.set_manage_queue(self.manage_queue)
|
|
storage_instance.set_get_queue(self.get_queue)
|
|
storage_process = Process(target=storage_instance.run, name=storage_config['name'])
|
|
self.processes.append(storage_process)
|
|
storage_process.start()
|
|
|
|
# collector模块
|
|
for collector_config in self.config['modules']['collector']:
|
|
collector_instance = self.get_module_instance(collector_config)
|
|
collector_instance.set_output_queue(self.collector_to_storage_queue)
|
|
collector_process = Process(target=collector_instance.run, name=collector_config['name'])
|
|
self.processes.append(collector_process)
|
|
collector_process.start()
|
|
|
|
# sender模块
|
|
sender_config = self.config['modules']['sender'][0]
|
|
sender_instance = self.get_module_instance(sender_config)
|
|
sender_instance.set_manage_queue(self.manage_queue)
|
|
sender_process = Process(target=sender_instance.run, name=sender_config['name'])
|
|
self.processes.append(sender_process)
|
|
sender_process.start()
|
|
|
|
def get_module_instance(self, module_config):
|
|
module = importlib.import_module(module_config['path'])
|
|
ModuleClass = getattr(module, module_config['name'])
|
|
return ModuleClass(module_config['params'])
|
|
|
|
def run(self):
|
|
self.start_module_processes()
|
|
for p in self.processes:
|
|
p.join()
|