|
|
|
|
|
import asyncio |
|
|
import pandas as pd |
|
|
import random |
|
|
import os |
|
|
import httpx |
|
|
|
|
|
API_URL = "http://localhost:8000/predict" |
|
|
SOURCE_DATA = "data/processed/current_data.csv" |
|
|
|
|
|
MIN_SLEEP = 2 |
|
|
MAX_SLEEP = 8 |
|
|
MIN_BATCH = 1 |
|
|
MAX_BATCH = 5 |
|
|
STARTUP_DELAY = 7 |
|
|
|
|
|
async def traffic_loop(): |
|
|
await asyncio.sleep(STARTUP_DELAY) |
|
|
|
|
|
if not os.path.exists(SOURCE_DATA): |
|
|
print("Traffic daemon: source data not found, disabled.") |
|
|
return |
|
|
|
|
|
df = pd.read_csv(SOURCE_DATA) |
|
|
print("Traffic daemon started.") |
|
|
|
|
|
async with httpx.AsyncClient(timeout=60.0) as client: |
|
|
while True: |
|
|
try: |
|
|
batch_size = random.randint(MIN_BATCH, MAX_BATCH) |
|
|
sample = df.sample(batch_size) |
|
|
csv_bytes = sample.to_csv(index=False).encode("utf-8") |
|
|
|
|
|
resp = await client.post( |
|
|
API_URL, |
|
|
files={"file": ("sample.csv", csv_bytes, "text/csv")} |
|
|
) |
|
|
|
|
|
if resp.status_code != 200: |
|
|
print("Traffic daemon warning:", resp.status_code) |
|
|
|
|
|
except Exception as e: |
|
|
print("Traffic daemon error:", e) |
|
|
|
|
|
await asyncio.sleep(random.uniform(MIN_SLEEP, MAX_SLEEP)) |
|
|
|