Service Monitoring 2026-06-05 09:13:30 UTC - 4h49m43s

Now: 2026-06-05 14:03:14 UTCAction trace:enabledTrace file:/app/tmp/service_actions.log
PostgreSQL
Status:connected
Config:DB_URL / DATABASE_URL
Value:postgres://weather:***@new_weather_db/weather
Connection:postgres://new_weather_db/weather
Check: OK (0 ms)
METAR decoder
Status:connected
Config:METAR_TAF_DECODE_URL / METS_DECODER_URL
Value:http://metar_taf_parser:7000
Health URL:http://metar_taf_parser:7000/healthcheck
HTTP: 200 (5 ms)
OPMET parser (primary RB)
Status:connected
Config:ASG_MET_PARSER_PRIMARY / *_URL
Value:http://opmet_parser:7000
Health URL:http://opmet_parser:7000/healthcheck
HTTP: 200 (11 ms)
OPMET parser (shadow CS)
Status:connected
Config:ASG_MET_PARSER_SHADOW / *_URL
Value:http://old_meteo_text_parser:5001
Health URL:http://old_meteo_text_parser:5001/
HTTP: 200 (4 ms)
TAF decoder
Status:connected
Config:METAR_TAF_DECODE_URL / METS_DECODER_URL
Value:http://metar_taf_parser:7000
Health URL:http://metar_taf_parser:7000/healthcheck
HTTP: 200 (5 ms)

Потоки данных: что собираем и куда пишем

PipelineSourceCollected dataDestination tables
NOAA METARNOAA metars.cache.csv.gzMETAR/SPECI: ICAO, observed_at, raw_text, weather, wind, pressure, cloudsnoaa_metars noaa_cache_runs noaa_ingest_state aerodromes
NOAA TAFNOAA tafs.cache.xml.gzTAF: ICAO, issued/valid range, raw_text, decoded forecast groupsnoaa_tafs noaa_cache_runs noaa_ingest_state
ArcGIS Tropical CyclonesArcGIS Active_Hurricanes_v1 FeatureServerObserved/forecast positions, tracks, cones, warnings, wind swaths and radii polygonsactive_tropical_cyclones
SADIS Tropical Cyclone AdvisoriesSADIS FTP /TROPICAL_CYCLONE_ADVISORIESWMO/TAC tropical cyclone outlooks and advisories as raw bulletinstropical_cyclone_raw_payloads
ArcGIS Recent Tropical CyclonesArcGIS Recent_Hurricanes_v1 FeatureServerObserved positions, observed tracks, observed wind swaths for recent systemsrecent_tropical_cyclones
Roshydro ingestFTP *.b files (ROSHYDRO_FTP_*)METAR/TAF/OPMET batches + parser outputs + file processing statsroshydro_metars roshydro_tafs roshydro_opmet_processed_files aerodromes opmetdata sigmet_geo airmet_geo gamet_geo
Roshydro OPMET parity (code present, runtime switch pending)Same FTP *.b, ETX/=//END PART splittingAIRMET/SIGMET/GAMET normalized records, parse/build errors, geo projectionsopmetdata opmeterror sigmet_geo airmet_geo gamet_geo
Volcanic Ash AdvisorySADIS FTP + configured VAAC web sourcesVAA raw text, VAAC, volcano, issue/valid times, ash cloud altitude, movement and geometryvolcanic_ash_sources volcanic_ash_advisories volcanic_ash_clouds volcanic_ash_graphics

Active Tropical Cyclones

Existsyes
Rows59
Distinct storms3
Latest fetch2026-06-05 13:58:32 UTC
Ago4m41s

Sources

Source serviceRowsStormsLatest fetchAgo
ARCGIS_ACTIVE_HURRICANES_V15822026-06-05 13:58:32 UTC4m41s
JTWC_SIGNIFICANT_TROPICAL_WEATHER_ADVISORY112026-05-26 03:03:29 UTC10d10h59m45s

Source layers

Source serviceLayer idLayerRowsLatest fetchAgo
ARCGIS_ACTIVE_HURRICANES_V10Forecast Position92026-06-05 13:58:32 UTC4m41s
ARCGIS_ACTIVE_HURRICANES_V11Observed Position202026-06-05 13:58:32 UTC4m41s
ARCGIS_ACTIVE_HURRICANES_V12Forecast Track12026-06-05 13:58:32 UTC4m41s
ARCGIS_ACTIVE_HURRICANES_V13Observed Track32026-06-05 13:58:32 UTC4m41s
ARCGIS_ACTIVE_HURRICANES_V14Forecast Error Cone and Danger Area12026-06-05 13:58:32 UTC4m41s
ARCGIS_ACTIVE_HURRICANES_V17Tropical Storm Force (34kts)102026-06-05 13:58:32 UTC4m41s
ARCGIS_ACTIVE_HURRICANES_V110Raw 1/10th Degree Data (All)132026-06-05 13:58:32 UTC4m41s
ARCGIS_ACTIVE_HURRICANES_V111Observed Wind Swath12026-06-05 13:58:32 UTC4m41s
JTWC_SIGNIFICANT_TROPICAL_WEATHER_ADVISORY3001Tropical Disturbance Summary12026-05-26 03:03:29 UTC10d10h59m45s

Recent Tropical Cyclones

Existsyes
Rows2908
Distinct storms44
Latest fetch2026-06-05 09:23:32 UTC
Ago4h39m41s

Sources

Source serviceRowsStormsLatest fetchAgo
ARCGIS_RECENT_HURRICANES_V11125282026-06-05 03:00:00 UTC11h3m14s
JTWC_RECENT_TROPICAL_CYCLONES_BDECK_UNOFFICIAL_MIRROR599342026-06-05 09:23:32 UTC4h39m41s
NOAA_IBTRACS_RECENT_CSV1184312026-06-05 03:16:02 UTC10h47m11s

Source layers

Source serviceLayer idLayerRowsLatest fetchAgo
ARCGIS_RECENT_HURRICANES_V10Observed Position9412026-06-05 03:00:00 UTC11h3m14s
ARCGIS_RECENT_HURRICANES_V11Observed Track1842026-06-05 03:00:00 UTC11h3m14s
JTWC_RECENT_TROPICAL_CYCLONES_BDECK_UNOFFICIAL_MIRROR2100Observed Position5572026-06-05 09:23:32 UTC4h39m41s
JTWC_RECENT_TROPICAL_CYCLONES_BDECK_UNOFFICIAL_MIRROR2101Observed Track422026-06-03 03:20:01 UTC2d10h43m13s
NOAA_IBTRACS_RECENT_CSV2000Observed Position11552026-06-05 03:16:02 UTC10h47m11s
NOAA_IBTRACS_RECENT_CSV2001Observed Track292026-05-27 06:51:40 UTC9d7h11m33s

Tropical Cyclone Raw Payloads

Existsyes
Rows7322
Latest fetch2026-06-05 14:02:20 UTC
Ago53s

Sources

Source serviceRowsLatest fetchAgo
JTWC_SIGNIFICANT_TROPICAL_WEATHER_ADVISORY22026-05-26 03:03:29 UTC10d10h59m45s
NOAA_NHC_GIS_RSS72752026-06-05 14:02:20 UTC53s
SADIS_TROPICAL_CYCLONE_ADVISORIES452026-06-05 13:54:47 UTC8m26s
Products:nhc_gis_rss=7275,significant_tropical_weather_advisory=2,tropical_cyclone_advisory=45Statuses:no_active_cyclones=7103,raw=219

Recent payloads

SourceProductStatusBasinStormIssuedFetchedAgo
NOAA_NHC_GIS_RSScentral_pacificno_active_cyclonescentral_pacific2026-06-05 14:02:20 UTC53s
NOAA_NHC_GIS_RSSeast_pacificraweast_pacific2026-06-05 14:02:20 UTC53s
NOAA_NHC_GIS_RSSatlanticno_active_cyclonesatlantic2026-06-05 14:02:20 UTC53s
SADIS_TROPICAL_CYCLONE_ADVISORIESFKPZ21_KNHC_050833raw2026-06-05 13:54:47 UTC8m26s
SADIS_TROPICAL_CYCLONE_ADVISORIESFKPZ21_KNHC_050232raw2026-06-05 13:54:47 UTC8m26s
SADIS_TROPICAL_CYCLONE_ADVISORIESFKPZ21_KNHC_042032raw2026-06-05 13:54:47 UTC8m26s
SADIS_TROPICAL_CYCLONE_ADVISORIESFKPZ21_KNHC_041439raw2026-06-05 13:54:47 UTC8m26s
SADIS_TROPICAL_CYCLONE_ADVISORIESFKPZ21_KNHC_040834raw2026-06-05 13:54:47 UTC8m26s
SADIS_TROPICAL_CYCLONE_ADVISORIESFKPZ21_KNHC_040232raw2026-06-05 13:54:47 UTC8m26s
NOAA_NHC_GIS_RSScentral_pacificno_active_cyclonescentral_pacific2026-06-05 12:02:21 UTC2h52s
NOAA_NHC_GIS_RSSeast_pacificraweast_pacific2026-06-05 12:02:21 UTC2h52s
NOAA_NHC_GIS_RSSatlanticno_active_cyclonesatlantic2026-06-05 12:02:21 UTC2h52s

Volcanic Ash Advisory

Pipeline:enabledLast run: 2026-06-05 14:03:02 UTCRun status: okAgo: 12sFreshness: warn 120 min / critical 360 min
Sources: 6Advisories: 1674Clouds: 2054Graphics: 132 (georeferenced=60,no_geometry=11,parsed=61)State: fresh=2 warning=2 critical=2 missing=0
SourceVAACStatusLatest issueAgoLatest advisory24h48hTotalLast error
DARWIN_BOM_AGGREGATEDARWINcritical— / —22 adv / 82 clouds42 adv / 150 clouds189 adv / 657 clouds
MONTREAL_ECCCMONTREALfresh— / —0 adv / 0 clouds0 adv / 0 clouds931 adv / 0 clouds
SADIS_FTPMULTIfresh2026-06-05 13:30:00 UTC33m14sLEWOTOBI / 2026/8632 adv / 89 clouds71 adv / 177 clouds382 adv / 1018 clouds
TOKYO_JMATOKYOwarning2026-06-05 12:00:00 UTC2h3m14sSHEVELUCH / 2026/17012 adv / 28 clouds24 adv / 51 clouds90 adv / 121 clouds
TOULOUSE_METEO_FRTOULOUSEcritical2026-06-03 14:58:00 UTC1d23h5m14sTERCEIRA / 2026/70 adv / 0 clouds3 adv / 2 clouds10 adv / 29 clouds
WASHINGTON_OSPOWASHINGTONwarning2026-06-05 09:13:00 UTC4h50m14sFUEGO / 2026/6534 adv / 16 clouds9 adv / 36 clouds72 adv / 229 clouds

Таблицы и последние изменения данных

TableExistsRowsLatestAgoError
aerodromesyes56482026-06-04 11:35:31 UTC1d2h27m43s
noaa_metarsyes1942622026-06-05 14:00:00 UTC3m14s
noaa_tafsyes292792026-06-05 14:00:00 UTC3m14s
roshydro_metarsyes1064942026-06-05 14:00:00 UTC3m14s
roshydro_tafsyes280362026-06-06 11:00:00 UTCnow
active_tropical_cyclonesyes592026-06-05 13:58:32 UTC4m41s
recent_tropical_cyclonesyes29082026-06-05 09:23:32 UTC4h39m41s
tropical_cyclone_raw_payloadsyes73222026-06-05 14:02:20 UTC53s
roshydro_opmet_processed_filesyes3354682026-06-05 14:02:47 UTC26s
noaa_cache_runsyes1262402026-06-05 14:02:47 UTC26s
noaa_ingest_stateyes2
opmetdatayes224942026-06-05 14:00:42 UTC2m31s
opmeterroryes0
sigmet_geoyes114302026-06-05 14:00:42 UTC2m31s
airmet_geoyes26212026-06-05 13:48:41 UTC14m32s
gamet_geoyes84432026-06-05 11:12:43 UTC2h50m30s
volcanic_ash_sourcesyes62026-06-05 14:01:02 UTC2m11s
volcanic_ash_advisoriesyes16742026-06-05 13:30:00 UTC33m14s
volcanic_ash_cloudsyes20542026-06-06 07:10:00 UTCnow
volcanic_ash_graphicsyes1322026-06-05 09:13:00 UTC4h50m14s

Runtime env snapshot

VariableValue
RECENT_TROPICAL_CYCLONES_SOURCEALL
ACTIVE_TROPICAL_CYCLONES_SOURCEALL
TROPICAL_CYCLONES_JOB_INTERVAL_MIN15
RECENT_TROPICAL_CYCLONES_JOB_INTERVAL_MIN15
RECENT_TROPICAL_CYCLONES_LOOKBACK_DAYS130
ROSHYDRO_JOB_INTERVAL_MIN
NOAA_METAR_JOB_INTERVAL_MIN
NOAA_TAF_JOB_INTERVAL_MIN
NOAA_METAR_CACHE_URL
NOAA_TAF_CACHE_URL
ARCGIS_TROPICAL_CYCLONES_URLhttps://services9.arcgis.com/RHVPKKiFTONKtxq3/ArcGIS/rest/services/Active_Hurricanes_v1/FeatureServer
ARCGIS_RECENT_TROPICAL_CYCLONES_URLhttps://services9.arcgis.com/RHVPKKiFTONKtxq3/ArcGIS/rest/services/Recent_Hurricanes_v1/FeatureServer
NOAA_IBTRACS_RECENT_CSV_URLhttps://www.ncei.noaa.gov/data/international-best-track-archive-for-climate-stewardship-ibtracs/v04r01/access/csv/ibtracs.last3years.list.v04r01.csv
JTWC_TROPICAL_CYCLONES_PRODUCTS_BASE_URLhttps://www.metoc.navy.mil/jtwc/products/
JTWC_RECENT_TROPICAL_CYCLONES_BDECK_UNOFFICIAL_MIRROR_BASE_URLhttps://hurricanes.ral.ucar.edu/repository/data/bdecks_open/
SADIS_FTP_TC_ADVISORIES_DIR/TROPICAL_CYCLONE_ADVISORIES
SADIS_TROPICAL_CYCLONES_FETCH_LIMIT50
VOLCANIC_ASH_PIPELINE_ENABLEDtrue
VOLCANIC_ASH_SOURCESSADIS,WASHINGTON,TOKYO,MONTREAL,TOULOUSE,DARWIN_AGGREGATE
VOLCANIC_ASH_FETCH_LIMIT50
VOLCANIC_ASH_JOB_INTERVAL_MIN15
VOLCANIC_ASH_FRESHNESS_WARN_MIN120
VOLCANIC_ASH_FRESHNESS_CRITICAL_MIN360
SADIS_FTP_HOSTsadisftp.metoffice.gov.uk
SADIS_FTP_VA_ADVISORIES_DIR/VOLCANIC_ASH_ADVISORY_STATEMENTS
ROSHYDRO_FTP_HOST193.7.166.1
ROSHYDRO_FTP_REMOTE_GLOB
OPMET_COMPARE_ENABLEDfalse
OPMET_COMPARE_OUTPUT_DIRcompare_opmet
OPMET_COMPARE_LIMIT
OPMET_ERROR_RETENTION_HOURS
OPMET_ERROR_CLEANUP_INTERVAL_MIN
METS_DECODER_URLhttp://metar_taf_parser:7000
ASG_MET_PARSER
ASG_MET_PARSER_MODE
ASG_MET_PARSER_PRIMARYRB
ASG_MET_PARSER_SHADOWCS
ASG_MET_PARSER_CS_URLhttp://old_meteo_text_parser:5001
ASG_MET_PARSER_RB_URLhttp://opmet_parser:7000
ACTION_TRACE_ENABLEDtrue

OPMET errors

Top error types:
created_atopmet_typeerror_typemessageopmetdata_idoriginal_file

Temporary action trace (TEST)

Это временный функционал для тестирования. После завершения тестов удалить:src/app/services/support/action_recorder.rb, маршрут/monitor/actions и вызовыActionRecorder.record(...)

[
  {
    "at": "2026-06-05T14:03:14Z",
    "source": "api.monitor",
    "status": "info",
    "action": "monitor_requested",
    "details": null
  },
  {
    "at": "2026-06-05T14:03:02Z",
    "source": "orchestrator.volcanic_ash.advisories",
    "status": "ok",
    "action": "ingest_cycle_finished",
    "details": {
      "sources": {
        "washington_ospo": {
          "fetched": 50,
          "saved": 50,
          "errors": []
        }
      },
      "fetched": 50,
      "saved": 50,
      "errors": []
    }
  },
  {
    "at": "2026-06-05T14:02:47Z",
    "source": "orchestrator.noaa.metar",
    "status": "ok",
    "action": "ingest_cycle_finished",
    "details": {
      "messages_count": 644,
      "skipped": 4631
    }
  },
  {
    "at": "2026-06-05T14:02:47Z",
    "source": "orchestrator.roshydro",
    "status": "ok",
    "action": "ingest_cycle_finished",
    "details": {
      "files_count": 10
    }
  },
  {
    "at": "2026-06-05T14:02:47Z",
    "source": "orchestrator.roshydro",
    "status": "info",
    "action": "opmet_shadow_processed",
    "details": {
      "filename": "UUUJ03081197.b",
      "opmet_primary_mode": "RB",
      "opmet_shadow_mode": "CS"
    }
  },
  {
    "at": "2026-06-05T14:02:45Z",
    "source": "orchestrator.roshydro",
    "status": "info",
    "action": "processing_file",
    "details": {
      "filename": "UUUJ03081197.b"
    }
  },
  {
    "at": "2026-06-05T14:02:45Z",
    "source": "orchestrator.roshydro",
    "status": "info",
    "action": "opmet_shadow_processed",
    "details": {
      "filename": "UUUJ03081196.b",
      "opmet_primary_mode": "RB",
      "opmet_shadow_mode": "CS"
    }
  },
  {
    "at": "2026-06-05T14:02:45Z",
    "source": "orchestrator.roshydro",
    "status": "info",
    "action": "processing_file",
    "details": {
      "filename": "UUUJ03081196.b"
    }
  },
  {
    "at": "2026-06-05T14:02:45Z",
    "source": "orchestrator.roshydro",
    "status": "info",
    "action": "opmet_shadow_processed",
    "details": {
      "filename": "UUUJ03081195.b",
      "opmet_primary_mode": "RB",
      "opmet_shadow_mode": "CS"
    }
  },
  {
    "at": "2026-06-05T14:02:44Z",
    "source": "orchestrator.roshydro",
    "status": "info",
    "action": "processing_file",
    "details": {
      "filename": "UUUJ03081195.b"
    }
  },
  {
    "at": "2026-06-05T14:02:44Z",
    "source": "orchestrator.roshydro",
    "status": "info",
    "action": "opmet_shadow_processed",
    "details": {
      "filename": "UUUJ03081194.b",
      "opmet_primary_mode": "RB",
      "opmet_shadow_mode": "CS"
    }
  },
  {
    "at": "2026-06-05T14:02:44Z",
    "source": "orchestrator.roshydro",
    "status": "info",
    "action": "processing_file",
    "details": {
      "filename": "UUUJ03081194.b"
    }
  },
  {
    "at": "2026-06-05T14:02:44Z",
    "source": "orchestrator.roshydro",
    "status": "info",
    "action": "opmet_shadow_processed",
    "details": {
      "filename": "UUUJ03081193.b",
      "opmet_primary_mode": "RB",
      "opmet_shadow_mode": "CS"
    }
  },
  {
    "at": "2026-06-05T14:02:43Z",
    "source": "orchestrator.noaa.taf",
    "status": "ok",
    "action": "ingest_cycle_finished",
    "details": {
      "messages_count": 93,
      "skipped": 2954
    }
  },
  {
    "at": "2026-06-05T14:02:43Z",
    "source": "orchestrator.roshydro",
    "status": "info",
    "action": "processing_file",
    "details": {
      "filename": "UUUJ03081193.b"
    }
  },
  {
    "at": "2026-06-05T14:02:43Z",
    "source": "orchestrator.roshydro",
    "status": "info",
    "action": "opmet_shadow_processed",
    "details": {
      "filename": "UUUJ03081192.b",
      "opmet_primary_mode": "RB",
      "opmet_shadow_mode": "CS"
    }
  },
  {
    "at": "2026-06-05T14:02:43Z",
    "source": "orchestrator.roshydro",
    "status": "info",
    "action": "processing_file",
    "details": {
      "filename": "UUUJ03081192.b"
    }
  },
  {
    "at": "2026-06-05T14:02:43Z",
    "source": "orchestrator.roshydro",
    "status": "info",
    "action": "opmet_shadow_processed",
    "details": {
      "filename": "UUUJ03081191.b",
      "opmet_primary_mode": "RB",
      "opmet_shadow_mode": "CS"
    }
  },
  {
    "at": "2026-06-05T14:02:43Z",
    "source": "orchestrator.roshydro",
    "status": "info",
    "action": "processing_file",
    "details": {
      "filename": "UUUJ03081191.b"
    }
  },
  {
    "at": "2026-06-05T14:02:43Z",
    "source": "orchestrator.roshydro",
    "status": "info",
    "action": "opmet_shadow_processed",
    "details": {
      "filename": "UUUJ03081190.b",
      "opmet_primary_mode": "RB",
      "opmet_shadow_mode": "CS"
    }
  },
  {
    "at": "2026-06-05T14:02:42Z",
    "source": "orchestrator.roshydro",
    "status": "info",
    "action": "processing_file",
    "details": {
      "filename": "UUUJ03081190.b"
    }
  },
  {
    "at": "2026-06-05T14:02:42Z",
    "source": "orchestrator.roshydro",
    "status": "info",
    "action": "opmet_shadow_processed",
    "details": {
      "filename": "UUUJ03081189.b",
      "opmet_primary_mode": "RB",
      "opmet_shadow_mode": "CS"
    }
  },
  {
    "at": "2026-06-05T14:02:28Z",
    "source": "orchestrator.noaa.tropical_cyclones",
    "status": "ok",
    "action": "ingest_cycle_finished",
    "details": {
      "products_count": 7,
      "downloaded_count": 0,
      "parsed_xml_count": 0,
      "records_count": 0,
      "saved_count": 0,
      "raw_payloads_saved": 3,
      "skipped_count": 7,
      "by_basin": {
        "east_pacific": 7
      },
      "by_format": {
        "unknown": 1,
        "shp": 3,
        "kmz": 3
      }
    }
  },
  {
    "at": "2026-06-05T14:02:17Z",
    "source": "orchestrator.noaa.tropical_cyclones",
    "status": "info",
    "action": "ingest_cycle_started",
    "details": null
  },
  {
    "at": "2026-06-05T14:02:12Z",
    "source": "metar_ingest",
    "status": "skipped",
    "action": "skip_future_metar",
    "details": {
      "reason": "future_observed_at",
      "source": "noaa",
      "station": "MTCH",
      "observed_at": "2026-06-06T13:00:00Z",
      "now_utc": "2026-06-05T14:02:11Z"
    }
  },
  {
    "at": "2026-06-05T14:01:59Z",
    "source": "orchestrator.roshydro",
    "status": "info",
    "action": "processing_file",
    "details": {
      "filename": "UUUJ03081189.b"
    }
  },
  {
    "at": "2026-06-05T14:01:59Z",
    "source": "orchestrator.roshydro",
    "status": "info",
    "action": "opmet_shadow_processed",
    "details": {
      "filename": "UUUJ03081188.b",
      "opmet_primary_mode": "RB",
      "opmet_shadow_mode": "CS"
    }
  },
  {
    "at": "2026-06-05T14:01:40Z",
    "source": "orchestrator.roshydro",
    "status": "info",
    "action": "processing_file",
    "details": {
      "filename": "UUUJ03081188.b"
    }
  },
  {
    "at": "2026-06-05T14:01:40Z",
    "source": "orchestrator.roshydro",
    "status": "info",
    "action": "files_detected",
    "details": {
      "count": 10
    }
  },
  {
    "at": "2026-06-05T14:01:32Z",
    "source": "orchestrator.roshydro",
    "status": "info",
    "action": "dependencies_ok",
    "details": {
      "opmet_primary_mode": "RB",
      "opmet_primary_url": "http://opmet_parser:7000",
      "opmet_shadow_mode": "CS",
      "opmet_shadow_url": "http://old_meteo_text_parser:5001"
    }
  },
  {
    "at": "2026-06-05T14:01:32Z",
    "source": "orchestrator.noaa.taf",
    "status": "info",
    "action": "ingest_cycle_started",
    "details": null
  },
  {
    "at": "2026-06-05T14:01:32Z",
    "source": "orchestrator.noaa.metar",
    "status": "info",
    "action": "ingest_cycle_started",
    "details": null
  },
  {
    "at": "2026-06-05T14:01:32Z",
    "source": "orchestrator.roshydro",
    "status": "info",
    "action": "ingest_cycle_started",
    "details": null
  },
  {
    "at": "2026-06-05T14:01:02Z",
    "source": "orchestrator.volcanic_ash.advisories",
    "status": "info",
    "action": "ingest_cycle_started",
    "details": {
      "source_names": [
        "WASHINGTON"
      ]
    }
  },
  {
    "at": "2026-06-05T14:00:46Z",
    "source": "orchestrator.roshydro",
    "status": "ok",
    "action": "ingest_cycle_finished",
    "details": {
      "files_count": 5
    }
  },
  {
    "at": "2026-06-05T14:00:46Z",
    "source": "orchestrator.roshydro",
    "status": "info",
    "action": "opmet_shadow_processed",
    "details": {
      "filename": "UUUJ03081187.b",
      "opmet_primary_mode": "RB",
      "opmet_shadow_mode": "CS"
    }
  },
  {
    "at": "2026-06-05T14:00:45Z",
    "source": "orchestrator.roshydro",
    "status": "info",
    "action": "processing_file",
    "details": {
      "filename": "UUUJ03081187.b"
    }
  },
  {
    "at": "2026-06-05T14:00:45Z",
    "source": "orchestrator.roshydro",
    "status": "info",
    "action": "opmet_shadow_processed",
    "details": {
      "filename": "UUUJ03081186.b",
      "opmet_primary_mode": "RB",
      "opmet_shadow_mode": "CS"
    }
  },
  {
    "at": "2026-06-05T14:00:44Z",
    "source": "orchestrator.roshydro",
    "status": "info",
    "action": "processing_file",
    "details": {
      "filename": "UUUJ03081186.b"
    }
  },
  {
    "at": "2026-06-05T14:00:44Z",
    "source": "orchestrator.roshydro",
    "status": "info",
    "action": "opmet_shadow_processed",
    "details": {
      "filename": "UUUJ03081185.b",
      "opmet_primary_mode": "RB",
      "opmet_shadow_mode": "CS"
    }
  },
  {
    "at": "2026-06-05T14:00:44Z",
    "source": "orchestrator.roshydro",
    "status": "info",
    "action": "processing_file",
    "details": {
      "filename": "UUUJ03081185.b"
    }
  },
  {
    "at": "2026-06-05T14:00:44Z",
    "source": "orchestrator.roshydro",
    "status": "info",
    "action": "opmet_shadow_processed",
    "details": {
      "filename": "UUUJ03081184.b",
      "opmet_primary_mode": "RB",
      "opmet_shadow_mode": "CS"
    }
  },
  {
    "at": "2026-06-05T14:00:42Z",
    "source": "orchestrator.roshydro",
    "status": "info",
    "action": "processing_file",
    "details": {
      "filename": "UUUJ03081184.b"
    }
  },
  {
    "at": "2026-06-05T14:00:42Z",
    "source": "orchestrator.roshydro",
    "status": "info",
    "action": "opmet_shadow_processed",
    "details": {
      "filename": "UUUJ03081183.b",
      "opmet_primary_mode": "RB",
      "opmet_shadow_mode": "CS"
    }
  },
  {
    "at": "2026-06-05T14:00:41Z",
    "source": "metar_ingest",
    "status": "skipped",
    "action": "skip_future_metar",
    "details": {
      "reason": "future_observed_at",
      "source": "roshydro",
      "station": "KEZM",
      "observed_at": "2026-06-05T14:15:00Z",
      "now_utc": "2026-06-05T14:00:41Z"
    }
  },
  {
    "at": "2026-06-05T14:00:41Z",
    "source": "orchestrator.roshydro",
    "status": "info",
    "action": "processing_file",
    "details": {
      "filename": "UUUJ03081183.b"
    }
  },
  {
    "at": "2026-06-05T14:00:41Z",
    "source": "orchestrator.roshydro",
    "status": "info",
    "action": "files_detected",
    "details": {
      "count": 5
    }
  },
  {
    "at": "2026-06-05T14:00:32Z",
    "source": "orchestrator.roshydro",
    "status": "info",
    "action": "dependencies_ok",
    "details": {
      "opmet_primary_mode": "RB",
      "opmet_primary_url": "http://opmet_parser:7000",
      "opmet_shadow_mode": "CS",
      "opmet_shadow_url": "http://old_meteo_text_parser:5001"
    }
  },
  {
    "at": "2026-06-05T14:00:32Z",
    "source": "orchestrator.roshydro",
    "status": "info",
    "action": "ingest_cycle_started",
    "details": null
  },
  {
    "at": "2026-06-05T13:59:45Z",
    "source": "orchestrator.noaa.metar",
    "status": "ok",
    "action": "ingest_cycle_finished",
    "details": {
      "messages_count": 931,
      "skipped": 4191
    }
  },
  {
    "at": "2026-06-05T13:59:41Z",
    "source": "metar_ingest",
    "status": "skipped",
    "action": "skip_future_metar",
    "details": {
      "reason": "future_observed_at",
      "source": "noaa",
      "station": "MTCH",
      "observed_at": "2026-06-06T13:00:00Z",
      "now_utc": "2026-06-05T13:59:41Z"
    }
  },
  {
    "at": "2026-06-05T13:59:40Z",
    "source": "orchestrator.volcanic_ash.advisories",
    "status": "ok",
    "action": "ingest_cycle_finished",
    "details": {
      "sources": {
        "sadis_ftp": {
          "fetched": 50,
          "saved": 50,
          "errors": []
        }
      },
      "fetched": 50,
      "saved": 50,
      "errors": []
    }
  },
  {
    "at": "2026-06-05T13:59:38Z",
    "source": "orchestrator.noaa.taf",
    "status": "ok",
    "action": "ingest_cycle_finished",
    "details": {
      "messages_count": 28,
      "skipped": 2968
    }
  },
  {
    "at": "2026-06-05T13:59:38Z",
    "source": "orchestrator.roshydro",
    "status": "ok",
    "action": "ingest_cycle_finished",
    "details": {
      "files_count": 1
    }
  },
  {
    "at": "2026-06-05T13:59:38Z",
    "source": "orchestrator.roshydro",
    "status": "info",
    "action": "opmet_shadow_processed",
    "details": {
      "filename": "UUUJ03081182.b",
      "opmet_primary_mode": "RB",
      "opmet_shadow_mode": "CS"
    }
  },
  {
    "at": "2026-06-05T13:59:36Z",
    "source": "orchestrator.arcgis.tropical_cyclones",
    "status": "ok",
    "action": "ingest_cycle_finished",
    "details": {
      "features_count": 58,
      "layer_counts": {
        "0": 9,
        "1": 20,
        "2": 1,
        "3": 3,
        "4": 1,
        "5": 0,
        "7": 10,
        "8": 0,
        "9": 0,
        "10": 13,
        "11": 1
      }
    }
  },
  {
    "at": "2026-06-05T13:59:32Z",
    "source": "orchestrator.noaa.metar",
    "status": "info",
    "action": "ingest_cycle_started",
    "details": null
  },
  {
    "at": "2026-06-05T13:58:59Z",
    "source": "metar_ingest",
    "status": "skipped",
    "action": "skip_future_metar",
    "details": {
      "reason": "future_observed_at",
      "source": "roshydro",
      "station": "SGES",
      "observed_at": "2026-06-05T14:00:00Z",
      "now_utc": "2026-06-05T13:58:49Z"
    }
  },
  {
    "at": "2026-06-05T13:58:59Z",
    "source": "metar_ingest",
    "status": "skipped",
    "action": "skip_future_metar",
    "details": {
      "reason": "future_observed_at",
      "source": "roshydro",
      "station": "SBSI",
      "observed_at": "2026-06-05T14:00:00Z",
      "now_utc": "2026-06-05T13:58:49Z"
    }
  },
  {
    "at": "2026-06-05T13:58:58Z",
    "source": "metar_ingest",
    "status": "skipped",
    "action": "skip_future_metar",
    "details": {
      "reason": "future_observed_at",
      "source": "roshydro",
      "station": "MDAB",
      "observed_at": "2026-06-05T14:00:00Z",
      "now_utc": "2026-06-05T13:58:49Z"
    }
  },
  {
    "at": "2026-06-05T13:58:58Z",
    "source": "metar_ingest",
    "status": "skipped",
    "action": "skip_future_metar",
    "details": {
      "reason": "future_observed_at",
      "source": "roshydro",
      "station": "MDCY",
      "observed_at": "2026-06-05T14:00:00Z",
      "now_utc": "2026-06-05T13:58:49Z"
    }
  },
  {
    "at": "2026-06-05T13:58:58Z",
    "source": "metar_ingest",
    "status": "skipped",
    "action": "skip_future_metar",
    "details": {
      "reason": "future_observed_at",
      "source": "roshydro",
      "station": "MDLR",
      "observed_at": "2026-06-05T14:00:00Z",
      "now_utc": "2026-06-05T13:58:49Z"
    }
  },
  {
    "at": "2026-06-05T13:58:57Z",
    "source": "metar_ingest",
    "status": "skipped",
    "action": "skip_future_metar",
    "details": {
      "reason": "future_observed_at",
      "source": "roshydro",
      "station": "MDSD",
      "observed_at": "2026-06-05T14:00:00Z",
      "now_utc": "2026-06-05T13:58:49Z"
    }
  },
  {
    "at": "2026-06-05T13:58:57Z",
    "source": "metar_ingest",
    "status": "skipped",
    "action": "skip_future_metar",
    "details": {
      "reason": "future_observed_at",
      "source": "roshydro",
      "station": "MDJB",
      "observed_at": "2026-06-05T14:00:00Z",
      "now_utc": "2026-06-05T13:58:49Z"
    }
  },
  {
    "at": "2026-06-05T13:58:56Z",
    "source": "metar_ingest",
    "status": "skipped",
    "action": "skip_future_metar",
    "details": {
      "reason": "future_observed_at",
      "source": "roshydro",
      "station": "MDBH",
      "observed_at": "2026-06-05T14:00:00Z",
      "now_utc": "2026-06-05T13:58:49Z"
    }
  },
  {
    "at": "2026-06-05T13:58:56Z",
    "source": "metar_ingest",
    "status": "skipped",
    "action": "skip_future_metar",
    "details": {
      "reason": "future_observed_at",
      "source": "roshydro",
      "station": "MDPC",
      "observed_at": "2026-06-05T14:00:00Z",
      "now_utc": "2026-06-05T13:58:49Z"
    }
  },
  {
    "at": "2026-06-05T13:58:56Z",
    "source": "metar_ingest",
    "status": "skipped",
    "action": "skip_future_metar",
    "details": {
      "reason": "future_observed_at",
      "source": "roshydro",
      "station": "MDST",
      "observed_at": "2026-06-05T14:00:00Z",
      "now_utc": "2026-06-05T13:58:49Z"
    }
  },
  {
    "at": "2026-06-05T13:58:55Z",
    "source": "metar_ingest",
    "status": "skipped",
    "action": "skip_future_metar",
    "details": {
      "reason": "future_observed_at",
      "source": "roshydro",
      "station": "MDPP",
      "observed_at": "2026-06-05T14:00:00Z",
      "now_utc": "2026-06-05T13:58:49Z"
    }
  },
  {
    "at": "2026-06-05T13:58:55Z",
    "source": "metar_ingest",
    "status": "skipped",
    "action": "skip_future_metar",
    "details": {
      "reason": "future_observed_at",
      "source": "roshydro",
      "station": "SBGO",
      "observed_at": "2026-06-05T14:00:00Z",
      "now_utc": "2026-06-05T13:58:49Z"
    }
  },
  {
    "at": "2026-06-05T13:58:54Z",
    "source": "metar_ingest",
    "status": "skipped",
    "action": "skip_future_metar",
    "details": {
      "reason": "future_observed_at",
      "source": "roshydro",
      "station": "SBCJ",
      "observed_at": "2026-06-05T14:00:00Z",
      "now_utc": "2026-06-05T13:58:49Z"
    }
  },
  {
    "at": "2026-06-05T13:58:54Z",
    "source": "metar_ingest",
    "status": "skipped",
    "action": "skip_future_metar",
    "details": {
      "reason": "future_observed_at",
      "source": "roshydro",
      "station": "SBGL",
      "observed_at": "2026-06-05T14:00:00Z",
      "now_utc": "2026-06-05T13:58:49Z"
    }
  },
  {
    "at": "2026-06-05T13:58:53Z",
    "source": "metar_ingest",
    "status": "skipped",
    "action": "skip_future_metar",
    "details": {
      "reason": "future_observed_at",
      "source": "roshydro",
      "station": "MHCA",
      "observed_at": "2026-06-05T14:00:00Z",
      "now_utc": "2026-06-05T13:58:49Z"
    }
  },
  {
    "at": "2026-06-05T13:58:53Z",
    "source": "metar_ingest",
    "status": "skipped",
    "action": "skip_future_metar",
    "details": {
      "reason": "future_observed_at",
      "source": "roshydro",
      "station": "SBSN",
      "observed_at": "2026-06-05T14:00:00Z",
      "now_utc": "2026-06-05T13:58:49Z"
    }
  },
  {
    "at": "2026-06-05T13:58:53Z",
    "source": "metar_ingest",
    "status": "skipped",
    "action": "skip_future_metar",
    "details": {
      "reason": "future_observed_at",
      "source": "roshydro",
      "station": "MHPR",
      "observed_at": "2026-06-05T14:00:00Z",
      "now_utc": "2026-06-05T13:58:49Z"
    }
  },
  {
    "at": "2026-06-05T13:58:52Z",
    "source": "metar_ingest",
    "status": "skipped",
    "action": "skip_future_metar",
    "details": {
      "reason": "future_observed_at",
      "source": "roshydro",
      "station": "SBPP",
      "observed_at": "2026-06-05T14:00:00Z",
      "now_utc": "2026-06-05T13:58:49Z"
    }
  },
  {
    "at": "2026-06-05T13:58:52Z",
    "source": "metar_ingest",
    "status": "skipped",
    "action": "skip_future_metar",
    "details": {
      "reason": "future_observed_at",
      "source": "roshydro",
      "station": "GVBA",
      "observed_at": "2026-06-05T14:00:00Z",
      "now_utc": "2026-06-05T13:58:49Z"
    }
  },
  {
    "at": "2026-06-05T13:58:51Z",
    "source": "metar_ingest",
    "status": "skipped",
    "action": "skip_future_metar",
    "details": {
      "reason": "future_observed_at",
      "source": "roshydro",
      "station": "GVSV",
      "observed_at": "2026-06-05T14:00:00Z",
      "now_utc": "2026-06-05T13:58:49Z"
    }
  },
  {
    "at": "2026-06-05T13:58:51Z",
    "source": "metar_ingest",
    "status": "skipped",
    "action": "skip_future_metar",
    "details": {
      "reason": "future_observed_at",
      "source": "roshydro",
      "station": "GVNP",
      "observed_at": "2026-06-05T14:00:00Z",
      "now_utc": "2026-06-05T13:58:49Z"
    }
  },
  {
    "at": "2026-06-05T13:58:51Z",
    "source": "metar_ingest",
    "status": "skipped",
    "action": "skip_future_metar",
    "details": {
      "reason": "future_observed_at",
      "source": "roshydro",
      "station": "GVAC",
      "observed_at": "2026-06-05T14:00:00Z",
      "now_utc": "2026-06-05T13:58:49Z"
    }
  },
  {
    "at": "2026-06-05T13:58:50Z",
    "source": "metar_ingest",
    "status": "skipped",
    "action": "skip_future_metar",
    "details": {
      "reason": "future_observed_at",
      "source": "roshydro",
      "station": "VNKT",
      "observed_at": "2026-06-05T14:00:00Z",
      "now_utc": "2026-06-05T13:58:49Z"
    }
  }
]