def launch_simple_architecture(config, supervisor):
    # Pusher
    pusher_generator = PusherGenerator()
    pusher_info = pusher_generator.generate(config)
    pusher_cls, pusher_start_message = pusher_info['test_pusher']

    pusher = supervisor.launch(pusher_cls, pusher_start_message)

    # Dispatcher
    route_table = RouteTable()
    route_table.dispatch_rule(
        HWPCReport,
        HWPCDispatchRule(getattr(HWPCDepthLevel, 'SOCKET'), primary=True))
    dispatcher_start_message = DispatcherStartMessage(
        'system', 'dispatcher', DummyFormulaActor,
        DummyFormulaValues({'test_pusher': pusher}, 0), route_table, 'cpu')

    dispatcher = supervisor.launch(DispatcherActor, dispatcher_start_message)

    # Puller
    report_filter = Filter()
    report_filter.filter(filter_rule, dispatcher)
    puller_generator = PullerGenerator(report_filter, [])
    puller_info = puller_generator.generate(config)
    puller_cls, puller_start_message = puller_info['test_puller']
    puller = supervisor.launch(puller_cls, puller_start_message)
Esempio n. 2
0
def dispatcher_start_message(formula_class, formula_values, route_table):
    """
    return a dispatcher start message
    """
    return DispatcherStartMessage('system', DISPATCHER_NAME, formula_class,
                                  formula_values, route_table,
                                  DISPATCHER_DEVICE_ID)
    def run(self):
        config = {
            'verbose': True,
            'stream': True,
            'output': {
                'test_pusher': {
                    'type': 'mongodb',
                    'model': 'PowerReport',
                    'uri': MONGO_URI,
                    'db': MONGO_DATABASE_NAME,
                    'collection': MONGO_OUTPUT_COLLECTION_NAME
                }
            },
            'input': {
                'test_puller': {
                    'type': 'mongodb',
                    'model': 'HWPCReport',
                    'uri': MONGO_URI,
                    'db': MONGO_DATABASE_NAME,
                    'collection': MONGO_INPUT_COLLECTION_NAME
                }
            }
        }
        supervisor = Supervisor(config['verbose'])

        def term_handler(_, __):
            supervisor.shutdown()
            exit(0)

        signal.signal(signal.SIGTERM, term_handler)
        signal.signal(signal.SIGINT, term_handler)
        # Pusher
        pusher_generator = PusherGenerator()
        pusher_info = pusher_generator.generate(config)
        pusher_cls, pusher_start_message = pusher_info['test_pusher']

        pusher = supervisor.launch(pusher_cls, pusher_start_message)
        # Dispatcher
        route_table = RouteTable()
        route_table.dispatch_rule(
            HWPCReport,
            HWPCDispatchRule(getattr(HWPCDepthLevel, 'SOCKET'), primary=True))
        dispatcher_start_message = DispatcherStartMessage(
            'system', 'dispatcher', DummyFormulaActor,
            DummyFormulaValues({'test_pusher': pusher}, 0), route_table, 'cpu')

        dispatcher = supervisor.launch(DispatcherActor,
                                       dispatcher_start_message)
        # Puller
        report_filter = Filter()
        report_filter.filter(filter_rule, dispatcher)
        puller_generator = PullerGenerator(report_filter, [])
        puller_info = puller_generator.generate(config)
        puller_cls, puller_start_message = puller_info['test_puller']
        puller = supervisor.launch(puller_cls, puller_start_message)
        supervisor.monitor()
    def test_dispatcher_that_start_formula_crashing_at_initialization_musnt_forward_report_to_this_formula(self, system, dispatch_rules, actor, logger, dummy_pipe_out):

        route_table = RouteTable()
        for report_type, gbr in dispatch_rules:
            route_table.dispatch_rule(report_type, gbr)
        values = FormulaValues({'fake_pusher': LOGGER_NAME})
        start_message =  DispatcherStartMessage('system', 'dispatcher', CrashInitFormulaActor, values, route_table, 'test_device')
        system.ask(actor, start_message)
        system.tell(actor, REPORT_1)
        assert recv_from_pipe(dummy_pipe_out, 0.5)  == (None,None)
Esempio n. 5
0
def setup_cpu_formula_actor(supervisor, fconf, route_table, report_filter, power_pushers):
    """
    Setup CPU formula actor.
    :param supervisor: Actor supervisor
    :param fconf: Global configuration
    :param route_table: Reports routing table
    :param report_filter: Reports filter
    :param pushers: Reports pushers
    """

    formula_config = RAPLFormulaConfig(RAPLFormulaScope.CPU, fconf['sensor-report-sampling-interval'],
                                       fconf['cpu-rapl-ref-event'])

    dispatcher_start_message = DispatcherStartMessage('system', 'cpu_dispatcher', RAPLFormulaActor,
                                                      RAPLValues(power_pushers, formula_config),
                                                      route_table, 'cpu')
    cpu_dispatcher = supervisor.launch(RAPLDispatcherActor, dispatcher_start_message)
    report_filter.filter(filter_rule, cpu_dispatcher)
Esempio n. 6
0
def setup_dram_formula_actor(supervisor, fconf, route_table, report_filter, power_pushers):
    """
    Setup DRAM formula actor.
    :param supervisor: Actor supervisor
    :param fconf: Global configuration
    :param route_table: Reports routing table
    :param report_filter: Reports filter
    :param pushers: Reports pushers
    :return: Initialized DRAM dispatcher actor
    """
    formula_config = RAPLFormulaConfig(RAPLFormulaScope.DRAM,
                                       fconf['sensor-report-sampling-interval'],
                                       fconf['dram-rapl-ref-event'])

    dispatcher_start_message = DispatcherStartMessage('system',
                                                      'dram_dispatcher',
                                                      RAPLFormulaActor,
                                                      RAPLValues(power_pushers, formula_config),
                                                      route_table, 'dram')
    dram_dispatcher = supervisor.launch(RAPLDispatcherActor, dispatcher_start_message)
    report_filter.filter(lambda msg: True, dram_dispatcher)
 def actor_start_message(self, dispatch_rules, logger, formula_class):
     route_table = RouteTable()
     for report_type, gbr in dispatch_rules:
         route_table.dispatch_rule(report_type, gbr)
     values = FormulaValues({'fake_pusher': LOGGER_NAME})
     return DispatcherStartMessage('system', 'dispatcher', formula_class, values, route_table, 'test_device')