SoumyaJ's picture
Upload 4 files
f9ab266 verified
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()