File size: 1,210 Bytes
35ae1e9
 
 
 
 
b51df68
 
 
 
 
 
 
 
 
 
 
 
35ae1e9
 
 
 
b51df68
 
 
 
 
35ae1e9
b51df68
 
 
35ae1e9
 
 
b51df68
35ae1e9
 
b51df68
 
35ae1e9
 
b51df68
 
35ae1e9
 
b51df68
 
 
 
35ae1e9
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
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",
    }