72 lines
1.8 KiB
Python
Executable File
72 lines
1.8 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
import subprocess
|
|
import json
|
|
import time
|
|
import statistics
|
|
|
|
BROKER = "77.37.69.84"
|
|
TOPIC = "cozinha"
|
|
DURATION = 120 # 2 minutos
|
|
|
|
print("=== Teste de Latência MQTT ===")
|
|
print(f"Broker: {BROKER} | Tópico: {TOPIC}")
|
|
print(f"Capturando por {DURATION}s...")
|
|
print("")
|
|
|
|
latencies = []
|
|
errors = 0
|
|
|
|
try:
|
|
proc = subprocess.Popen(
|
|
["mosquitto_sub", "-h", BROKER, "-t", TOPIC],
|
|
stdout=subprocess.PIPE,
|
|
stderr=subprocess.DEVNULL,
|
|
text=True,
|
|
bufsize=1
|
|
)
|
|
|
|
start_time = time.time()
|
|
|
|
while time.time() - start_time < DURATION:
|
|
try:
|
|
msg = proc.stdout.readline()
|
|
if not msg:
|
|
break
|
|
|
|
# Parse JSON
|
|
data = json.loads(msg)
|
|
ts = data.get("ts")
|
|
|
|
if ts is None:
|
|
errors += 1
|
|
continue
|
|
|
|
# Calculate latency
|
|
received_ns = int(time.time_ns())
|
|
latency_ms = (received_ns - ts) / 1_000_000
|
|
|
|
if 0 < latency_ms < 5000:
|
|
latencies.append(latency_ms)
|
|
print(f"✓ {latency_ms:.1f}ms")
|
|
else:
|
|
print(f"✗ {latency_ms:.1f}ms (anômalo)")
|
|
|
|
except (json.JSONDecodeError, ValueError, KeyError):
|
|
errors += 1
|
|
|
|
proc.terminate()
|
|
|
|
except Exception as e:
|
|
print(f"Erro: {e}")
|
|
exit(1)
|
|
|
|
print("")
|
|
print("=== Estatísticas ===")
|
|
total = len(latencies) + errors
|
|
print(f"Total: {total} | Válidas: {len(latencies)} | Erros: {errors}")
|
|
|
|
if latencies:
|
|
print(f"Latência mín/máx/média: {min(latencies):.1f}ms / {max(latencies):.1f}ms / {statistics.mean(latencies):.1f}ms")
|
|
if len(latencies) > 1:
|
|
print(f"Desvio padrão: {statistics.stdev(latencies):.1f}ms")
|