diff --git a/protocols/api_health_checker.py b/protocols/api_health_checker.py index 647c1b1..9fb0baa 100644 --- a/protocols/api_health_checker.py +++ b/protocols/api_health_checker.py @@ -1,47 +1,25 @@ -# Real Protocol: API Health Checker import requests -import time +from requests.exceptions import RequestException, Timeout, ConnectionError -def task(): - """Check health of various API endpoints""" - endpoints = [ - {'name': 'Local API', 'url': 'http://localhost:8080/health'}, - {'name': 'JSONPlaceholder', 'url': 'https://jsonplaceholder.typicode.com/posts/1'}, - {'name': 'GitHub API', 'url': 'https://api.github.com/rate_limit'} - ] - - results = [] - failures = 0 - - for endpoint in endpoints: +def task(protocol_context): + """ + Checks the health of a list of API endpoints. + """ + api_endpoints = protocol_context.get("api_endpoints") + if not api_endpoints: + return {"status": "error", "message": "No API endpoints provided in the protocol context."} + + results = {} + for endpoint in api_endpoints: try: - start_time = time.time() - response = requests.get(endpoint['url'], timeout=5) - response_time = (time.time() - start_time) * 1000 # ms - - results.append({ - 'name': endpoint['name'], - 'status': response.status_code, - 'response_time_ms': round(response_time, 2), - 'healthy': response.status_code == 200 - }) - - if response.status_code != 200: - failures += 1 - - except Exception as e: - failures += 1 - results.append({ - 'name': endpoint['name'], - 'error': str(e), - 'healthy': False - }) - - return { - 'success': failures < len(endpoints) / 2, # Success if less than half failed - 'action': 'api_health_check', - 'total_endpoints': len(endpoints), - 'healthy_count': len(endpoints) - failures, - 'failure_count': failures, - 'results': results - } \ No newline at end of file + response = requests.get(endpoint, timeout=10) + response.raise_for_status() # Raise an exception for bad status codes + results[endpoint] = {"status": "ok", "statusCode": response.status_code} + except Timeout: + results[endpoint] = {"status": "error", "message": "Request timed out"} + except ConnectionError: + results[endpoint] = {"status": "error", "message": "Could not connect to the server"} + except RequestException as e: + results[endpoint] = {"status": "error", "message": str(e)} + + return {"status": "completed", "results": results}