- Зачем: - генератор должен выпускать события визита по запланированным тикам, не приклеивая весь визит к одному запуску. - Что: - добавлен тиковый слой `TickStreamGenerator` с активными визитами и выпуском созревших событий. - добавлена валидация потолка активных визитов относительно потолка популяции. - сохранён событийный смысл `event_budget` и добавлен регрессионный тест против разгона интенсивности. - Проверка: - `uv run --with-requirements generator/requirements.txt pytest generator/tests -q` — 81 passed.
76 lines
2.0 KiB
Python
76 lines
2.0 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Совместимый фасад и точка входа генератора.
|
|
|
|
Основной код разнесён по модулям рядом с этим файлом. Старые импорты вида
|
|
`from generator import Config` сохраняются для тестов и внешних запусков.
|
|
"""
|
|
|
|
import logging
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
|
|
SRC_DIR = Path(__file__).resolve().parent / "src"
|
|
if str(SRC_DIR) not in sys.path:
|
|
sys.path.insert(0, str(SRC_DIR))
|
|
|
|
from clickstream_generator.config import Config
|
|
from clickstream_generator.dictionary import EventDictionary
|
|
from clickstream_generator.generation import EventGenerator
|
|
from clickstream_generator.intensity import calculate_events_count, hour_factor
|
|
from clickstream_generator.kafka_io import (
|
|
BatchRecord,
|
|
KafkaBatchHistory,
|
|
KafkaPublisher,
|
|
KafkaStateManager,
|
|
_import_kafka,
|
|
_with_retry,
|
|
ensure_topics,
|
|
)
|
|
from clickstream_generator.metrics import (
|
|
METRICS_ERRORS_TOTAL,
|
|
METRICS_EVENTS_TOTAL,
|
|
METRICS_LAST_SUCCESS,
|
|
METRICS_TICK_DURATION,
|
|
)
|
|
from clickstream_generator.runtime import TickStreamGenerator, generate_tick_batch
|
|
from clickstream_generator.service import GeneratorService, main
|
|
from clickstream_generator.state import GeneratorState, _nested_list_to_tuple
|
|
|
|
|
|
logging.basicConfig(
|
|
level=logging.INFO,
|
|
format="%(asctime)s - %(levelname)s - %(message)s",
|
|
datefmt="%Y-%m-%d %H:%M:%S",
|
|
)
|
|
|
|
__all__ = [
|
|
"BatchRecord",
|
|
"Config",
|
|
"EventDictionary",
|
|
"EventGenerator",
|
|
"GeneratorService",
|
|
"GeneratorState",
|
|
"KafkaBatchHistory",
|
|
"KafkaPublisher",
|
|
"KafkaStateManager",
|
|
"METRICS_ERRORS_TOTAL",
|
|
"METRICS_EVENTS_TOTAL",
|
|
"METRICS_LAST_SUCCESS",
|
|
"METRICS_TICK_DURATION",
|
|
"TickStreamGenerator",
|
|
"_import_kafka",
|
|
"_nested_list_to_tuple",
|
|
"_with_retry",
|
|
"calculate_events_count",
|
|
"ensure_topics",
|
|
"generate_tick_batch",
|
|
"hour_factor",
|
|
"main",
|
|
]
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|