-
Notifications
You must be signed in to change notification settings - Fork 62
Expand file tree
/
Copy pathstats.sh
More file actions
109 lines (92 loc) · 3.33 KB
/
stats.sh
File metadata and controls
109 lines (92 loc) · 3.33 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#!/bin/bash
# Memory Stats - Professional memory architecture statistics
WORKSPACE="${OPENCLAW_WORKSPACE:-$HOME/.openclaw/workspace}"
MEMORY_DIR="$WORKSPACE/memory"
STATE_FILE="$MEMORY_DIR/.memory-manager-state.json"
echo "📊 Memory Manager - Statistics"
echo ""
# Count files and sizes by type
count_stats() {
local dir="$1"
local count=$(ls "$dir"/*.md 2>/dev/null | wc -l | tr -d ' ')
local size=$(du -sh "$dir" 2>/dev/null | cut -f1)
echo "$count|$size"
}
episodic_stats=$(count_stats "$MEMORY_DIR/episodic")
semantic_stats=$(count_stats "$MEMORY_DIR/semantic")
procedural_stats=$(count_stats "$MEMORY_DIR/procedural")
snapshots_stats=$(count_stats "$MEMORY_DIR/snapshots")
episodic_count=$(echo "$episodic_stats" | cut -d'|' -f1)
episodic_size=$(echo "$episodic_stats" | cut -d'|' -f2)
semantic_count=$(echo "$semantic_stats" | cut -d'|' -f1)
semantic_size=$(echo "$semantic_stats" | cut -d'|' -f2)
procedural_count=$(echo "$procedural_stats" | cut -d'|' -f1)
procedural_size=$(echo "$procedural_stats" | cut -d'|' -f2)
snapshots_count=$(echo "$snapshots_stats" | cut -d'|' -f1)
snapshots_size=$(echo "$snapshots_stats" | cut -d'|' -f2)
# Display breakdown
echo "## Memory Architecture Breakdown"
echo ""
echo "📅 Episodic Memory (What Happened):"
echo " Files: $episodic_count"
echo " Size: ${episodic_size:-0B}"
echo ""
echo "🧠 Semantic Memory (What You Know):"
echo " Files: $semantic_count"
echo " Size: ${semantic_size:-0B}"
echo ""
echo "⚙️ Procedural Memory (How To):"
echo " Files: $procedural_count"
echo " Size: ${procedural_size:-0B}"
echo ""
echo "💾 Snapshots (Backups):"
echo " Files: $snapshots_count"
echo " Size: ${snapshots_size:-0B}"
echo ""
# Total
total_files=$((episodic_count + semantic_count + procedural_count))
total_size=$(du -sh "$MEMORY_DIR" 2>/dev/null | cut -f1)
echo "📦 Total:"
echo " Files: $total_files"
echo " Size: ${total_size:-0B}"
echo ""
# Compression events
if [ -f "$STATE_FILE" ] && command -v jq >/dev/null 2>&1; then
warnings=$(jq -r '.warnings // 0' "$STATE_FILE")
last_check=$(jq -r '.last_check // "never"' "$STATE_FILE")
last_snapshot=$(jq -r '.last_snapshot // "never"' "$STATE_FILE")
last_organize=$(jq -r '.last_organize // "never"' "$STATE_FILE")
echo "## Activity"
echo ""
echo "Compression events: $warnings"
echo "Last check: $last_check"
echo "Last snapshot: $last_snapshot"
echo "Last organize: $last_organize"
echo ""
fi
# Growth rate (episodic entries in last 7 days)
recent_episodic=$(find "$MEMORY_DIR/episodic" -name "*.md" -mtime -7 2>/dev/null | wc -l | tr -d ' ')
echo "## Growth"
echo ""
echo "Episodic entries (last 7 days): $recent_episodic"
echo "Average: $((recent_episodic / 7)) entries/day"
echo ""
# Health check
total_chars=0
for dir in episodic semantic procedural; do
chars=$(find "$MEMORY_DIR/$dir" -name "*.md" -exec wc -c {} + 2>/dev/null | tail -1 | awk '{print $1}' || echo 0)
total_chars=$((total_chars + chars))
done
usage_pct=$((total_chars * 100 / 800000))
echo "## Memory Health"
echo ""
if [ "$usage_pct" -ge 85 ]; then
echo "Status: 🚨 CRITICAL (${usage_pct}%)"
echo "Action: Run organize.sh and snapshot.sh NOW"
elif [ "$usage_pct" -ge 70 ]; then
echo "Status: ⚠️ WARNING (${usage_pct}%)"
echo "Action: Consider running organize.sh"
else
echo "Status: ✅ Healthy (${usage_pct}%)"
echo "Action: None needed"
fi