class TestWorkloadStatistic(unittest.TestCase): def setUp(self): self.config = get_config_for_testing() self.mongo_server = MongoMgr(config=self.config) self.workload_stat = WorkLoadStatistic(config=self.config, component='test') self.frontend_db_interface = StatisticDbViewer(config=self.config) def tearDown(self): self.frontend_db_interface.shutdown() self.workload_stat.shutdown() clean_test_database(self.config, get_database_names(self.config)) self.mongo_server.shutdown() gc.collect() def test_update_workload_statistic(self): self.workload_stat.update() result = self.frontend_db_interface.get_statistic('test') self.assertEqual(result['name'], 'test', 'name not set') self.assertAlmostEqual(time(), result['last_update'], msg='timestamp not valid', delta=100) self.assertIsInstance(result['platform'], dict, 'platfom is not a dict') self.assertIsInstance(result['system'], dict, 'system is not a dict')
class TestRestStatistic(TestAcceptanceBase): def setUp(self): super().setUp() self._start_backend() self.workload = WorkLoadStatistic(config=self.config) sleep(1) # wait for systems to start def tearDown(self): self.workload.shutdown() self._stop_backend() super().tearDown() def test_status(self): self.workload.update( unpacking_workload=self.unpacking_service.get_scheduled_workload(), analysis_workload=self.analysis_service.get_scheduled_workload()) rv = self.test_client.get('/rest/status', follow_redirects=True) assert rv.status_code == 200 assert all(key in rv.json for key in ['system_status', 'plugins']) assert 'backend' in rv.json['system_status'] assert rv.json['system_status']['backend']['status'] == 'online' assert rv.json['system_status']['backend']['analysis']['plugins'][ 'file_type']['queue'] == 0
class FactBase: PROGRAM_NAME = 'FACT Base' PROGRAM_DESCRIPTION = '' COMPONENT = 'base' def __init__(self): self.run = True set_signals(self.shutdown_listener) self.args, self.config = program_setup(self.PROGRAM_NAME, self.PROGRAM_DESCRIPTION) self.work_load_stat = WorkLoadStatistic(config=self.config, component=self.COMPONENT) def shutdown_listener(self, signum, _): logging.info( f'Received signal {signum}. Shutting down {self.PROGRAM_NAME}...') self.run = False def shutdown(self): logging.info(f'Shutting down components of {self.PROGRAM_NAME}') self.work_load_stat.shutdown() def main(self): while self.run: self.work_load_stat.update() sleep(5) if self.args.testing: break self.shutdown()
class FactBase: PROGRAM_NAME = 'FACT Base' PROGRAM_DESCRIPTION = '' COMPONENT = 'base' def __init__(self): self.run = True # Check whether the process was started by start_fact.py parent = ' '.join(psutil.Process(os.getppid()).cmdline()) started_by_start_fact_py = 'start_fact.py' in parent or 'start_all_installed_fact_components' in parent if started_by_start_fact_py: signal.signal(signal.SIGUSR1, self.shutdown_listener) signal.signal(signal.SIGINT, lambda *_: None) os.setpgid(os.getpid(), os.getpid()) # reset pgid to self so that "complete_shutdown" doesn't run amok else: signal.signal(signal.SIGINT, self.shutdown_listener) self.args, self.config = program_setup(self.PROGRAM_NAME, self.PROGRAM_DESCRIPTION, self.COMPONENT) self.work_load_stat = WorkLoadStatistic(config=self.config, component=self.COMPONENT) def shutdown_listener(self, signum, _): logging.info(f'Received signal {signum}. Shutting down {self.PROGRAM_NAME}...') self.run = False def shutdown(self): logging.info(f'Shutting down components of {self.PROGRAM_NAME}') self.work_load_stat.shutdown() def main(self): logging.info(f'Successfully started {self.PROGRAM_NAME}') while self.run: self.work_load_stat.update() sleep(5) if self.args.testing: break self.shutdown()
signal.signal(signal.SIGINT, lambda *_: None) os.setpgid(os.getpid(), os.getpid()) # reset pgid to self so that "complete_shutdown" doesn't run amok else: signal.signal(signal.SIGINT, shutdown) args, config = program_setup(PROGRAM_NAME, PROGRAM_DESCRIPTION) analysis_service = AnalysisScheduler(config=config) tagging_service = TaggingDaemon(analysis_scheduler=analysis_service) unpacking_service = UnpackingScheduler(config=config, post_unpack=analysis_service.start_analysis_of_object, analysis_workload=analysis_service.get_scheduled_workload) compare_service = CompareScheduler(config=config) intercom = InterComBackEndBinding(config=config, analysis_service=analysis_service, compare_service=compare_service, unpacking_service=unpacking_service) work_load_stat = WorkLoadStatistic(config=config) run = True while run: work_load_stat.update(unpacking_workload=unpacking_service.get_scheduled_workload(), analysis_workload=analysis_service.get_scheduled_workload()) if any((unpacking_service.check_exceptions(), compare_service.check_exceptions(), analysis_service.check_exceptions())): break sleep(5) if args.testing: break logging.info('shutdown components') work_load_stat.shutdown() intercom.shutdown() compare_service.shutdown() unpacking_service.shutdown() tagging_service.shutdown() analysis_service.shutdown() if not args.testing: complete_shutdown()