Create maps cache and run its task next to Rocket

This commit is contained in:
Paul van Tilburg 2022-02-12 15:58:56 +01:00
parent 6b24c4f6e7
commit b5dae45868
Signed by: paul
GPG Key ID: C6DE073EDA9EEC4D
4 changed files with 182 additions and 7 deletions

134
Cargo.lock generated
View File

@ -2,6 +2,21 @@
# It is not intended for manual editing.
version = 3
[[package]]
name = "addr2line"
version = "0.17.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b9ecd88a8c8378ca913a680cd98f0f13ac67383d35993f86c90a70e3f137816b"
dependencies = [
"gimli",
]
[[package]]
name = "adler"
version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
[[package]]
name = "ansi_term"
version = "0.12.1"
@ -78,6 +93,21 @@ version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
[[package]]
name = "backtrace"
version = "0.3.64"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5e121dee8023ce33ab248d9ce1493df03c3b38a659b240096fcbd7048ff9c31f"
dependencies = [
"addr2line",
"cc",
"cfg-if 1.0.0",
"libc",
"miniz_oxide",
"object",
"rustc-demangle",
]
[[package]]
name = "base-x"
version = "0.2.8"
@ -152,6 +182,33 @@ dependencies = [
"winapi 0.3.9",
]
[[package]]
name = "color-eyre"
version = "0.5.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1f1885697ee8a177096d42f158922251a41973117f6d8a234cee94b9509157b7"
dependencies = [
"backtrace",
"color-spantrace",
"eyre",
"indenter",
"once_cell",
"owo-colors",
"tracing-error",
]
[[package]]
name = "color-spantrace"
version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b6eee477a4a8a72f4addd4de416eb56d54bc307b284d6601bafdee1f4ea462d1"
dependencies = [
"once_cell",
"owo-colors",
"tracing-core",
"tracing-error",
]
[[package]]
name = "const_fn"
version = "0.4.9"
@ -239,6 +296,16 @@ dependencies = [
"cfg-if 1.0.0",
]
[[package]]
name = "eyre"
version = "0.6.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bc225d8f637923fe585089fcf03e705c222131232d2c1fb622e84ecf725d0eb8"
dependencies = [
"indenter",
"once_cell",
]
[[package]]
name = "fastrand"
version = "1.7.0"
@ -448,6 +515,12 @@ dependencies = [
"wasi",
]
[[package]]
name = "gimli"
version = "0.26.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "78cc372d058dcf6d5ecd98510e7fbc9e5aec4d21de70f65fea8fecebcd881bd4"
[[package]]
name = "glob"
version = "0.3.0"
@ -630,6 +703,12 @@ dependencies = [
"unicode-normalization",
]
[[package]]
name = "indenter"
version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683"
[[package]]
name = "indexmap"
version = "1.8.0"
@ -744,7 +823,7 @@ dependencies = [
"serde",
"serde_json",
"tracing",
"tracing-subscriber",
"tracing-subscriber 0.3.8",
]
[[package]]
@ -784,6 +863,16 @@ dependencies = [
"unicase",
]
[[package]]
name = "miniz_oxide"
version = "0.4.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b"
dependencies = [
"adler",
"autocfg",
]
[[package]]
name = "mio"
version = "0.6.23"
@ -924,6 +1013,15 @@ dependencies = [
"libc",
]
[[package]]
name = "object"
version = "0.27.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "67ac1d3f9a1d3616fd9a60c8d74296f22406a238b6a72f5cc1e6f314df4ffbf9"
dependencies = [
"memchr",
]
[[package]]
name = "once_cell"
version = "1.9.0"
@ -963,6 +1061,12 @@ dependencies = [
"vcpkg",
]
[[package]]
name = "owo-colors"
version = "1.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2386b4ebe91c2f7f51082d4cefa145d030e33a1842a96b12e4885cc3c01f7a55"
[[package]]
name = "parking_lot"
version = "0.11.2"
@ -1325,6 +1429,12 @@ dependencies = [
"uncased",
]
[[package]]
name = "rustc-demangle"
version = "0.1.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342"
[[package]]
name = "rustc_version"
version = "0.2.3"
@ -1487,6 +1597,7 @@ name = "sinoptik"
version = "0.1.0"
dependencies = [
"chrono",
"color-eyre",
"geocoding",
"rocket",
]
@ -1869,6 +1980,16 @@ dependencies = [
"valuable",
]
[[package]]
name = "tracing-error"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b4d7c0b83d4a500748fa5879461652b361edf5c9d51ede2a2ac03875ca185e24"
dependencies = [
"tracing",
"tracing-subscriber 0.2.25",
]
[[package]]
name = "tracing-futures"
version = "0.2.5"
@ -1890,6 +2011,17 @@ dependencies = [
"tracing-core",
]
[[package]]
name = "tracing-subscriber"
version = "0.2.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0e0d2eaa99c3c2e41547cfa109e910a68ea03823cccad4a0525dcbc9b01e8c71"
dependencies = [
"sharded-slab",
"thread_local",
"tracing-core",
]
[[package]]
name = "tracing-subscriber"
version = "0.3.8"

View File

@ -5,5 +5,6 @@ edition = "2021"
[dependencies]
chrono = "0.4.19"
color-eyre = "0.5.6"
geocoding = "0.3.1"
rocket = { version = "0.5.0-rc.1", features = ["json"] }

View File

@ -11,11 +11,16 @@
)]
#![deny(missing_docs)]
use color_eyre::Result;
use geocoding::{Forward, Openstreetmap, Point};
use rocket::serde::json::Json;
use rocket::serde::Serialize;
use rocket::tokio;
use rocket::{get, launch, routes, FromFormField};
use rocket::tokio::{self, select};
use rocket::{get, routes, FromFormField};
use self::maps::Maps;
mod maps;
/// The current for a specific location.
///
@ -178,8 +183,28 @@ async fn forecast_geo(lat: f64, lon: f64, metrics: Vec<Metric>) -> Json<Forecast
Json(forecast)
}
/// Launches rocket.
#[launch]
async fn rocket() -> _ {
rocket::build().mount("/", routes![forecast_address, forecast_geo])
/// Starts the main maps refresh loop and sets up and launches Rocket.
#[rocket::main]
async fn main() -> Result<()> {
color_eyre::install()?;
let rocket = rocket::build()
.mount("/", routes![forecast_address, forecast_geo])
.ignite()
.await?;
let shutdown = rocket.shutdown();
let maps_updater = tokio::spawn(Maps::run());
select! {
result = rocket.launch() => {
result?
}
result = maps_updater => {
shutdown.notify();
result?
}
}
Ok(())
}

17
src/maps.rs Normal file
View File

@ -0,0 +1,17 @@
//! Maps handling.
use rocket::tokio::time::{sleep, Duration};
/// The interval between map refreshes (in seconds).
const SLEEP_INTERVAL: u64 = 60;
#[derive(Debug, Default)]
pub(crate) struct Maps;
impl Maps {
pub(crate) async fn run() -> ! {
loop {
sleep(Duration::from_secs(SLEEP_INTERVAL)).await;
}
}
}