96 lines
1.7 KiB
Python
96 lines
1.7 KiB
Python
from datetime import datetime, timezone
|
|
from ipaddress import IPv4Address
|
|
from uuid import uuid4
|
|
|
|
from core.domain.models import NormalizedCDR
|
|
from core.worker.stats import WorkerRuntimeStats
|
|
|
|
|
|
def normalized_cdr() -> NormalizedCDR:
|
|
now = datetime.now(
|
|
timezone.utc
|
|
)
|
|
|
|
return NormalizedCDR(
|
|
cdr_id=uuid4(),
|
|
raw_id="raw-stats-1",
|
|
|
|
msisdn="+19875551234",
|
|
imsi="310410998877665",
|
|
|
|
service_type="4G_DATA",
|
|
radio_access_type="LTE_4G",
|
|
cell_id="4021_8812",
|
|
|
|
bytes_uploaded=100,
|
|
bytes_downloaded=200,
|
|
total_bytes=300,
|
|
duration_seconds=300,
|
|
|
|
session_start_time=now,
|
|
session_end_time=now,
|
|
|
|
source_ip=IPv4Address(
|
|
"10.240.12.1"
|
|
),
|
|
)
|
|
|
|
|
|
def test_worker_stats() -> None:
|
|
stats = WorkerRuntimeStats()
|
|
|
|
stats.record_processed(
|
|
normalized_cdr()
|
|
)
|
|
|
|
stats.record_dlq(
|
|
"invalid_rat_value"
|
|
)
|
|
|
|
stats.set_buffer_size(4)
|
|
|
|
stats.record_flush()
|
|
|
|
snapshot = stats.snapshot()
|
|
|
|
assert (
|
|
snapshot["pipeline"]["total_processed"]
|
|
== 1
|
|
)
|
|
|
|
assert (
|
|
snapshot["pipeline"]["total_dlq"]
|
|
== 1
|
|
)
|
|
|
|
assert (
|
|
snapshot["pipeline"]["in_flight_buffer"]
|
|
== 4
|
|
)
|
|
|
|
assert (
|
|
snapshot["breakdown"]
|
|
["by_service_type"]
|
|
["4G_DATA"]
|
|
== 1
|
|
)
|
|
|
|
assert (
|
|
snapshot["breakdown"]
|
|
["by_radio_access_type"]
|
|
["LTE_4G"]
|
|
== 1
|
|
)
|
|
|
|
assert (
|
|
snapshot["breakdown"]
|
|
["dlq_by_reason"]
|
|
["invalid_rat_value"]
|
|
== 1
|
|
)
|
|
|
|
assert (
|
|
snapshot["pipeline"]["last_flush_at"]
|
|
is not None
|
|
)
|