speed up China airport Telegram pushes

This commit is contained in:
2569718930@qq.com
2026-06-11 15:38:05 +08:00
parent 5fa3fb8999
commit 9a7257008e
5 changed files with 115 additions and 23 deletions
+2 -1
View File
@@ -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
+57 -8
View File
@@ -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