cleanup code

This commit is contained in:
csehviktor
2025-07-08 14:48:22 +02:00
parent cf92638739
commit 566b56962f
4 changed files with 20 additions and 21 deletions

View File

@@ -29,9 +29,8 @@ impl MqttSubscriber {
self.clients.broadcast(&payload).await; self.clients.broadcast(&payload).await;
if let Err(e) = self.storage.record_message(&payload.agent).await { if let Err(e) = self.storage.record_uptime(&payload.agent).await {
eprintln!("failed to record message for {}: {}", &payload.agent, e); eprintln!("failed to record uptime for {}: {}", &payload.agent, e);
}
} }
} }
} }

View File

@@ -3,10 +3,10 @@ use chrono::Utc;
use tokio::sync::Mutex; use tokio::sync::Mutex;
use async_trait::async_trait; use async_trait::async_trait;
use super::{StorageRepository, UptimeMessage, UptimeModel}; use super::{StorageRepository, UptimeMessage, UptimeStorageModel};
pub struct InMemoryRepository { pub struct InMemoryRepository {
agents: Mutex<HashMap<String, UptimeModel>> agents: Mutex<HashMap<String, UptimeStorageModel>>
} }
impl InMemoryRepository { impl InMemoryRepository {
@@ -19,7 +19,7 @@ impl InMemoryRepository {
#[async_trait] #[async_trait]
impl StorageRepository for InMemoryRepository { impl StorageRepository for InMemoryRepository {
async fn record_message(&self, agent: &str) -> anyhow::Result<()> { async fn record_uptime(&self, agent: &str) -> anyhow::Result<()> {
let mut agents = self.agents.lock().await; let mut agents = self.agents.lock().await;
let now = Utc::now(); let now = Utc::now();
@@ -28,7 +28,7 @@ impl StorageRepository for InMemoryRepository {
a.last_seen = now; a.last_seen = now;
a.message_count += 1; a.message_count += 1;
}) })
.or_insert_with(|| UptimeModel { .or_insert_with(|| UptimeStorageModel {
id: agent.to_string(), id: agent.to_string(),
first_seen: now, first_seen: now,
last_seen: now, last_seen: now,

View File

@@ -10,14 +10,21 @@ pub mod memory;
pub mod sqlite; pub mod sqlite;
#[derive(Debug, Clone, Serialize, Deserialize)] #[derive(Debug, Clone, Serialize, Deserialize)]
pub struct UptimeModel { pub struct UptimeStorageModel {
pub id: String, pub id: String,
pub first_seen: DateTime<Utc>, pub first_seen: DateTime<Utc>,
pub last_seen: DateTime<Utc>, pub last_seen: DateTime<Utc>,
pub message_count: u64, pub message_count: u64,
} }
impl Into<UptimeMessage> for UptimeModel { #[derive(Debug, Serialize, Deserialize)]
pub struct UptimeMessage {
pub agent: String,
pub uptime: f64,
pub last_seen: DateTime<Utc>,
}
impl Into<UptimeMessage> for UptimeStorageModel {
fn into(self) -> UptimeMessage { fn into(self) -> UptimeMessage {
let duration = Utc::now().signed_duration_since(self.first_seen); let duration = Utc::now().signed_duration_since(self.first_seen);
let expected_messages = duration.num_seconds() as f64 / MQTT_SEND_INTERVAL as f64; let expected_messages = duration.num_seconds() as f64 / MQTT_SEND_INTERVAL as f64;
@@ -32,16 +39,9 @@ impl Into<UptimeMessage> for UptimeModel {
} }
} }
#[derive(Debug, Serialize, Deserialize)]
pub struct UptimeMessage {
pub agent: String,
pub uptime: f64,
pub last_seen: DateTime<Utc>,
}
#[async_trait] #[async_trait]
pub trait StorageRepository: Send + Sync { pub trait StorageRepository: Send + Sync {
async fn record_message(&self, agent: &str) -> anyhow::Result<()>; async fn record_uptime(&self, agent: &str) -> anyhow::Result<()>;
async fn get_agents(&self) -> anyhow::Result<Vec<UptimeMessage>>; async fn get_agents(&self) -> anyhow::Result<Vec<UptimeMessage>>;
} }

View File

@@ -4,7 +4,7 @@ use tokio::sync::Mutex;
use std::path::Path; use std::path::Path;
use chrono::{DateTime, Utc}; use chrono::{DateTime, Utc};
use super::{StorageRepository, UptimeMessage, UptimeModel}; use super::{StorageRepository, UptimeMessage, UptimeStorageModel};
pub struct SQLiteRepository { pub struct SQLiteRepository {
conn: Mutex<Connection> conn: Mutex<Connection>
@@ -40,7 +40,7 @@ impl SQLiteRepository {
#[async_trait] #[async_trait]
impl StorageRepository for SQLiteRepository { impl StorageRepository for SQLiteRepository {
async fn record_message(&self, agent: &str) -> anyhow::Result<()> { async fn record_uptime(&self, agent: &str) -> anyhow::Result<()> {
let conn = self.conn.lock().await; let conn = self.conn.lock().await;
let now = Utc::now().to_rfc3339(); let now = Utc::now().to_rfc3339();
@@ -64,7 +64,7 @@ impl StorageRepository for SQLiteRepository {
let first_seen: DateTime<Utc> = row.get::<_, String>(1)?.parse().unwrap(); let first_seen: DateTime<Utc> = row.get::<_, String>(1)?.parse().unwrap();
let last_seen: DateTime<Utc> = row.get::<_, String>(2)?.parse().unwrap(); let last_seen: DateTime<Utc> = row.get::<_, String>(2)?.parse().unwrap();
Ok(UptimeModel { Ok(UptimeStorageModel {
id: row.get(0)?, id: row.get(0)?,
first_seen, first_seen,
last_seen, last_seen,
@@ -72,7 +72,7 @@ impl StorageRepository for SQLiteRepository {
}) })
})?; })?;
let models: Result<Vec<UptimeModel>, _> = result.collect(); let models: Result<Vec<UptimeStorageModel>, _> = result.collect();
Ok(models?.into_iter().map(Into::into).collect()) Ok(models?.into_iter().map(Into::into).collect())
} }