61 lines
1.5 KiB
Python
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
|
|
}
|