Esempio n. 1
0
def start_events_device(
        log_dir: Optional[Union[str, Path]] = None,
        _registry: Optional[EventsProcessesRegistry] = None) -> None:
    if _registry is None:
        if log_dir is None:
            raise RuntimeError(
                "Should provide log_dir or instance of EventsProcessesRegistry"
            )
        _registry = create_default_events_process_registry(log_dir=log_dir)

    start_events_main_device(_registry=_registry)

    time.sleep(EVENTS_DEVICE_START_DELAY)

    start_events_logger(_registry=_registry)
    start_grafana_pipeline(_registry=_registry)
    start_events_analyzer(_registry=_registry)

    time.sleep(EVENTS_SUBSCRIBERS_START_DELAY)

    # Default filters.
    EventsSeverityChangerFilter(
        new_severity=Severity.WARNING,
        event_class=DatabaseLogEvent.DATABASE_ERROR,
        regex=
        r'.*workload prioritization - update_service_levels_from_distributed_data: an '
        r'error occurred while retrieving configuration').publish()
    DbEventsFilter(db_event=DatabaseLogEvent.BACKTRACE,
                   line='Rate-limit: supressed').publish()
    DbEventsFilter(db_event=DatabaseLogEvent.BACKTRACE,
                   line='Rate-limit: suppressed').publish()

    atexit.register(stop_events_device, _registry=_registry)
Esempio n. 2
0
def start_events_device(
        log_dir: Optional[Union[str, Path]] = None,
        _registry: Optional[EventsProcessesRegistry] = None) -> None:
    if _registry is None:
        if log_dir is None:
            raise RuntimeError(
                "Should provide log_dir or instance of EventsProcessesRegistry"
            )
        _registry = create_default_events_process_registry(log_dir=log_dir)

    start_events_main_device(_registry=_registry)

    time.sleep(EVENTS_DEVICE_START_DELAY)

    start_events_logger(_registry=_registry)
    start_grafana_pipeline(_registry=_registry)
    start_events_analyzer(_registry=_registry)

    time.sleep(EVENTS_SUBSCRIBERS_START_DELAY)

    # Default filters.
    DbEventsFilter(db_event=DatabaseLogEvent.BACKTRACE,
                   line='Rate-limit: supressed').publish()
    DbEventsFilter(db_event=DatabaseLogEvent.BACKTRACE,
                   line='Rate-limit: suppressed').publish()

    atexit.register(stop_events_device, _registry=_registry)
Esempio n. 3
0
    def test_file_logger(self):
        start_events_logger(_registry=self.events_processes_registry)
        file_logger = get_events_logger(_registry=self.events_processes_registry)

        time.sleep(EVENTS_SUBSCRIBERS_START_DELAY)

        try:
            self.assertIsInstance(file_logger, EventsFileLogger)
            self.assertTrue(file_logger.is_alive())
            self.assertEqual(file_logger._registry, self.events_main_device._registry)
            self.assertEqual(file_logger._registry, self.events_processes_registry)

            event_normal = SpotTerminationEvent(node="n1", message="m1")
            event_normal.severity = Severity.NORMAL
            event_warning = SpotTerminationEvent(node="n2", message="m2")
            event_warning.severity = Severity.WARNING
            event_error = SpotTerminationEvent(node="n3", message="m3")
            event_error.severity = Severity.ERROR
            event_critical = SpotTerminationEvent(node="n4", message="m4")
            event_critical.severity = Severity.CRITICAL

            with self.wait_for_n_events(file_logger, count=10, timeout=3):
                self.events_main_device.publish_event(event_normal)
                self.events_main_device.publish_event(event_warning)
                self.events_main_device.publish_event(event_warning)
                self.events_main_device.publish_event(event_error)
                self.events_main_device.publish_event(event_error)
                self.events_main_device.publish_event(event_error)
                self.events_main_device.publish_event(event_critical)
                self.events_main_device.publish_event(event_critical)
                self.events_main_device.publish_event(event_critical)
                self.events_main_device.publish_event(event_critical)

            self.assertEqual(self.events_main_device.events_counter, file_logger.events_counter)

            summary = get_logger_event_summary(_registry=self.events_processes_registry)
            self.assertDictEqual(summary, {Severity.NORMAL.name: 1,
                                           Severity.WARNING.name: 2,
                                           Severity.ERROR.name: 3,
                                           Severity.CRITICAL.name: 4, })

            grouped = get_events_grouped_by_category(_registry=self.events_processes_registry)
            self.assertEqual(len(grouped[Severity.NORMAL.name]), 1)
            self.assertEqual(len(grouped[Severity.WARNING.name]), 2)
            self.assertEqual(len(grouped[Severity.ERROR.name]), 3)
            self.assertEqual(len(grouped[Severity.CRITICAL.name]), 4)
        finally:
            file_logger.stop(timeout=1)
    def setUp(self) -> None:
        self.setup_events_processes(events_device=False,
                                    events_main_device=True,
                                    registry_patcher=False)
        start_events_logger(_registry=self.events_processes_registry)
        self.file_logger = get_events_logger(
            _registry=self.events_processes_registry)

        time.sleep(EVENTS_SUBSCRIBERS_START_DELAY)

        self.assertIsInstance(self.file_logger, EventsFileLogger)
        self.assertTrue(self.file_logger.is_alive())
        self.assertEqual(self.file_logger._registry,
                         self.events_main_device._registry)
        self.assertEqual(self.file_logger._registry,
                         self.events_processes_registry)