implement duration logging
This commit is contained in:
parent
e17547ad83
commit
01d8002393
1
Cargo.lock
generated
1
Cargo.lock
generated
@ -184,6 +184,7 @@ dependencies = [
|
|||||||
"console-subscriber",
|
"console-subscriber",
|
||||||
"futures",
|
"futures",
|
||||||
"hyper",
|
"hyper",
|
||||||
|
"once_cell",
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
"time",
|
"time",
|
||||||
|
@ -17,6 +17,7 @@ console-subscriber = { version = "0.1.8", optional = true }
|
|||||||
tracing = "0.1.37"
|
tracing = "0.1.37"
|
||||||
tracing-subscriber = { version = "0.3.16", features = ["time"] }
|
tracing-subscriber = { version = "0.3.16", features = ["time"] }
|
||||||
time = { version = "0.3.20", features = ["local-offset", "macros"] }
|
time = { version = "0.3.20", features = ["local-offset", "macros"] }
|
||||||
|
once_cell = "1.17.1"
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
default = ["debug_server"]
|
default = ["debug_server"]
|
||||||
|
17
src/main.rs
17
src/main.rs
@ -138,6 +138,11 @@ fn spawn<T: Send + 'static>(
|
|||||||
.unwrap_or_else(|err| panic!("failed to spawn {name:?}: {err:?}"))
|
.unwrap_or_else(|err| panic!("failed to spawn {name:?}: {err:?}"))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static TIME_ZONE_OFFSET: once_cell::sync::OnceCell<time::UtcOffset> =
|
||||||
|
once_cell::sync::OnceCell::new();
|
||||||
|
|
||||||
|
static TIME_FORMAT: once_cell::sync::OnceCell<OwnedFormatItem> = once_cell::sync::OnceCell::new();
|
||||||
|
|
||||||
fn main() -> anyhow::Result<()> {
|
fn main() -> anyhow::Result<()> {
|
||||||
let config = Arc::new(Config::load("config.json")?);
|
let config = Arc::new(Config::load("config.json")?);
|
||||||
|
|
||||||
@ -145,7 +150,13 @@ fn main() -> anyhow::Result<()> {
|
|||||||
panic!("no allowed ports");
|
panic!("no allowed ports");
|
||||||
}
|
}
|
||||||
|
|
||||||
let local_offset = time::UtcOffset::local_offset_at(time::OffsetDateTime::UNIX_EPOCH)?;
|
TIME_FORMAT.set(config.time_format.clone()).unwrap();
|
||||||
|
|
||||||
|
TIME_ZONE_OFFSET
|
||||||
|
.set(time::UtcOffset::local_offset_at(
|
||||||
|
time::OffsetDateTime::UNIX_EPOCH,
|
||||||
|
)?)
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
tokio::runtime::Builder::new_multi_thread()
|
tokio::runtime::Builder::new_multi_thread()
|
||||||
.enable_all()
|
.enable_all()
|
||||||
@ -167,8 +178,8 @@ fn main() -> anyhow::Result<()> {
|
|||||||
fmt::layer()
|
fmt::layer()
|
||||||
.with_target(false)
|
.with_target(false)
|
||||||
.with_timer(fmt::time::OffsetTime::new(
|
.with_timer(fmt::time::OffsetTime::new(
|
||||||
local_offset,
|
*TIME_ZONE_OFFSET.get().unwrap(),
|
||||||
config.time_format.clone(),
|
TIME_FORMAT.get().unwrap(),
|
||||||
))
|
))
|
||||||
.with_filter(filter::LevelFilter::from_level(config.log_level)),
|
.with_filter(filter::LevelFilter::from_level(config.log_level)),
|
||||||
)
|
)
|
||||||
|
21
src/ports.rs
21
src/ports.rs
@ -17,7 +17,7 @@ use tracing::{error, info, warn};
|
|||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
packets::Packet, spawn, Config, Number, Port, UnixTimestamp, PORT_OWNERSHIP_TIMEOUT,
|
packets::Packet, spawn, Config, Number, Port, UnixTimestamp, PORT_OWNERSHIP_TIMEOUT,
|
||||||
PORT_RETRY_TIME,
|
PORT_RETRY_TIME, TIME_FORMAT, TIME_ZONE_OFFSET,
|
||||||
};
|
};
|
||||||
|
|
||||||
#[derive(Default, Serialize, Deserialize)]
|
#[derive(Default, Serialize, Deserialize)]
|
||||||
@ -66,22 +66,11 @@ fn duration_in_hours(duration: Duration) -> String {
|
|||||||
fn format_instant(instant: Instant) -> String {
|
fn format_instant(instant: Instant) -> String {
|
||||||
let when = duration_in_hours(instant.elapsed()) + " ago";
|
let when = duration_in_hours(instant.elapsed()) + " ago";
|
||||||
|
|
||||||
todo!();
|
|
||||||
|
|
||||||
#[cfg(feature = "chrono")]
|
|
||||||
let when = (|| -> anyhow::Result<_> {
|
let when = (|| -> anyhow::Result<_> {
|
||||||
use chrono::{Local, TimeZone};
|
let timestamp = SystemTime::now().duration_since(UNIX_EPOCH)? - instant.elapsed();
|
||||||
|
let date = time::OffsetDateTime::from_unix_timestamp(timestamp.as_secs() as i64)?
|
||||||
let date = Local
|
.to_offset(*TIME_ZONE_OFFSET.get().unwrap())
|
||||||
.timestamp_opt(
|
.format(TIME_FORMAT.get().unwrap())?;
|
||||||
(SystemTime::now().duration_since(UNIX_EPOCH)? - instant.elapsed())
|
|
||||||
.as_secs()
|
|
||||||
.try_into()?,
|
|
||||||
0,
|
|
||||||
)
|
|
||||||
.latest()
|
|
||||||
.ok_or(anyhow!("invalid update timestamp"))?
|
|
||||||
.format("%Y-%m-%d %H:%M:%S");
|
|
||||||
|
|
||||||
Ok(format!("{date} ({when})"))
|
Ok(format!("{date} ({when})"))
|
||||||
})()
|
})()
|
||||||
|
Loading…
Reference in New Issue
Block a user