Added NOSIG to metar parsing, changed default metar timeout to 50 min

This commit is contained in:
2025-04-15 17:57:51 -04:00
parent c2e9e098ed
commit 98be22b972
2 changed files with 19 additions and 4 deletions

View File

@@ -2,6 +2,7 @@ use crate::error::Error;
use crate::{error::ApiResult, db};
use chrono::{DateTime, Datelike, Utc};
use std::collections::HashSet;
use std::env;
use redis::{AsyncCommands, RedisResult};
use reqwest::Client;
use serde::{Deserialize, Serialize};
@@ -49,6 +50,8 @@ pub struct Metar {
pub humidity: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub density_altitude: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub no_significant_changes: Option<bool>,
}
#[derive(Serialize, Deserialize, Debug)]
@@ -193,6 +196,7 @@ impl Default for Metar {
precip_in: None,
humidity: None,
density_altitude: None,
no_significant_changes: None,
}
}
}
@@ -655,6 +659,12 @@ impl Metar {
metar_parts.remove(0);
}
// No significant changes
if !metar_parts.is_empty() && metar_parts[0] == "NOSIG" {
metar.no_significant_changes = Some(true);
metar_parts.remove(0);
}
// Remarks
if !metar_parts.is_empty() && metar_parts[0] == "RMK" {
metar_parts.remove(0);
@@ -837,8 +847,12 @@ impl Metar {
for difference in db_metars_set.symmetric_difference(&station_icaos_set) {
missing_metar_icaos.push(difference.to_string());
}
let time_offset = env::var("API_METAR_TIME_OFFSET")
.unwrap_or("3000".to_string())
.parse::<i64>()
.unwrap_or(3000);
for metar in db_metars {
if current_time > (metar.observation_time.timestamp() + 3600) {
if current_time > (metar.observation_time.timestamp() + time_offset) {
log::trace!("{} METAR data is outdated", metar.station_id);
missing_metar_icaos.push(metar.station_id.to_string());
}
@@ -920,9 +934,9 @@ impl Metar {
"#,
TABLE_NAME
))
.bind(icao_list)
.fetch_all(pool)
.await?;
.bind(icao_list)
.fetch_all(pool)
.await?;
metars = metar_rows
.into_iter()
.filter_map(|metar_db| Metar::from_db(metar_db).ok())