fester/backend/metrics/target_profile.py

61 lines
1.5 KiB
Python

import time
class TargetProfile:
def __init__(self, target_key):
self.target = target_key
self.start_time = time.time()
self.cpu_samples = []
self.temp_samples = []
self.cache_hits = 0
self.actions = 0
self.failures = 0
# -----------------------------
# RECORD SAMPLE
# -----------------------------
def sample(self, node):
self.cpu_samples.append(node.get("cpu_load", 0))
self.temp_samples.append(node.get("temp", 0))
# -----------------------------
# RECORD EVENTS
# -----------------------------
def record_action(self):
self.actions += 1
def record_cache_hit(self):
self.cache_hits += 1
def record_failure(self):
self.failures += 1
# -----------------------------
# FINALIZE PROFILE
# -----------------------------
def finalize(self):
duration = time.time() - self.start_time
avg_cpu = sum(self.cpu_samples) / len(self.cpu_samples) if self.cpu_samples else 0
avg_temp = sum(self.temp_samples) / len(self.temp_samples) if self.temp_samples else 0
peak_temp = max(self.temp_samples) if self.temp_samples else 0
cache_ratio = self.cache_hits / self.actions if self.actions else 0
return {
"target": self.target,
"duration": duration,
"avg_cpu": avg_cpu,
"avg_temp": avg_temp,
"peak_temp": peak_temp,
"cache_ratio": cache_ratio,
"failures": self.failures
}