feat(generator): ускорен учебный профиль daily-wave

- Зачем:
  - суточная волна должна быть видна на занятии за минуты, а не за сутки работы стенда.
- Что:
  - профиль daily-wave переведён на speed 60 при тике 1 секунда.
  - приглушены подробные live-логи успешного тика без изменения сохранения state.
  - обновлены тесты, спека и инструкции запуска быстрого профиля.
- Проверка:
  - make generator-test.
  - git diff --cached --check.
This commit is contained in:
2026-07-04 21:17:46 +03:00
parent 200bb82890
commit 9d1bcc43fa
9 changed files with 86 additions and 23 deletions
+36
View File
@@ -184,6 +184,42 @@ class TestGeneratorServiceSteadyStream:
"2026-01-01 10:10:00.000000",
}
def test_successful_live_tick_does_not_log_per_tick_info(self, base_config, caplog):
"""Успешный live-тик не пишет подробный пер-тиковый журнал на INFO."""
config = replace(
base_config,
tick_seconds=1,
lambda_base_per_min=60,
jitter_pct=0,
min_events_per_tick=1,
max_events_per_tick=1000,
max_session_events=1,
max_active_sessions=10,
population_max=11,
)
service = GeneratorService(config)
service.publisher = MagicMock()
service.publisher.publish.side_effect = (
lambda topic, events: (len(events), 0)
)
service.history = MagicMock()
service._running = True
def stop_after_first_tick(_sleep_seconds):
service._running = False
with caplog.at_level(logging.INFO, logger="generator"), \
patch(
"clickstream_generator.service.time.sleep",
side_effect=stop_after_first_tick,
):
service._main_loop()
assert "=== Tick" not in caplog.text
assert "Generating with event budget" not in caplog.text
assert "completed:" not in caplog.text
assert "sent" not in caplog.text
def _run_service_ticks(self, config, wall_now: datetime, ticks_count: int):
service = GeneratorService(config)
service.publisher = MagicMock()