cleanup-stale-sessions.sh 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. #!/bin/bash
  2. # Cleanup stale agent sessions older than 24 hours
  3. set -e
  4. SESSIONS_DIR=".tmp/sessions"
  5. STALE_HOURS=24
  6. # Check if sessions directory exists
  7. if [ ! -d "$SESSIONS_DIR" ]; then
  8. echo "No sessions directory found at $SESSIONS_DIR"
  9. exit 0
  10. fi
  11. echo "Checking for stale sessions (older than ${STALE_HOURS} hours)..."
  12. # Find all session directories
  13. session_count=0
  14. stale_count=0
  15. for session_dir in "$SESSIONS_DIR"/*; do
  16. if [ ! -d "$session_dir" ]; then
  17. continue
  18. fi
  19. session_count=$((session_count + 1))
  20. session_id=$(basename "$session_dir")
  21. manifest="$session_dir/.manifest.json"
  22. # Check if manifest exists
  23. if [ ! -f "$manifest" ]; then
  24. echo "⚠️ Session $session_id has no manifest - removing"
  25. rm -rf "$session_dir"
  26. stale_count=$((stale_count + 1))
  27. continue
  28. fi
  29. # Get last activity timestamp
  30. last_activity=$(jq -r '.last_activity // .created_at' "$manifest" 2>/dev/null || echo "")
  31. if [ -z "$last_activity" ]; then
  32. echo "⚠️ Session $session_id has invalid manifest - removing"
  33. rm -rf "$session_dir"
  34. stale_count=$((stale_count + 1))
  35. continue
  36. fi
  37. # Calculate age in hours
  38. last_activity_epoch=$(date -j -f "%Y-%m-%dT%H:%M:%SZ" "$last_activity" "+%s" 2>/dev/null || echo "0")
  39. current_epoch=$(date "+%s")
  40. age_hours=$(( (current_epoch - last_activity_epoch) / 3600 ))
  41. if [ "$age_hours" -gt "$STALE_HOURS" ]; then
  42. echo "🗑️ Removing stale session $session_id (${age_hours}h old)"
  43. rm -rf "$session_dir"
  44. stale_count=$((stale_count + 1))
  45. else
  46. echo "✅ Session $session_id is active (${age_hours}h old)"
  47. fi
  48. done
  49. echo ""
  50. echo "Summary:"
  51. echo " Total sessions: $session_count"
  52. echo " Stale sessions removed: $stale_count"
  53. echo " Active sessions: $((session_count - stale_count))"
  54. # Remove sessions directory if empty
  55. if [ -d "$SESSIONS_DIR" ] && [ -z "$(ls -A "$SESSIONS_DIR")" ]; then
  56. echo ""
  57. echo "Sessions directory is empty - removing"
  58. rmdir "$SESSIONS_DIR"
  59. fi
  60. echo ""
  61. echo "✨ Cleanup complete!"