refactor(generator): удалён in-memory fallback для истории батчей

- Удалён класс InMemoryBatchHistory и вся fallback-логика
- Упрощён KafkaBatchHistory: убраны _initialized, get_stats(), обработка ошибок
- Обновлена документация (generator/README.md, docs/OPERATIONS.md)
- Упрощены тесты, удалены тесты для удалённого функционала
- Код стал честнее: без Kafka генератор падает при старте

Ревьюер: Prometheus даёт достаточно visibility, fallback избыточен
This commit is contained in:
2026-06-09 17:27:16 +03:00
committed by Dmitry Dementiev
parent 731d991f94
commit ffe81167c3
8 changed files with 92 additions and 265 deletions
+2 -80
View File
@@ -1,89 +1,11 @@
"""
Тесты истории батчей.
Тесты структуры записи батча.
"""
from datetime import datetime, timezone
import pytest
from generator import InMemoryBatchHistory, BatchRecord
class TestInMemoryBatchHistory:
"""Тесты in-memory истории."""
def test_add_record(self):
"""Добавление записи в историю."""
history = InMemoryBatchHistory()
record = BatchRecord(
batch_id="test_1",
started_at=datetime.now(timezone.utc),
finished_at=datetime.now(timezone.utc),
sent_total=100,
sent_browser=25,
sent_location=25,
sent_device=25,
sent_geo=25,
status="success",
error_message=None,
)
history.add(record)
stats = history.get_stats()
assert stats["total_batches"] == 1
assert stats["success_rate"] == 1.0
assert stats["last_batch_status"] == "success"
def test_history_limits_to_1000(self):
"""История ограничена 1000 записями."""
history = InMemoryBatchHistory()
for i in range(1100):
record = BatchRecord(
batch_id=f"batch_{i}",
started_at=datetime.now(timezone.utc),
finished_at=datetime.now(timezone.utc),
sent_total=10,
sent_browser=2,
sent_location=2,
sent_device=2,
sent_geo=2,
status="success",
error_message=None,
)
history.add(record)
assert len(history.batches) == 1000
assert history.batches[0].batch_id == "batch_100" # Первые 100 удалены
def test_success_rate_calculation(self):
"""Правильный расчет success rate."""
history = InMemoryBatchHistory()
# 3 success, 2 error
for i in range(5):
record = BatchRecord(
batch_id=f"batch_{i}",
started_at=datetime.now(timezone.utc),
finished_at=datetime.now(timezone.utc),
sent_total=100,
sent_browser=25,
sent_location=25,
sent_device=25,
sent_geo=25,
status="success" if i < 3 else "error",
error_message=None if i < 3 else "Test error",
)
history.add(record)
stats = history.get_stats()
assert stats["total_batches"] == 5
assert stats["success_rate"] == 0.6 # 3/5
def test_empty_history_returns_empty_stats(self):
"""Пустая история возвращает пустой dict."""
history = InMemoryBatchHistory()
stats = history.get_stats()
assert stats == {}
from generator import BatchRecord
class TestBatchRecord: