diff --git a/microservices/weather/src/fetch.rs b/microservices/weather/src/fetch.rs index 26fb593..eccb006 100644 --- a/microservices/weather/src/fetch.rs +++ b/microservices/weather/src/fetch.rs @@ -3,22 +3,33 @@ use serde::{Deserialize, Serialize}; #[derive(Debug, Serialize, Deserialize)] pub struct WeatherResponse { - pub id: usize, pub weather: Vec, pub wind: Wind, + pub main: Main, + pub clouds: Clouds, } #[derive(Debug, Serialize, Deserialize)] pub struct Weather { - pub id: usize, + pub id: u16, pub main: String, } +#[derive(Debug, Serialize, Deserialize)] +pub struct Main { + pub temp: f32, +} + #[derive(Debug, Serialize, Deserialize)] pub struct Wind { pub speed: f32, } +#[derive(Debug, Serialize, Deserialize)] +pub struct Clouds { + pub all: u16, +} + fn construct_weather_data_url( base_url: &str, latitude: &str, @@ -27,7 +38,7 @@ fn construct_weather_data_url( current_datetime: &DateTime, ) -> String { format!( - "{}?lat={}&lon={}&dt={}&appid={}", + "{}?lat={}&lon={}&dt={}&appid={}&exclude=minutely,hourly,daily,alerts", base_url, latitude, longitude, @@ -44,6 +55,9 @@ pub async fn fetch_weather_data( current_datetime: &DateTime, ) -> Result { let url = construct_weather_data_url(base_url, latitude, longitude, api_key, current_datetime); + let resp = reqwest::get(url.clone()).await?.text().await; + println!("{:?}", resp); + reqwest::get(url).await?.json().await } @@ -62,7 +76,7 @@ mod test { &Utc.with_ymd_and_hms(2023, 1, 2, 1, 0, 0).unwrap(), ); assert_eq!( - "http://test?lat=1.14&lon=1.12&dt=1672621200&appid=abc", + "http://test?lat=1.14&lon=1.12&dt=1672621200&appid=abc&exclude=minutely,hourly,daily,alerts", result ); } diff --git a/microservices/weather/src/main.rs b/microservices/weather/src/main.rs index 4b3f0fc..7e7b79c 100644 --- a/microservices/weather/src/main.rs +++ b/microservices/weather/src/main.rs @@ -33,10 +33,18 @@ async fn read_weather_data(settings: &input::Input) -> Result<()> { .await?; info!("Start writing weather data..."); - let map = write::WeatherReading { + let mut map = write::WeatherReading { wind_speed: result.wind.speed, time: Utc::now(), + temp: result.main.temp, + clouds: result.clouds.all, + main: None, + id: None, }; + if let Some(weather_element) = result.weather.first() { + map.main = Some(weather_element.main.clone()); + map.id = Some(weather_element.id); + } write::write_weather_data( map, &settings.influx_db_base_url, diff --git a/microservices/weather/src/write.rs b/microservices/weather/src/write.rs index 4345f45..fd1feb4 100644 --- a/microservices/weather/src/write.rs +++ b/microservices/weather/src/write.rs @@ -6,6 +6,10 @@ use influxdb::{Client, InfluxDbWriteable}; pub struct WeatherReading { pub time: DateTime, pub wind_speed: f32, + pub clouds: u16, + pub temp: f32, + pub id: Option, + pub main: Option, } pub async fn write_weather_data(