fix: update asset logging to use serialized values and enhance asset struct with default implementation

This commit is contained in:
2026-01-11 09:54:31 +01:00
parent 62f3c49e8a
commit 28b7860c6c
3 changed files with 15 additions and 18 deletions

View File

@@ -5,8 +5,8 @@ use serde::Deserialize;
use serde_json::json; use serde_json::json;
use crate::{ use crate::{
data_mgt::AssetTracker, data_mgt::{Asset, AssetTracker},
logs::{ LogEvent, LogEventType, log_event}, logs::{LogEvent, LogEventType, log_event},
}; };
#[derive(Deserialize, Debug)] #[derive(Deserialize, Debug)]
@@ -45,8 +45,8 @@ async fn api_upload(
Some(uploader_ip.clone()), Some(uploader_ip.clone()),
); );
log_event(LogEventType::AssetUploaded(asset.clone()));
let id = asset.id(); let id = asset.id();
log_event(LogEventType::AssetUploaded(asset.to_value()));
assets.add_asset(asset).await; assets.add_asset(asset).await;
let response_body = json!({ "link": format!("/bhs/{}", id) }); let response_body = json!({ "link": format!("/bhs/{}", id) });
Ok(HttpResponse::Ok().json(response_body)) Ok(HttpResponse::Ok().json(response_body))
@@ -93,8 +93,7 @@ async fn api_stats(assets: web::Data<AssetTracker>) -> Result<HttpResponse, acti
use crate::LOG_DIR; use crate::LOG_DIR;
use std::fs; use std::fs;
let (active_assets, storage_bytes, image_count, text_count) = let (active_assets, storage_bytes, image_count, text_count) = assets.stats_summary().await;
assets.stats_summary().await;
let mut total_uploads = 0; let mut total_uploads = 0;
let mut total_deleted = 0; let mut total_deleted = 0;
@@ -110,6 +109,7 @@ async fn api_stats(assets: web::Data<AssetTracker>) -> Result<HttpResponse, acti
request_count += 1; request_count += 1;
} }
LogEventType::AssetUploaded(asset) => { LogEventType::AssetUploaded(asset) => {
let asset = serde_json::from_value::<Asset>(asset).unwrap_or_default();
total_uploads += 1; total_uploads += 1;
recent_activity.push(ActivityItem { recent_activity.push(ActivityItem {
action: "upload".to_string(), action: "upload".to_string(),
@@ -119,6 +119,7 @@ async fn api_stats(assets: web::Data<AssetTracker>) -> Result<HttpResponse, acti
}); });
} }
LogEventType::AssetDeleted(asset) => { LogEventType::AssetDeleted(asset) => {
let asset = serde_json::from_value::<Asset>(asset).unwrap_or_default();
total_deleted += 1; total_deleted += 1;
recent_activity.push(ActivityItem { recent_activity.push(ActivityItem {
action: "delete".to_string(), action: "delete".to_string(),

View File

@@ -10,7 +10,7 @@ use serde_json::Value;
use crate::DATA_STORAGE; use crate::DATA_STORAGE;
use crate::logs::{LogEventType, log_event}; use crate::logs::{LogEventType, log_event};
#[derive(Debug, Serialize, Deserialize, Clone)] #[derive(Debug, Serialize, Deserialize, Clone, Default)]
pub struct Asset { pub struct Asset {
id: String, id: String,
share_duration: u32, share_duration: u32,
@@ -83,6 +83,10 @@ impl Asset {
Ok(bytes) Ok(bytes)
} }
pub fn to_value(&self) -> Value {
serde_json::to_value(self).unwrap_or(Value::Null)
}
pub fn save(&self) -> Result<String> { pub fn save(&self) -> Result<String> {
let id = self.id.clone(); let id = self.id.clone();
let path = format!("{}{}", DATA_STORAGE, self.id); let path = format!("{}{}", DATA_STORAGE, self.id);
@@ -90,16 +94,8 @@ impl Asset {
std::fs::write(&path, self.to_bytes()?)?; std::fs::write(&path, self.to_bytes()?)?;
Ok(id) Ok(id)
} }
} }
impl From<Asset> for Value {
fn from(asset: Asset) -> Self {
serde_json::to_value(asset).unwrap()
}
}
#[derive(Clone)] #[derive(Clone)]
pub struct AssetTracker { pub struct AssetTracker {
assets: Arc<Mutex<Vec<Asset>>>, assets: Arc<Mutex<Vec<Asset>>>,
@@ -124,7 +120,7 @@ impl AssetTracker {
let removed_assets = assets.extract_if(.., |asset| asset.is_expired()); let removed_assets = assets.extract_if(.., |asset| asset.is_expired());
for asset in removed_assets { for asset in removed_assets {
println!("[{}] Removing asset: {}", chrono::Local::now().to_rfc3339(), asset.id()); println!("[{}] Removing asset: {}", chrono::Local::now().to_rfc3339(), asset.id());
log_event(LogEventType::AssetDeleted(asset)); log_event(LogEventType::AssetDeleted(asset.to_value()));
} }
} }

View File

@@ -2,10 +2,10 @@ use std::{fs::OpenOptions, io::Write};
use actix_web::HttpRequest; use actix_web::HttpRequest;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use serde_json::Value;
use crate::{LOG_DIR, data_mgt::Asset}; use crate::{LOG_DIR, data_mgt::Asset};
#[derive(Debug, Serialize, Deserialize)] #[derive(Debug, Serialize, Deserialize)]
pub struct LogHttpRequest { pub struct LogHttpRequest {
pub method: String, pub method: String,
@@ -49,8 +49,8 @@ impl From<HttpRequest> for LogHttpRequest {
#[derive(Debug, Serialize, Deserialize)] #[derive(Debug, Serialize, Deserialize)]
pub enum LogEventType { pub enum LogEventType {
AssetUploaded(Asset), AssetUploaded(Value),
AssetDeleted(Asset), AssetDeleted(Value),
HttpRequest(LogHttpRequest), HttpRequest(LogHttpRequest),
} }