mirror of
				https://github.com/csehviktor/status-monitor.git
				synced 2025-08-08 18:06:14 +02:00 
			
		
		
		
	cleanup code
This commit is contained in:
		| @@ -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); | ||||||
|                     } |  | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|   | |||||||
| @@ -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, | ||||||
|   | |||||||
| @@ -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>>; | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -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()) | ||||||
|     } |     } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user