from fastapi import FastAPI, UploadFile, File import pandas as pd import joblib from io import BytesIO app = FastAPI(title="Detecção de Anomalias JMeter") MODEL_PATH = "modelo_anomalia.pkl" # Carrega o modelo na inicialização model = joblib.load(MODEL_PATH) def preprocess(df): if df["success"].dtype == object: df["success"] = df["success"].map(lambda x: 1 if str(x).lower() == "true" else 0) return df[["elapsed", "success"]] @app.get("/") def home(): return { "status": "online", "msg": "API de detecção de anomalias está funcionando!", "rota_upload": "/upload" } @app.post("/upload") async def classify(file: UploadFile = File(...)): content = await file.read() df = pd.read_csv(BytesIO(content)) X = preprocess(df) preds = model.predict(X) df["anomalia"] = preds percent_anom = (preds == -1).mean() * 100 alerta = percent_anom > 5 return { "total": len(df), "anomalias": int((preds == -1).sum()), "percentual_anomalias": percent_anom, "alerta": alerta, "limite": "Ultrapassado (>5%)" if alerta else "Normal", }