feat(server): persist activity history on the server and expose it to the dashboard UI via /api/activity instead of relying on fragile localStorage
This commit is contained in:
1 parent
bf7bf48163
commit
ae0ea9ab22
4 files changed
+83
-41
No files matched your search
+19
-1
@@ -27,6 +27,7 @@ pub struct MemoryState {
|
||||
pub tech_debts: Store<Vec<TechDebt>>,
|
||||
pub gates: Store<Vec<GateRecord>>,
|
||||
pub context_workspaces: Store<Vec<ContextWorkspace>>,
|
||||
pub recent_activities: Store<std::collections::VecDeque<serde_json::Value>>,
|
||||
pub activity_tx: tokio::sync::broadcast::Sender<String>,
|
||||
}
|
||||
|
||||
@@ -37,9 +38,26 @@ impl MemoryState {
|
||||
}
|
||||
|
||||
pub fn broadcast_activity(&self, message: &str) {
|
||||
let time = std::time::SystemTime::now()
|
||||
.duration_since(std::time::UNIX_EPOCH)
|
||||
.unwrap_or_default()
|
||||
.as_millis() as u64;
|
||||
|
||||
let item = serde_json::json!({
|
||||
"time": time,
|
||||
"message": message
|
||||
});
|
||||
|
||||
self.recent_activities.modify(|activities| {
|
||||
activities.push_back(item.clone());
|
||||
if activities.len() > 100 {
|
||||
activities.pop_front();
|
||||
}
|
||||
});
|
||||
|
||||
let payload = serde_json::json!({
|
||||
"type": "activity",
|
||||
"data": message
|
||||
"data": item
|
||||
})
|
||||
.to_string();
|
||||
let _ = self.activity_tx.send(payload);
|
||||
|
||||
Reference in new issue
Block a user