84 lines
2.0 KiB
Bash
Executable File
84 lines
2.0 KiB
Bash
Executable File
#!/bin/zsh
|
|
#
|
|
# Alert Processor for Security Monitors
|
|
# Reads from alerts.queue and delivers via Telegram
|
|
# This script is called by the monitors to process pending alerts
|
|
#
|
|
|
|
QUEUE_FILE="/Users/mattbruce/.openclaw/workspace/scripts/security-monitors/state/alerts.queue"
|
|
LOG_FILE="/Users/mattbruce/.openclaw/workspace/scripts/security-monitors/logs/alert-processor.log"
|
|
PROCESSED_FILE="/Users/mattbruce/.openclaw/workspace/scripts/security-monitors/state/alerts-processed"
|
|
|
|
# Create directories
|
|
mkdir -p "$(dirname $LOG_FILE)" "$(dirname $QUEUE_FILE)"
|
|
|
|
# Timestamp helper
|
|
timestamp() {
|
|
date '+%Y-%m-%d %H:%M:%S %Z'
|
|
}
|
|
|
|
# Log to file
|
|
log() {
|
|
echo "[$(timestamp)] $1" >> "$LOG_FILE"
|
|
}
|
|
|
|
# Process a single alert
|
|
process_alert() {
|
|
local line="$1"
|
|
|
|
# Parse the queue entry
|
|
local time_part=$(echo "$line" | cut -d'|' -f1 | tr -d ' ')
|
|
local level=$(echo "$line" | cut -d'|' -f2 | tr -d ' ')
|
|
local type=$(echo "$line" | cut -d'|' -f3 | tr -d ' ')
|
|
local message=$(echo "$line" | cut -d'|' -f4-)
|
|
|
|
# Format the message for Telegram
|
|
local formatted_msg="🤖 *OpenClaw Security Alert*
|
|
|
|
*Type:* ${type:-GENERAL}
|
|
*Level:* ${level:-INFO}
|
|
*Time:* $time_part
|
|
|
|
$message"
|
|
|
|
# Write to processed log
|
|
echo "$(timestamp) | PROCESSED | $line" >> "$PROCESSED_FILE"
|
|
|
|
# Output for Telegram delivery
|
|
# The calling agent can pick this up
|
|
echo "$formatted_msg"
|
|
|
|
log "Processed $level alert: ${message:0:50}..."
|
|
}
|
|
|
|
# Main processing
|
|
main() {
|
|
if [[ ! -f "$QUEUE_FILE" ]]; then
|
|
# No alerts pending
|
|
exit 0
|
|
fi
|
|
|
|
# Check if queue has content
|
|
if [[ ! -s "$QUEUE_FILE" ]]; then
|
|
exit 0
|
|
fi
|
|
|
|
log "Processing alert queue..."
|
|
|
|
# Process each line
|
|
local alerts_processed=0
|
|
while IFS= read -r line; do
|
|
[[ -z "$line" ]] && continue
|
|
process_alert "$line"
|
|
alerts_processed=$((alerts_processed + 1))
|
|
done < "$QUEUE_FILE"
|
|
|
|
# Clear the queue after processing
|
|
> "$QUEUE_FILE"
|
|
|
|
log "Processed $alerts_processed alerts"
|
|
}
|
|
|
|
# Run main function
|
|
main "$@"
|