コード例 #1
0
    def test_get_initial_sleep_delay_jitter_disabled(self):
        logger = mock.Mock()

        # 1. Default value is used
        monitor_config = MonitorConfig(
            {"module": "test_module"}, monitor_module="test_monitor"
        )
        global_config = mock.Mock()
        global_config.global_monitor_sample_interval_enable_jitter = False
        monitor = ScalyrMonitor(
            monitor_config=monitor_config,
            logger=logger,
            sample_interval_secs=None,
            global_config=global_config,
        )

        sleep_delay = monitor._get_initial_sleep_delay()
        self.assertEqual(sleep_delay, 0)

        # 2. Value is overridden on per monitor basis
        monitor_config = MonitorConfig(
            {"module": "test_module", "sample_interval": 10},
            monitor_module="test_monitor",
        )
        global_config = mock.Mock()
        global_config.global_monitor_sample_interval_enable_jitter = False
        monitor = ScalyrMonitor(
            monitor_config=monitor_config,
            logger=logger,
            sample_interval_secs=None,
            global_config=global_config,
        )

        sleep_delay = monitor._get_initial_sleep_delay()
        self.assertEqual(sleep_delay, 0)
コード例 #2
0
    def test_monitor_run_random_initial_sleep_delay_enabled(self):
        def make_mock_thread_is_stopped(monitor):
            def mock_is_thread_stopped(*args, **kwargs):
                if monitor.counter >= 3:
                    return True

                monitor.counter += 1
                return False

            return mock_is_thread_stopped

        mock_sleep_but_awaken_if_stopped = mock.Mock()

        mock_logger = mock.Mock()
        mock_gather_sample = mock.Mock()
        monitor_config = MonitorConfig(
            {
                "module": "test_module",
                "sample_interval": 10
            },
            monitor_module="test_monitor",
        )
        global_config = mock.Mock()
        global_config.global_monitor_sample_interval_enable_jitter = True
        monitor = ScalyrMonitor(
            monitor_config=monitor_config,
            logger=mock_logger,
            sample_interval_secs=None,
            global_config=global_config,
        )
        monitor.counter = 0
        monitor._sleep_but_awaken_if_stopped = mock_sleep_but_awaken_if_stopped
        monitor._is_thread_stopped = make_mock_thread_is_stopped(monitor)
        monitor.gather_sample = mock_gather_sample

        monitor.run()
        self.assertEqual(monitor.counter, 3)
        # + 1 is for initial sleep delay before first sample gather interval
        self.assertEqual(mock_sleep_but_awaken_if_stopped.call_count, 1 + 3)
        # 1 call is to debug function when we are initially sleeping before the gather
        self.assertEqual(mock_logger.debug.call_count, 1)
        # 1 call is for monitor has finished message
        self.assertEqual(mock_logger.info.call_count, 1)
        self.assertEqual(mock_logger.exception.call_count, 0)
コード例 #3
0
    def test_metric_logging_metric_name_blacklist_actual_monitor_class(self):
        from scalyr_agent.scalyr_monitor import ScalyrMonitor

        monitor_1_config = {
            "module": "foo1",
            "metric_name_blacklist": ["a", "b"]
        }
        monitor_1_logger = scalyr_logging.getLogger(
            "scalyr_agent.builtin_monitors.foo1(1)")
        monitor_1 = ScalyrMonitor(monitor_config=monitor_1_config,
                                  logger=monitor_1_logger)

        metric_file_fd, monitor_1_metric_file_path = tempfile.mkstemp(".log")

        # NOTE: We close the fd here because we open it again below. This way file deletion at
        # the end works correctly on Windows.
        os.close(metric_file_fd)

        monitor_2_config = {
            "module": "foo2",
            "metric_name_blacklist": ["c", "d"]
        }
        monitor_2_logger = scalyr_logging.getLogger(
            "scalyr_agent.builtin_monitors.foo2(1)")
        monitor_2 = ScalyrMonitor(monitor_config=monitor_2_config,
                                  logger=monitor_1_logger)

        metric_file_fd, monitor_2_metric_file_path = tempfile.mkstemp(".log")

        # NOTE: We close the fd here because we open it again below. This way file deletion at
        # the end works correctly on Windows.
        os.close(metric_file_fd)

        monitor_1_logger.openMetricLogForMonitor(monitor_1_metric_file_path,
                                                 monitor_1)

        monitor_1_logger.emit_value("a", 1)
        monitor_1_logger.emit_value("b", 2)
        monitor_1_logger.emit_value("c", 3)
        monitor_1_logger.emit_value("d", 4)

        self.assertLogFileContainsLineRegex(
            file_path=monitor_1_metric_file_path, expression="d")
        self.assertLogFileContainsLineRegex(
            file_path=monitor_1_metric_file_path, expression="d")
        self.assertLogFileDoesntContainsLineRegex(
            file_path=monitor_1_metric_file_path, expression="a")
        self.assertLogFileDoesntContainsLineRegex(
            file_path=monitor_1_metric_file_path, expression="b")

        monitor_1_logger.closeMetricLog()

        monitor_2_logger.openMetricLogForMonitor(monitor_2_metric_file_path,
                                                 monitor_2)

        monitor_2_logger.emit_value("a", 1)
        monitor_2_logger.emit_value("b", 2)
        monitor_2_logger.emit_value("c", 3)
        monitor_2_logger.emit_value("d", 4)

        self.assertLogFileContainsLineRegex(
            file_path=monitor_2_metric_file_path, expression="a")
        self.assertLogFileContainsLineRegex(
            file_path=monitor_2_metric_file_path, expression="a")
        self.assertLogFileDoesntContainsLineRegex(
            file_path=monitor_2_metric_file_path, expression="c")
        self.assertLogFileDoesntContainsLineRegex(
            file_path=monitor_2_metric_file_path, expression="d")

        monitor_2_logger.closeMetricLog()
コード例 #4
0
    def test_get_initial_sleep_delay_with_random_jitter_enabled(self):
        logger = mock.Mock()

        # 1. Default value is used
        monitor_sample_interval = ScalyrMonitor.DEFAULT_SAMPLE_INTERVAL_SECS
        monitor_config = MonitorConfig(
            {"module": "test_module"}, monitor_module="test_monitor"
        )
        global_config = mock.Mock()
        global_config.global_monitor_sample_interval_enable_jitter = True
        monitor = ScalyrMonitor(
            monitor_config=monitor_config,
            logger=logger,
            sample_interval_secs=None,
            global_config=global_config,
        )

        for i in range(0, 100):
            sleep_delay = monitor._get_initial_sleep_delay()

            min_jitter = round(monitor_sample_interval / 10) * 2
            max_jitter = round(monitor_sample_interval / 10) * 8

            self.assertFalse(sleep_delay == monitor_sample_interval)
            self.assertTrue(sleep_delay >= min_jitter and sleep_delay <= max_jitter)

        # 2. Value is overridden on per monitor basis
        monitor_sample_interval = 10
        monitor_config = MonitorConfig(
            {"module": "test_module", "sample_interval": 10},
            monitor_module="test_monitor",
        )
        global_config = mock.Mock()
        global_config.global_monitor_sample_interval_enable_jitter = True
        monitor = ScalyrMonitor(
            monitor_config=monitor_config,
            logger=logger,
            sample_interval_secs=None,
            global_config=global_config,
        )

        for i in range(0, 100):
            sleep_delay = monitor._get_initial_sleep_delay()

            min_jitter = round(monitor_sample_interval / 10) * 2
            max_jitter = round(monitor_sample_interval / 10) * 8

            self.assertFalse(sleep_delay == monitor_sample_interval)
            self.assertTrue(sleep_delay >= min_jitter and sleep_delay <= max_jitter)

        # 3. Verify there is an upper bound of 40 seconds
        monitor_sample_interval = 1000
        monitor_config = MonitorConfig(
            {"module": "test_module", "sample_interval": 1000},
            monitor_module="test_monitor",
        )
        global_config = mock.Mock()
        global_config.global_monitor_sample_interval_enable_jitter = True
        monitor = ScalyrMonitor(
            monitor_config=monitor_config,
            logger=logger,
            sample_interval_secs=None,
            global_config=global_config,
        )

        for i in range(0, 100):
            sleep_delay = monitor._get_initial_sleep_delay()
            min_jitter = MIN_INITIAL_GATHER_SAMPLE_SLEEP_SECS
            max_jitter = MAX_INITIAL_GATHER_SAMPLE_SLEEP_SECS

            self.assertTrue(sleep_delay >= min_jitter and sleep_delay <= max_jitter)