-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcron-tasks.sh
More file actions
196 lines (155 loc) · 6 KB
/
cron-tasks.sh
File metadata and controls
196 lines (155 loc) · 6 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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
#!/bin/bash
# Soulfield OS Automated Tasks
# Add to crontab with: crontab -e
#
# Recommended cron schedule:
# 0 0 * * 0 /home/michael/soulfield/cron-tasks.sh weekly # Weekly on Sunday midnight
# 0 0 1 * * /home/michael/soulfield/cron-tasks.sh monthly # Monthly on 1st midnight
# 0 */6 * * * /home/michael/soulfield/cron-tasks.sh metrics # Every 6 hours
# 0 2 * * * /home/michael/soulfield/cron-tasks.sh backup # Daily at 2 AM
set -e
SOULFIELD_DIR="/home/michael/soulfield"
TASK_TYPE="${1:-daily}"
LOG_DIR="$SOULFIELD_DIR/logs/cron"
TIMESTAMP=$(date +"%Y-%m-%d-%H%M%S")
# Create log directory
mkdir -p "$LOG_DIR"
# Log file
LOG_FILE="$LOG_DIR/cron-$TASK_TYPE-$TIMESTAMP.log"
# Redirect all output to log file
exec > >(tee -a "$LOG_FILE") 2>&1
echo "======================================"
echo "Soulfield OS Automated Tasks"
echo "Task Type: $TASK_TYPE"
echo "Timestamp: $TIMESTAMP"
echo "======================================"
echo ""
cd "$SOULFIELD_DIR"
case "$TASK_TYPE" in
metrics)
echo "[METRICS] Generating metrics summary..."
node backend/scripts/metrics-summarizer.cjs --period=daily --logfile=/tmp/soulfield-server.log
echo "[METRICS] Complete"
;;
weekly)
echo "[WEEKLY] Running weekly tasks..."
# 1. Generate weekly metrics
echo " - Generating weekly metrics..."
node backend/scripts/metrics-summarizer.cjs --period=weekly --json > "logs/metrics-weekly-$TIMESTAMP.json"
# 2. Extract knowledge from archived docs
echo " - Extracting knowledge from archives..."
if [ -f "tools/extract-knowledge.cjs" ]; then
node tools/extract-knowledge.cjs --incremental --source=workspace/archive-unified
else
echo " Warning: extract-knowledge.cjs not found"
fi
# 3. Update reference files
echo " - Updating reference files..."
if [ -f "tools/update-reference-skeletons.cjs" ]; then
node tools/update-reference-skeletons.cjs
fi
# 4. Backup Obsidian vault
echo " - Backing up Obsidian vault..."
BACKUP_DIR="$HOME/backups/soulfield"
mkdir -p "$BACKUP_DIR"
tar -czf "$BACKUP_DIR/obsidian-vault-$TIMESTAMP.tar.gz" \
workspace/docs/Obsidian/ \
--exclude="workspace/docs/Obsidian/.obsidian/workspace*" \
--exclude="workspace/docs/Obsidian/.trash"
# Keep only last 4 weekly backups
ls -t "$BACKUP_DIR"/obsidian-vault-*.tar.gz | tail -n +5 | xargs -r rm
echo "[WEEKLY] Complete"
;;
monthly)
echo "[MONTHLY] Running monthly tasks..."
# 1. Generate monthly metrics
echo " - Generating monthly metrics..."
node backend/scripts/metrics-summarizer.cjs --period=monthly --json > "logs/metrics-monthly-$TIMESTAMP.json"
# 2. Full knowledge extraction (not incremental)
echo " - Full knowledge extraction..."
if [ -f "tools/extract-knowledge.cjs" ]; then
node tools/extract-knowledge.cjs --source=workspace/archive-unified
fi
# 3. Supabase backup
echo " - Backing up Supabase data..."
if [ -f "backend/scripts/backup-supabase.cjs" ]; then
node backend/scripts/backup-supabase.cjs --output="backups/supabase-$TIMESTAMP.sql"
else
echo " Warning: backup-supabase.cjs not found"
fi
# 4. Agent performance report
echo " - Generating agent performance report..."
if [ -f "backend/scripts/agent-performance-report.cjs" ]; then
node backend/scripts/agent-performance-report.cjs --period=month > "logs/agent-report-$TIMESTAMP.txt"
fi
# 5. Cleanup old logs (keep last 3 months)
echo " - Cleaning up old logs..."
find logs/ -type f -name "*.log" -mtime +90 -delete
find logs/ -type f -name "*.json" -mtime +90 -delete
echo "[MONTHLY] Complete"
;;
backup)
echo "[BACKUP] Running daily backups..."
# 1. Obsidian daily snapshot
BACKUP_DIR="$HOME/backups/soulfield/daily"
mkdir -p "$BACKUP_DIR"
echo " - Snapshotting Obsidian vault..."
tar -czf "$BACKUP_DIR/obsidian-$TIMESTAMP.tar.gz" workspace/docs/Obsidian/
# Keep only last 7 daily backups
ls -t "$BACKUP_DIR"/obsidian-*.tar.gz | tail -n +8 | xargs -r rm
# 2. Agent workspace backup
echo " - Backing up agent workspace..."
tar -czf "$BACKUP_DIR/agent-workspace-$TIMESTAMP.tar.gz" workspace/agent-workspace/
# Keep only last 7 daily backups
ls -t "$BACKUP_DIR"/agent-workspace-*.tar.gz | tail -n +8 | xargs -r rm
# 3. Supabase incremental backup (if available)
echo " - Supabase incremental backup..."
# TODO: Implement Supabase backup strategy
echo "[BACKUP] Complete"
;;
healthcheck)
echo "[HEALTHCHECK] Checking system health..."
# 1. Check if server is running
echo " - Checking server status..."
if curl -s http://localhost:8790/health > /dev/null; then
echo " ✓ Server is running"
else
echo " ✗ Server is NOT running!"
# Optionally restart
# pm2 restart soulfield-os
fi
# 2. Check disk space
echo " - Checking disk space..."
DISK_USAGE=$(df -h "$SOULFIELD_DIR" | tail -1 | awk '{print $5}' | tr -d '%')
if [ "$DISK_USAGE" -gt 80 ]; then
echo " ⚠ Disk usage is high: ${DISK_USAGE}%"
else
echo " ✓ Disk usage is OK: ${DISK_USAGE}%"
fi
# 3. Check memory usage
echo " - Checking memory usage..."
MEM_USAGE=$(free | grep Mem | awk '{print ($3/$2) * 100.0}' | cut -d. -f1)
if [ "$MEM_USAGE" -gt 85 ]; then
echo " ⚠ Memory usage is high: ${MEM_USAGE}%"
else
echo " ✓ Memory usage is OK: ${MEM_USAGE}%"
fi
# 4. Check log file size
echo " - Checking log file sizes..."
LOG_SIZE=$(du -sh logs/ | awk '{print $1}')
echo " Log directory size: $LOG_SIZE"
echo "[HEALTHCHECK] Complete"
;;
*)
echo "Usage: $0 {metrics|weekly|monthly|backup|healthcheck}"
exit 1
;;
esac
echo ""
echo "======================================"
echo "Task completed: $TASK_TYPE"
echo "Log file: $LOG_FILE"
echo "======================================"
# Cleanup old cron logs (keep last 30 days)
find "$LOG_DIR" -type f -name "cron-*.log" -mtime +30 -delete
exit 0