from fastapi import FastAPI, HTTPException from fastapi.middleware.cors import CORSMiddleware from fastapi.responses import JSONResponse from getReceiverData import analyze_telecom_data, get_summary_by_state import uvicorn import pandas as pd import numpy as np app = FastAPI() app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) def sanitize_json(data): if isinstance(data, dict): return {k: sanitize_json(v) for k, v in data.items()} elif isinstance(data, list): return [sanitize_json(v) for v in data] elif isinstance(data, (np.integer, np.int64)): return int(data) elif isinstance(data, (np.floating, np.float64)): return float(data) elif isinstance(data, (np.bool_)): return bool(data) elif pd.isna(data): return None else: return data @app.get("/api/performance-summary") def get_performance_summary(): results = analyze_telecom_data() summary_data = sanitize_json({ "summary": { "max_connected_state": results["max_connected_state"], "max_connected_state_count": results["max_connected_state_count"], "best_signal_state": results["best_signal_state"], "best_signal_avg": results["best_signal_avg"], "worst_call_drop_state": results["worst_call_drop_state"], "worst_call_drop_rate": results["worst_call_drop_rate"] }, "state_metrics": { "device_count": results["state_device_count"], "signal_strength": results["state_signal_strength"], "call_drop_rate": results["state_call_drop_rate"] }, "top_towns": { "by_device": results["top_town_by_device"], "by_signal": results["top_town_by_signal"], "by_call_drop": results["worst_town_by_call_drop"] }, "town_summary": results["town_summary"] }) return summary_data @app.get("/api/summary-by-state/{state_name}") def get_state_summary(state_name): result = get_summary_by_state(state_name) json_data = sanitize_json(result.to_dict(orient='records')) return {"town_summary": json_data} if __name__ == "__main__": uvicorn.run(app, host="0.0.0.0", port=8000) #get_telecom_summary()