This commit is contained in:
csehviktor
2025-07-15 01:47:51 +02:00
parent 6eb696019a
commit 494c64bfb6
2 changed files with 23 additions and 11 deletions

View File

@@ -44,19 +44,31 @@ impl TryFrom<&Row<'_>> for UptimeStorageModel {
type Error = rusqlite::Error; type Error = rusqlite::Error;
fn try_from(row: &Row) -> Result<Self, Self::Error> { fn try_from(row: &Row) -> Result<Self, Self::Error> {
let first_seen: DateTime<Utc> = row.get::<_, String>(1)?.parse().map_err(|e| { let first_seen = DateTime::parse_from_rfc3339(&row.get::<_, String>(2)?)
rusqlite::Error::FromSqlConversionFailure(1, rusqlite::types::Type::Text, Box::new(e)) .map(|dt| dt.with_timezone(&Utc))
})?; .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| { let last_seen = DateTime::parse_from_rfc3339(&row.get::<_, String>(2)?)
rusqlite::Error::FromSqlConversionFailure(2, rusqlite::types::Type::Text, Box::new(e)) .map(|dt| dt.with_timezone(&Utc))
})?; .map_err(|e| {
rusqlite::Error::FromSqlConversionFailure(
2,
rusqlite::types::Type::Text,
Box::new(e),
)
})?;
Ok(UptimeStorageModel { Ok(UptimeStorageModel {
id: row.get(0)?, id: row.get(0)?,
first_seen, first_seen,
last_seen, last_seen,
message_count: row.get(1)?, message_count: row.get(3)?,
}) })
} }
} }

View File

@@ -29,11 +29,11 @@ impl SQLiteRepository {
message_count INTEGER NOT NULL DEFAULT 0 message_count INTEGER NOT NULL DEFAULT 0
) STRICT; ) STRICT;
CREATE TABLE IF NOT EXISTS agents ( CREATE TABLE IF NOT EXISTS messages (
id TEXT PRIMARY KEY AUTO_INCREMENT, id INTEGER PRIMARY KEY AUTOINCREMENT,
agent_id TEXT NOT NULL, agent_id TEXT NOT NULL,
message TEXT NOT NULL, message TEXT NOT NULL,
timestamp TEXT NOT NULL timestamp TEXT NOT NULL,
FOREIGN KEY (agent_id) REFERENCES agents(id) ON DELETE CASCADE FOREIGN KEY (agent_id) REFERENCES agents(id) ON DELETE CASCADE
) STRICT; ) STRICT;
@@ -101,7 +101,7 @@ impl StorageRepository for SQLiteRepository {
let (sql, params) = if let Some(duration) = duration { let (sql, params) = if let Some(duration) = duration {
( (
"SELECT agent_id, message, timestamp FROM messages WHERE agent_id = ? AND timestamp <= ?", "SELECT agent_id, message, timestamp FROM messages WHERE agent_id = ? AND timestamp >= ?",
vec![agent.to_string(), duration.to_rfc3339()], vec![agent.to_string(), duration.to_rfc3339()],
) )
} else { } else {