mirror of
https://github.com/csehviktor/status-monitor.git
synced 2026-04-28 16:27:34 +02:00
formatter + implement status history
This commit is contained in:
@@ -1,10 +1,11 @@
|
||||
use serde::{Deserialize, Serialize};
|
||||
use async_trait::async_trait;
|
||||
use chrono::{DateTime, Utc};
|
||||
use common::{MQTT_SEND_INTERVAL, StatusMessage};
|
||||
use memory::InMemoryRepository;
|
||||
use rusqlite::Row;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use sqlite::SQLiteRepository;
|
||||
use std::sync::Arc;
|
||||
use memory::InMemoryRepository;
|
||||
use async_trait::async_trait;
|
||||
use common::MQTT_SEND_INTERVAL;
|
||||
|
||||
pub mod memory;
|
||||
pub mod sqlite;
|
||||
@@ -39,9 +40,32 @@ impl Into<UptimeMessage> for UptimeStorageModel {
|
||||
}
|
||||
}
|
||||
|
||||
impl TryFrom<&Row<'_>> for UptimeStorageModel {
|
||||
type Error = rusqlite::Error;
|
||||
|
||||
fn try_from(row: &Row) -> Result<Self, Self::Error> {
|
||||
let first_seen: DateTime<Utc> = row.get::<_, String>(1)?.parse().map_err(|e| {
|
||||
rusqlite::Error::FromSqlConversionFailure(1, rusqlite::types::Type::Text, Box::new(e))
|
||||
})?;
|
||||
|
||||
let last_seen: DateTime<Utc> = row.get::<_, String>(2)?.parse().map_err(|e| {
|
||||
rusqlite::Error::FromSqlConversionFailure(2, rusqlite::types::Type::Text, Box::new(e))
|
||||
})?;
|
||||
|
||||
Ok(UptimeStorageModel {
|
||||
id: row.get(0)?,
|
||||
first_seen,
|
||||
last_seen,
|
||||
message_count: row.get(1)?,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
#[async_trait]
|
||||
pub trait StorageRepository: Send + Sync {
|
||||
async fn record_message(&self, message: &StatusMessage) -> anyhow::Result<()>;
|
||||
async fn record_uptime(&self, agent: &str) -> anyhow::Result<()>;
|
||||
async fn get_history(&self, agent: &str) -> anyhow::Result<Vec<StatusMessage>>;
|
||||
async fn get_agents(&self) -> anyhow::Result<Vec<UptimeMessage>>;
|
||||
}
|
||||
|
||||
@@ -51,7 +75,7 @@ pub enum StorageStrategy {
|
||||
}
|
||||
|
||||
pub struct StorageRepositoryImpl {
|
||||
inner: Arc<dyn StorageRepository>
|
||||
inner: Arc<dyn StorageRepository>,
|
||||
}
|
||||
|
||||
impl StorageRepositoryImpl {
|
||||
|
||||
Reference in New Issue
Block a user