Select canonical temperature from raw observations

This commit is contained in:
2569718930@qq.com
2026-06-14 19:33:09 +08:00
parent 00b163a8ec
commit 43aeb6047e
5 changed files with 395 additions and 4 deletions
+13 -4
View File
@@ -18,6 +18,7 @@ from src.data_collection.hko_obs_sources import HKO_STATIONS
from src.database.db_manager import DBManager
from src.database.runtime_state import ObservationCollectorStatusRepository
from web.services.analysis_utils import parse_utc_datetime
from web.services.canonical_engine import refresh_canonical_temperature_from_latest
from web.services.canonical_temperature import build_canonical_temperature
from web.services.observation_freshness import build_observation_freshness
from web.services.observation_source_adapters import (
@@ -380,6 +381,7 @@ class ObservationCollector:
return len(records)
fetched_at = time.strftime("%Y-%m-%dT%H:%M:%S+00:00", time.gmtime())
wrote = 0
written_records: list[ObservationRecord] = []
for record in records:
try:
writer(
@@ -395,10 +397,7 @@ class ObservationCollector:
status="ok",
payload=dict(record.payload),
)
self._store_canonical_temperature_from_observation(
record=record,
fetched_at=fetched_at,
)
written_records.append(record)
wrote += 1
except Exception as exc:
logger.debug(
@@ -408,6 +407,16 @@ class ObservationCollector:
exc,
)
if wrote:
refreshed_cities: set[str] = set()
for city in {record.city for record in written_records}:
if refresh_canonical_temperature_from_latest(self.observation_store, city):
refreshed_cities.add(city)
for record in written_records:
if record.city not in refreshed_cities:
self._store_canonical_temperature_from_observation(
record=record,
fetched_at=fetched_at,
)
logger.debug("raw observations stored count={}", wrote)
return wrote