Exemplo n.º 1
0
def test_run(caplog):
    cpu = Cpu()

    result = cpu.run()

    assert isinstance(result, float) and result >= 0.0
    record_tuples = [
        r for r in caplog.record_tuples
        if r[0] == "scout_apm.core.samplers.cpu"
    ]
    assert len(record_tuples) == 1
    _, level, message = record_tuples[0]
    assert level == logging.DEBUG
    assert message.startswith("Process CPU: {}".format(result))
Exemplo n.º 2
0
def test_run_within_zero_seconds(caplog):
    cpu = Cpu()
    # Force the calculation of normalized_wall_clock_elapsed to 0
    cpu.num_processors = 0

    result = cpu.run()

    assert result == 0
    record_tuples = [
        r for r in caplog.record_tuples
        if r[0] == "scout_apm.core.samplers.cpu"
    ]
    assert record_tuples == [("scout_apm.core.samplers.cpu", logging.DEBUG,
                              "Process CPU: 0 [0 CPU(s)]")]
Exemplo n.º 3
0
def test_run_negative_time_elapsed(caplog):
    cpu = Cpu()
    cpu.last_run = dt.datetime.utcnow() + dt.timedelta(days=100)

    result = cpu.run()

    assert result is None
    record_tuples = [
        r for r in caplog.record_tuples
        if r[0] == "scout_apm.core.samplers.cpu"
    ]
    assert len(record_tuples) == 1
    _, level, message = record_tuples[0]
    assert level == logging.DEBUG
    assert message.startswith("Process CPU: Negative time elapsed. now: ")
Exemplo n.º 4
0
def test_run_undetermined_cpus(caplog):
    with mock.patch("psutil.cpu_count", return_value=None):
        cpu = Cpu()

    result = cpu.run()

    assert cpu.num_processors == 1
    assert isinstance(result, float) and result >= 0.0
    record_tuples = [
        r for r in caplog.record_tuples
        if r[0] == "scout_apm.core.samplers.cpu"
    ]
    assert len(record_tuples) == 2
    assert record_tuples[0] == (
        "scout_apm.core.samplers.cpu",
        logging.DEBUG,
        "Could not determine CPU count - assuming there is one.",
    )
    _, level, message = record_tuples[1]
    assert level == logging.DEBUG
    assert message.startswith("Process CPU: {}".format(result))
Exemplo n.º 5
0
def test_run_negative_last_cpu_times(caplog):
    cpu = Cpu()
    cpu.last_cpu_times = pcputimes(user=1e12,
                                   system=1e12,
                                   children_user=0.0,
                                   children_system=0.0)

    result = cpu.run()

    assert result is None
    record_tuples = [
        r for r in caplog.record_tuples
        if r[0] == "scout_apm.core.samplers.cpu"
    ]
    assert len(record_tuples) == 1
    _, level, message = record_tuples[0]
    assert level == logging.DEBUG
    assert message.startswith(
        "Process CPU: Negative process time elapsed. utime: ")
    assert message.endswith(
        "This is normal to see when starting a forking web server.")
Exemplo n.º 6
0
    def run(self):
        logger.debug("Starting Samplers.")
        instances = [Cpu(), Memory()]

        while True:
            for instance in instances:
                event_value = instance.run()
                if event_value is not None:
                    event_type = instance.metric_type + "/" + instance.metric_name
                    event = ApplicationEvent(
                        event_value=event_value,
                        event_type=event_type,
                        timestamp=dt.datetime.utcnow(),
                        source="Pid: " + str(os.getpid()),
                    )
                    CoreAgentSocketThread.send(event)

            should_stop = self._stop_event.wait(timeout=60)
            if should_stop:
                logger.debug("Stopping Samplers.")
                break
Exemplo n.º 7
0
    def run_samplers(cls):
        logger.debug("Starting Samplers. Acquiring samplers lock.")
        try:
            if cls._thread_lock.acquire(True):
                logger.debug("Acquired samplers lock.")
                instances = [Cpu(), Memory()]

                while True:
                    for instance in instances:
                        event = ApplicationEvent()
                        event.event_value = instance.run()
                        event.event_type = (instance.metric_type() + "/" +
                                            instance.metric_name())
                        event.timestamp = datetime.utcnow()
                        event.source = "Pid: " + str(getpid())

                        if event.event_value is not None:
                            AgentContext.socket().send(event)
                    sleep(60)
        finally:
            logger.debug("Shutting down samplers thread.")
            cls._thread_lock.release()