chore: fmt
Signed-off-by: kjuulh <contact@kjuulh.io>
This commit is contained in:
parent
43ed89d0d8
commit
86cfc18076
@ -1,14 +1,10 @@
|
|||||||
|
|
||||||
|
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
use axum::async_trait;
|
use axum::async_trait;
|
||||||
|
|
||||||
use churn_domain::{LogEvent};
|
use churn_domain::LogEvent;
|
||||||
use itertools::Itertools;
|
use itertools::Itertools;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
use churn_capnp::CapnpPackExt;
|
use churn_capnp::CapnpPackExt;
|
||||||
|
|
||||||
use crate::db::Db;
|
use crate::db::Db;
|
||||||
@ -52,6 +48,7 @@ pub trait EventServiceTrait {
|
|||||||
async fn append(&self, req: LogEvent) -> anyhow::Result<()>;
|
async fn append(&self, req: LogEvent) -> anyhow::Result<()>;
|
||||||
async fn get_from_cursor(&self, cursor: uuid::Uuid) -> anyhow::Result<Vec<LogEvent>>;
|
async fn get_from_cursor(&self, cursor: uuid::Uuid) -> anyhow::Result<Vec<LogEvent>>;
|
||||||
async fn get_from_beginning(&self) -> anyhow::Result<Vec<LogEvent>>;
|
async fn get_from_beginning(&self) -> anyhow::Result<Vec<LogEvent>>;
|
||||||
|
async fn get_latest_cursor(&self) -> anyhow::Result<uuid::Uuid>;
|
||||||
}
|
}
|
||||||
|
|
||||||
#[async_trait]
|
#[async_trait]
|
||||||
@ -93,4 +90,25 @@ impl EventServiceTrait for DefaultEventService {
|
|||||||
|
|
||||||
Ok(events)
|
Ok(events)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async fn get_latest_cursor(&self) -> anyhow::Result<uuid::Uuid> {
|
||||||
|
let events = self.db.get_all("events_log").await?;
|
||||||
|
|
||||||
|
let event = events
|
||||||
|
.iter()
|
||||||
|
.flat_map(|e| match LogEvent::deserialize_capnp(e) {
|
||||||
|
Ok(o) => Ok(o),
|
||||||
|
Err(e) => {
|
||||||
|
tracing::error!("failed to deserialize capnp: {e}");
|
||||||
|
Err(e)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.sorted_by_key(|i| i.timestamp)
|
||||||
|
.last();
|
||||||
|
|
||||||
|
match event {
|
||||||
|
Some(x) => Ok(x.id),
|
||||||
|
None => anyhow::bail!("no events found"),
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,7 +19,7 @@ use churn_domain::{Agent, LeaseResp, LogEvent, ServerEnrollReq, ServerMonitorRes
|
|||||||
use clap::{Args, Parser, Subcommand, ValueEnum};
|
use clap::{Args, Parser, Subcommand, ValueEnum};
|
||||||
use event::EventService;
|
use event::EventService;
|
||||||
use lease::LeaseService;
|
use lease::LeaseService;
|
||||||
use serde::{Deserialize};
|
use serde::Deserialize;
|
||||||
use serde_json::json;
|
use serde_json::json;
|
||||||
|
|
||||||
use crate::db::Db;
|
use crate::db::Db;
|
||||||
@ -208,19 +208,14 @@ async fn logs(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let events = match cursor.cursor {
|
match cursor.cursor {
|
||||||
Some(c) => state.events.get_from_cursor(c).await,
|
Some(c) => {
|
||||||
None => state.events.get_from_beginning().await,
|
let events = state
|
||||||
}
|
.events
|
||||||
|
.get_from_cursor(c)
|
||||||
|
.await
|
||||||
.map_err(AppError::Internal)?;
|
.map_err(AppError::Internal)?;
|
||||||
|
|
||||||
if events.is_empty() {
|
|
||||||
return Ok(Json(ServerMonitorResp {
|
|
||||||
cursor: cursor.cursor,
|
|
||||||
logs: Vec::new(),
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
Ok(Json(ServerMonitorResp {
|
Ok(Json(ServerMonitorResp {
|
||||||
cursor: events.last().map(|e| e.id),
|
cursor: events.last().map(|e| e.id),
|
||||||
logs: events
|
logs: events
|
||||||
@ -228,4 +223,18 @@ async fn logs(
|
|||||||
.map(|e| format!("{}: {}", e.author, e.content))
|
.map(|e| format!("{}: {}", e.author, e.content))
|
||||||
.collect(),
|
.collect(),
|
||||||
}))
|
}))
|
||||||
|
}
|
||||||
|
None => {
|
||||||
|
let cursor = state
|
||||||
|
.events
|
||||||
|
.get_latest_cursor()
|
||||||
|
.await
|
||||||
|
.map_err(AppError::Internal)?;
|
||||||
|
|
||||||
|
return Ok(Json(ServerMonitorResp {
|
||||||
|
cursor: Some(cursor),
|
||||||
|
logs: Vec::new(),
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user