test-repo/scripts/security-monitors/alert-processor.sh

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 "$@"