missing loop

This commit is contained in:
Bryan Stitt 2022-10-20 23:50:06 +00:00
parent 12ee26a2b3
commit 94f205900a

View File

@ -121,12 +121,12 @@ impl ProxyResponseStat {
let backend_requests = metadata.backend_requests.load(Ordering::Acquire); let backend_requests = metadata.backend_requests.load(Ordering::Acquire);
let period_seconds = metadata.period_seconds; let period_seconds = metadata.period_seconds;
let period_timestamp = let period_timestamp =
(metadata.datetime.timestamp() as u64) / period_seconds * period_seconds; (metadata.start_datetime.timestamp() as u64) / period_seconds * period_seconds;
let request_bytes = metadata.request_bytes; let request_bytes = metadata.request_bytes;
let error_response = metadata.error_response.load(Ordering::Acquire); let error_response = metadata.error_response.load(Ordering::Acquire);
let response_millis = // TODO: timestamps could get confused by leap seconds. need tokio time instead
(Utc::now().timestamp_millis() - metadata.datetime.timestamp_millis()) as u64; let response_millis = metadata.start_instant.elapsed().as_millis() as u64;
Self { Self {
user_key_id: authorized_key.user_key_id, user_key_id: authorized_key.user_key_id,
@ -197,29 +197,31 @@ impl StatEmitter {
aggregate_rx: flume::Receiver<Web3ProxyStat>, aggregate_rx: flume::Receiver<Web3ProxyStat>,
mut shutdown_receiver: broadcast::Receiver<()>, mut shutdown_receiver: broadcast::Receiver<()>,
) -> anyhow::Result<()> { ) -> anyhow::Result<()> {
// TODO: select on shutdown handle so we can be sure to save every aggregate! loop {
tokio::select! { tokio::select! {
x = aggregate_rx.recv_async() => { x = aggregate_rx.recv_async() => {
match x { match x {
Ok(x) => { Ok(x) => {
trace!(?x, "aggregating stat"); trace!(?x, "aggregating stat");
// TODO: increment global stats (in redis? in local cache for prometheus?) // TODO: increment global stats (in redis? in local cache for prometheus?)
// TODO: batch stats? // TODO: batch stats?
// TODO: where can we wait on this handle? // TODO: where can we wait on this handle?
let clone = self.clone(); let clone = self.clone();
tokio::spawn(async move { clone.aggregate_stat(x).await }); tokio::spawn(async move { clone.aggregate_stat(x).await });
}, },
Err(err) => { Err(err) => {
error!(?err, "aggregate_rx"); error!(?err, "aggregate_rx");
}
} }
} }
} x = shutdown_receiver.recv() => {
x = shutdown_receiver.recv() => { match x {
match x { Ok(_) => info!("aggregate stats loop shutting down"),
Ok(_) => info!("aggregate stats loop shutting down"), Err(err) => error!(?err, "shutdown receiver"),
Err(err) => error!(?err, "shutdown receiver"), }
break;
} }
} }
} }