275 lines
8.3 KiB
JSON
275 lines
8.3 KiB
JSON
{
|
|
"agentName": "Agent99",
|
|
"agentRoot": "C:\\Wooo\\Agent99",
|
|
"sshUser": "wooo",
|
|
"sshUsers": {
|
|
"192.168.0.112": "kali",
|
|
"192.168.0.188": "ollama"
|
|
},
|
|
"vmrunPath": "C:\\Program Files (x86)\\VMware\\VMware Workstation\\vmrun.exe",
|
|
"hosts": [
|
|
"192.168.0.110",
|
|
"192.168.0.112",
|
|
"192.168.0.120",
|
|
"192.168.0.121",
|
|
"192.168.0.188"
|
|
],
|
|
"vms": [
|
|
{
|
|
"name": "host110-devops",
|
|
"host": "192.168.0.110",
|
|
"vmx": "D:\\Documents\\Virtual Machines\\Ubuntu 64-bit (3)\\Ubuntu 64-bit (3).vmx",
|
|
"priority": 10
|
|
},
|
|
{
|
|
"name": "host188-ai",
|
|
"host": "192.168.0.188",
|
|
"vmx": "D:\\Documents\\Virtual Machines\\Ollama_Ubuntu_64-bit\\Ollama_Ubuntu_64-bit.vmx",
|
|
"priority": 20
|
|
},
|
|
{
|
|
"name": "host112-kali",
|
|
"host": "192.168.0.112",
|
|
"vmx": "D:\\Downloads\\kali-linux-2025.4-vmware-amd64\\kali-linux-2025.4-vmware-amd64.vmwarevm\\kali-linux-2025.4-vmware-amd64.vmx",
|
|
"priority": 30
|
|
},
|
|
{
|
|
"name": "host120-k3s",
|
|
"host": "192.168.0.120",
|
|
"vmx": "D:\\Documents\\Virtual Machines\\192.168.0.120_Ubuntu_64-bit\\192.168.0.120_Ubuntu_64-bit.vmx",
|
|
"priority": 40
|
|
},
|
|
{
|
|
"name": "host121-k3s",
|
|
"host": "192.168.0.121",
|
|
"vmx": "D:\\Documents\\Virtual Machines\\192.168.0.121_Ubuntu_64-bit\\192.168.0.121_Ubuntu_64-bit.vmx",
|
|
"priority": 50
|
|
}
|
|
],
|
|
"k3s": {
|
|
"jumpHost": "192.168.0.110",
|
|
"primary": "192.168.0.120",
|
|
"namespace": "awoooi-prod"
|
|
},
|
|
"publicUrls": [
|
|
"awoooi.wooo.work",
|
|
"stock.wooo.work",
|
|
"2026fifa.wooo.work",
|
|
"gitea.wooo.work",
|
|
"harbor.wooo.work"
|
|
],
|
|
"aiServices": [
|
|
{
|
|
"name": "openclaw",
|
|
"url": "http://192.168.0.188:8088/health",
|
|
"host": "192.168.0.188",
|
|
"expectedStatus": "healthy",
|
|
"critical": true
|
|
}
|
|
],
|
|
"providerFreshness": {
|
|
"enabled": true,
|
|
"lookbackMinutes": 120,
|
|
"targets": [
|
|
{
|
|
"name": "provider_freshness_signal",
|
|
"providerWindowMinutes": null,
|
|
"directReference": null,
|
|
"verifier": "agent99-provider-freshness-triage"
|
|
}
|
|
]
|
|
},
|
|
"sreAlertRelay": {
|
|
"enabled": true,
|
|
"prefix": "http://+:8787/agent99/sre-alert/",
|
|
"tokenEnv": "AGENT99_SRE_RELAY_TOKEN",
|
|
"allowedRemotePrefixes": [
|
|
"127.",
|
|
"::1",
|
|
"192.168.0."
|
|
]
|
|
},
|
|
"telegram": {
|
|
"enabled": true,
|
|
"botTokenEnv": "AGENT99_TELEGRAM_BOT_TOKEN",
|
|
"chatIdEnv": "AGENT99_TELEGRAM_CHAT_ID",
|
|
"botTokenEnvAliases": [
|
|
"AWOOOI_TG_BOT_TOKEN",
|
|
"OPENCLAW_TG_BOT_TOKEN",
|
|
"TELEGRAM_BOT_TOKEN",
|
|
"TELEGRAM_TOKEN",
|
|
"TG_BOT_TOKEN",
|
|
"AIDER_WATCH_TELEGRAM_TOKEN"
|
|
],
|
|
"chatIdEnvAliases": [
|
|
"TELEGRAM_CHAT_ID",
|
|
"TELEGRAM_ALERT_CHAT_ID",
|
|
"TELEGRAM_P0_CHAT_ID",
|
|
"TELEGRAM_SECURITY_CHAT_ID",
|
|
"OPENCLAW_TG_CHAT_ID",
|
|
"TG_CHAT_ID",
|
|
"AIDER_WATCH_TELEGRAM_CHAT_ID"
|
|
],
|
|
"relay": {
|
|
"enabled": true,
|
|
"host": "192.168.0.110",
|
|
"container": "stockplatform-v2-api-1"
|
|
},
|
|
"allowedCommandChatTitlePattern": "AwoooI SRE|AWOOOI SRE|SRE",
|
|
"autoIngestMonitoringAlerts": true,
|
|
"alertAllOperations": false,
|
|
"alertInfoEvents": false,
|
|
"alertOperatorCommands": true,
|
|
"alertSreCommandResults": true,
|
|
"dedupeMinutes": 30
|
|
},
|
|
"performance": {
|
|
"enabled": true,
|
|
"intervalMinutes": 1,
|
|
"loadPerCoreWarning": 0.9,
|
|
"loadPerCoreCritical": 1.5,
|
|
"memoryAvailablePercentCritical": 10,
|
|
"diskUsedPercentWarning": 90,
|
|
"diskUsedPercentCritical": 95,
|
|
"captureTopCpuOnWarning": true,
|
|
"topCpuTimeoutSeconds": 10,
|
|
"loadShedding": {
|
|
"enabled": true,
|
|
"actions": [
|
|
{
|
|
"name": "prune-188-docker-build-cache-disk-pressure",
|
|
"host": "192.168.0.188",
|
|
"command": "echo BEFORE_DF=$(df -P / | awk 'NR==2{print $5}'); docker system df; docker builder prune -af --filter until=24h; echo AFTER_DF=$(df -P / | awk 'NR==2{print $5}'); docker system df",
|
|
"timeoutSeconds": 240,
|
|
"postVerifyCommand": "df -P / | awk 'NR==2{gsub(\"%\",\"\",$5); print \"__DISK_USED__=\"$5}'",
|
|
"postVerifyMaxDiskUsedPercent": 89,
|
|
"rollback": "echo rollback_not_applicable_for_build_cache_prune",
|
|
"cooldownMinutes": 120,
|
|
"minSeverity": "warning",
|
|
"reasonMatches": [
|
|
"disk_used_warning",
|
|
"disk_used_high"
|
|
],
|
|
"enabled": true
|
|
},
|
|
{
|
|
"name": "stop-110-runaway-alpine-tar-data",
|
|
"host": "192.168.0.110",
|
|
"command": "ids=$(docker ps --filter ancestor=alpine --format '{{.ID}} {{.Command}}' | awk '/tar czf - \\/data/ {print $1}'); [ -z \"$ids\" ] && exit 0; for id in $ids; do docker stop \"$id\"; done",
|
|
"rollback": "echo manual_review_required_for_stopped_runaway_container",
|
|
"cooldownMinutes": 10,
|
|
"minSeverity": "warning",
|
|
"reasonMatches": [
|
|
"load_per_core_warning",
|
|
"load_per_core_critical"
|
|
],
|
|
"enabled": true
|
|
},
|
|
{
|
|
"name": "renice-110-awoooi-backup-pressure",
|
|
"host": "192.168.0.110",
|
|
"command": "pids=$(ps -eo pid,args | awk '/backup\\/scripts\\/backup-awoooi\\.sh|gzip -c|pg_dump --no-password/ && !/awk/ {print $1}'); [ -z \"$pids\" ] && exit 0; for p in $pids; do sudo -n renice -n 15 -p $p >/dev/null 2>&1 || true; sudo -n ionice -c2 -n7 -p $p >/dev/null 2>&1 || true; done; ps -o pid,ni,pri,comm,args -p $pids",
|
|
"rollback": "pids=$(ps -eo pid,args | awk '/backup\\/scripts\\/backup-awoooi\\.sh|gzip -c|pg_dump --no-password/ && !/awk/ {print $1}'); [ -z \"$pids\" ] && exit 0; for p in $pids; do sudo -n renice -n 0 -p $p >/dev/null 2>&1 || true; sudo -n ionice -c2 -n4 -p $p >/dev/null 2>&1 || true; done",
|
|
"cooldownMinutes": 15,
|
|
"minSeverity": "warning",
|
|
"reasonMatches": [
|
|
"load_per_core_warning",
|
|
"load_per_core_critical"
|
|
],
|
|
"enabled": true
|
|
},
|
|
{
|
|
"name": "pause-110-ci-runner-pressure",
|
|
"host": "192.168.0.110",
|
|
"command": "docker pause vibework-dedicated-runner",
|
|
"rollback": "docker unpause vibework-dedicated-runner",
|
|
"cooldownMinutes": 30,
|
|
"reasonMatches": [
|
|
"load_per_core_critical"
|
|
],
|
|
"enabled": true
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"selfHealth": {
|
|
"scheduledTasks": [
|
|
"Wooo-Agent99-Startup-Recovery",
|
|
"Wooo-Agent99-Heartbeat",
|
|
"Wooo-Agent99-Performance-Guard",
|
|
"Wooo-Agent99-Control-Loop",
|
|
"Wooo-Agent99-Telegram-Inbox",
|
|
"Wooo-Agent99-SRE-Alert-Inbox",
|
|
"Wooo-Agent99-SRE-Alert-Relay",
|
|
"Wooo-Agent99-Self-Health",
|
|
"Wooo-Agent99-Backup-Health"
|
|
],
|
|
"requiredHosts": [
|
|
"192.168.0.110",
|
|
"192.168.0.112",
|
|
"192.168.0.120",
|
|
"192.168.0.121",
|
|
"192.168.0.188"
|
|
],
|
|
"requireRecentTelegramDelivery": true,
|
|
"telegramDeliveryLookbackMinutes": 60,
|
|
"evidenceFreshness": [
|
|
{
|
|
"name": "performance_guard",
|
|
"pattern": "agent99-Perf-*.json",
|
|
"maxAgeMinutes": 5,
|
|
"required": true
|
|
},
|
|
{
|
|
"name": "heartbeat_status",
|
|
"pattern": "agent99-Status-*.json",
|
|
"maxAgeMinutes": 15,
|
|
"required": true
|
|
},
|
|
{
|
|
"name": "self_health",
|
|
"pattern": "agent99-SelfCheck-*.json",
|
|
"maxAgeMinutes": 15,
|
|
"required": false
|
|
},
|
|
{
|
|
"name": "backup_health",
|
|
"pattern": "agent99-BackupCheck-*.json",
|
|
"maxAgeMinutes": 30,
|
|
"required": false
|
|
},
|
|
{
|
|
"name": "startup_recovery",
|
|
"pattern": "agent99-Recover-*.json",
|
|
"maxAgeMinutes": 1440,
|
|
"required": false
|
|
},
|
|
{
|
|
"name": "telegram_inbox",
|
|
"pattern": "agent99-TelegramInbox-*.json",
|
|
"maxAgeMinutes": 15,
|
|
"required": false
|
|
},
|
|
{
|
|
"name": "sre_alert_inbox",
|
|
"pattern": "agent99-SreAlertInbox-*.json",
|
|
"maxAgeMinutes": 15,
|
|
"required": false
|
|
},
|
|
{
|
|
"name": "sre_alert_relay",
|
|
"pattern": "agent99-SreAlertRelay-start-*.json",
|
|
"maxAgeMinutes": 1440,
|
|
"required": false
|
|
}
|
|
]
|
|
},
|
|
"backupHealth": {
|
|
"host": "192.168.0.110",
|
|
"snapshotReadTimeoutSeconds": 90,
|
|
"targets": [],
|
|
"fileChecks": [],
|
|
"cronPatterns": []
|
|
}
|
|
}
|