speed up China airport Telegram pushes
This commit is contained in:
@@ -110,7 +110,8 @@ def test_docker_compose_isolates_collector_from_web_and_bot_services():
|
||||
in collector_block
|
||||
)
|
||||
assert "command: python -m web.observation_collector_worker" in collector_block
|
||||
assert "POLYWEATHER_OBSERVATION_COLLECTOR_AMSC_SEC: ${POLYWEATHER_OBSERVATION_COLLECTOR_AMSC_SEC:-180}" in collector_block
|
||||
assert "POLYWEATHER_OBSERVATION_COLLECTOR_AMSC_SEC: ${POLYWEATHER_OBSERVATION_COLLECTOR_AMSC_SEC:-60}" in collector_block
|
||||
assert "TELEGRAM_AIRPORT_PUSH_INTERVAL_SEC: ${POLYWEATHER_BOT_AIRPORT_PUSH_INTERVAL_SEC:-60}" in bot_block
|
||||
assert "POLYWEATHER_OBSERVATION_COLLECTOR_MADIS_SEC: ${POLYWEATHER_OBSERVATION_COLLECTOR_MADIS_SEC:-300}" in collector_block
|
||||
|
||||
|
||||
|
||||
@@ -4,6 +4,8 @@ from src.utils.telegram_push import (
|
||||
_AIRPORT_PUSH_INTERVAL,
|
||||
_build_airport_status_message,
|
||||
_compute_slope_15m,
|
||||
_due_airport_cities,
|
||||
_parse_observation_time_epoch,
|
||||
_run_high_freq_airport_cycle,
|
||||
_telegram_push_language,
|
||||
)
|
||||
@@ -170,16 +172,31 @@ def test_shenzhen_is_in_high_freq_push_as_hko_station():
|
||||
assert HIGH_FREQ_AIRPORT_ICAO["shenzhen"] == "LFS"
|
||||
|
||||
|
||||
def test_china_airport_push_defaults_to_three_minute_city_interval():
|
||||
def test_china_airport_push_defaults_to_one_minute_city_interval():
|
||||
assert _AIRPORT_PUSH_INTERVAL["seoul"] == 60
|
||||
assert _AIRPORT_PUSH_INTERVAL["busan"] == 60
|
||||
assert _AIRPORT_PUSH_INTERVAL["shanghai"] == 180
|
||||
assert _AIRPORT_PUSH_INTERVAL["beijing"] == 180
|
||||
assert _AIRPORT_PUSH_INTERVAL["guangzhou"] == 180
|
||||
assert _AIRPORT_PUSH_INTERVAL["qingdao"] == 180
|
||||
assert _AIRPORT_PUSH_INTERVAL["chengdu"] == 180
|
||||
assert _AIRPORT_PUSH_INTERVAL["chongqing"] == 180
|
||||
assert _AIRPORT_PUSH_INTERVAL["wuhan"] == 180
|
||||
assert _AIRPORT_PUSH_INTERVAL["shanghai"] == 60
|
||||
assert _AIRPORT_PUSH_INTERVAL["beijing"] == 60
|
||||
assert _AIRPORT_PUSH_INTERVAL["guangzhou"] == 60
|
||||
assert _AIRPORT_PUSH_INTERVAL["qingdao"] == 60
|
||||
assert _AIRPORT_PUSH_INTERVAL["chengdu"] == 60
|
||||
assert _AIRPORT_PUSH_INTERVAL["chongqing"] == 60
|
||||
assert _AIRPORT_PUSH_INTERVAL["wuhan"] == 60
|
||||
|
||||
|
||||
def test_airport_push_prioritizes_china_markets():
|
||||
due = _due_airport_cities(
|
||||
{"paris", "shanghai", "wuhan", "ankara", "beijing"},
|
||||
now_ts=1000,
|
||||
last_by_city={},
|
||||
)
|
||||
|
||||
assert due[:3] == ["beijing", "shanghai", "wuhan"]
|
||||
|
||||
|
||||
def test_airport_push_normalizes_observation_times_for_stale_rejection():
|
||||
assert _parse_observation_time_epoch("1781161200") == 1781161200
|
||||
assert _parse_observation_time_epoch("2026-06-11T07:10:00+00:00") == 1781161800
|
||||
|
||||
|
||||
def test_high_freq_airport_push_prefers_fresh_city_cache(monkeypatch):
|
||||
@@ -321,6 +338,38 @@ def test_high_freq_airport_cycle_skips_cities_before_interval(monkeypatch):
|
||||
assert calls == []
|
||||
|
||||
|
||||
def test_airport_push_rejects_observation_older_than_last_push(monkeypatch):
|
||||
import src.utils.telegram_push as telegram_push
|
||||
|
||||
monkeypatch.setattr(
|
||||
telegram_push,
|
||||
"_load_airport_city_weather_for_push",
|
||||
lambda _city: {
|
||||
"local_time": "15:22",
|
||||
"current": {"temp": 31.0},
|
||||
"deb": {"prediction": 32.0},
|
||||
"airport_primary": {
|
||||
"temp": 31.0,
|
||||
"obs_time": "2026-06-11T06:56:00+00:00",
|
||||
},
|
||||
},
|
||||
)
|
||||
|
||||
result = telegram_push._process_airport_city(
|
||||
"shanghai",
|
||||
now_ts=1781162600,
|
||||
last_city={
|
||||
"ts": 1781161800,
|
||||
"obs_time": "2026-06-11T07:10:00+00:00",
|
||||
"obs_ts": 1781161800,
|
||||
},
|
||||
chat_ids=["chat-1"],
|
||||
bot=object(),
|
||||
)
|
||||
|
||||
assert result is None
|
||||
|
||||
|
||||
def test_high_freq_airport_push_workers_default_to_one_for_shared_cpu(monkeypatch):
|
||||
source = Path("src/utils/telegram_push.py").read_text(encoding="utf-8")
|
||||
assert 'TELEGRAM_AIRPORT_PUSH_MAX_WORKERS", 1' in source
|
||||
|
||||
Reference in New Issue
Block a user