- Changed NetworkName from 'chorus_default' to 'chorus_net' - This matches the actual network 'CHORUS_chorus_net' (service prefix added automatically) - Fixes discovered_count:0 issue - now successfully discovering all 25 agents - Updated IMPLEMENTATION-SUMMARY with deployment status Result: All 25 CHORUS agents now discovered successfully via Docker Swarm API 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
145 lines
4.3 KiB
Python
Executable File
145 lines
4.3 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
"""
|
|
Quick Health Check for WHOOSH Council System
|
|
|
|
Performs rapid health checks on WHOOSH and CHORUS services.
|
|
Useful for monitoring and CI/CD pipelines.
|
|
|
|
Usage:
|
|
python quick_health_check.py
|
|
python quick_health_check.py --json # JSON output for monitoring tools
|
|
"""
|
|
|
|
import requests
|
|
import sys
|
|
import argparse
|
|
import json
|
|
from datetime import datetime
|
|
|
|
|
|
def check_whoosh(url: str = "http://localhost:8800") -> dict:
|
|
"""Check WHOOSH API health"""
|
|
try:
|
|
response = requests.get(f"{url}/api/health", timeout=5)
|
|
return {
|
|
"service": "WHOOSH",
|
|
"status": "healthy" if response.status_code == 200 else "unhealthy",
|
|
"status_code": response.status_code,
|
|
"url": url,
|
|
"error": None
|
|
}
|
|
except Exception as e:
|
|
return {
|
|
"service": "WHOOSH",
|
|
"status": "unreachable",
|
|
"status_code": None,
|
|
"url": url,
|
|
"error": str(e)
|
|
}
|
|
|
|
|
|
def check_project_count(url: str = "http://localhost:8800") -> dict:
|
|
"""Check how many projects exist"""
|
|
try:
|
|
headers = {"Authorization": "Bearer dev-token"}
|
|
response = requests.get(f"{url}/api/v1/projects", headers=headers, timeout=5)
|
|
|
|
if response.status_code == 200:
|
|
data = response.json()
|
|
projects = data.get("projects", [])
|
|
return {
|
|
"metric": "projects",
|
|
"count": len(projects),
|
|
"status": "ok",
|
|
"error": None
|
|
}
|
|
else:
|
|
return {
|
|
"metric": "projects",
|
|
"count": 0,
|
|
"status": "error",
|
|
"error": f"HTTP {response.status_code}"
|
|
}
|
|
except Exception as e:
|
|
return {
|
|
"metric": "projects",
|
|
"count": 0,
|
|
"status": "error",
|
|
"error": str(e)
|
|
}
|
|
|
|
|
|
def check_p2p_discovery(url: str = "http://localhost:8800") -> dict:
|
|
"""Check P2P discovery is finding agents"""
|
|
# Note: This would require a dedicated endpoint
|
|
# For now, we'll return a placeholder
|
|
return {
|
|
"metric": "p2p_discovery",
|
|
"status": "not_implemented",
|
|
"note": "Add /api/v1/p2p/agents endpoint to WHOOSH"
|
|
}
|
|
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser(description="Quick health check for WHOOSH")
|
|
parser.add_argument("--whoosh-url", default="http://localhost:8800",
|
|
help="WHOOSH base URL")
|
|
parser.add_argument("--json", action="store_true",
|
|
help="Output JSON for monitoring tools")
|
|
|
|
args = parser.parse_args()
|
|
|
|
# Perform checks
|
|
results = {
|
|
"timestamp": datetime.now().isoformat(),
|
|
"checks": {
|
|
"whoosh": check_whoosh(args.whoosh_url),
|
|
"projects": check_project_count(args.whoosh_url),
|
|
"p2p": check_p2p_discovery(args.whoosh_url)
|
|
}
|
|
}
|
|
|
|
# Calculate overall health
|
|
whoosh_healthy = results["checks"]["whoosh"]["status"] == "healthy"
|
|
projects_ok = results["checks"]["projects"]["status"] == "ok"
|
|
|
|
results["overall_status"] = "healthy" if whoosh_healthy and projects_ok else "degraded"
|
|
|
|
if args.json:
|
|
# JSON output for monitoring
|
|
print(json.dumps(results, indent=2))
|
|
sys.exit(0 if results["overall_status"] == "healthy" else 1)
|
|
else:
|
|
# Human-readable output
|
|
print("="*60)
|
|
print("WHOOSH SYSTEM HEALTH CHECK")
|
|
print("="*60)
|
|
print(f"Timestamp: {results['timestamp']}\n")
|
|
|
|
# WHOOSH Service
|
|
whoosh = results["checks"]["whoosh"]
|
|
status_symbol = "✓" if whoosh["status"] == "healthy" else "✗"
|
|
print(f"{status_symbol} WHOOSH API: {whoosh['status']}")
|
|
if whoosh["error"]:
|
|
print(f" Error: {whoosh['error']}")
|
|
print(f" URL: {whoosh['url']}\n")
|
|
|
|
# Projects
|
|
projects = results["checks"]["projects"]
|
|
print(f"📊 Projects: {projects['count']}")
|
|
if projects["error"]:
|
|
print(f" Error: {projects['error']}")
|
|
print()
|
|
|
|
# Overall
|
|
print("="*60)
|
|
overall = results["overall_status"]
|
|
print(f"Overall Status: {overall.upper()}")
|
|
print("="*60)
|
|
|
|
sys.exit(0 if overall == "healthy" else 1)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|