Exemple #1
0
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')
Exemple #2
0
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()
Exemple #4
0
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()