feat: add timer for metrics purposes

This commit is contained in:
2024-08-27 00:27:37 +03:00
parent 950b9e4289
commit f167ce7d3b
7 changed files with 159 additions and 24 deletions

View File

@ -0,0 +1,42 @@
import pytest
import time
from ahriman.core.exceptions import InitializeError
from ahriman.models.metrics_timer import MetricsTimer
def test_elapsed() -> None:
"""
must return elapsed time
"""
with MetricsTimer() as timer:
value1 = timer.elapsed
time.sleep(0.1)
value2 = timer.elapsed
assert value2 > value1
def test_elapsed_exception() -> None:
"""
must raise InitializeError if timer wasn't started in the context manager
"""
timer = MetricsTimer()
with pytest.raises(InitializeError):
assert timer.elapsed
def test_enter() -> None:
"""
must start timer with context manager
"""
with MetricsTimer() as timer:
assert timer.start_time > 0
def test_exit_with_exception() -> None:
"""
must exit from context manager if an exception is raised
"""
with pytest.raises(ValueError):
with MetricsTimer():
raise ValueError()

View File

@ -1,5 +1,4 @@
import pytest
import time
from ahriman.models.waiter import Waiter, WaiterResult, WaiterTaskFinished, WaiterTimedOut
@ -37,17 +36,17 @@ def test_is_timed_out() -> None:
"""
must correctly check if timer runs out
"""
assert Waiter(-1).is_timed_out()
assert Waiter(1, start_time=time.monotonic() - 10.0).is_timed_out()
assert not Waiter(1, start_time=time.monotonic() + 10.0).is_timed_out()
assert Waiter(-1).is_timed_out(0.0)
assert Waiter(1).is_timed_out(42.0)
assert not Waiter(1).is_timed_out(0.42)
def test_is_timed_out_infinite() -> None:
"""
must treat 0 wait timeout as infinite
"""
assert not Waiter(0).is_timed_out()
assert not Waiter(0, start_time=time.monotonic() - 10.0).is_timed_out()
assert not Waiter(0).is_timed_out(0.0)
assert not Waiter(0).is_timed_out(-1.0)
def test_wait() -> None: