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 }