MCPcopy Create free account
hub / github.com/cosdata/cosdata / CPUMonitor

Class CPUMonitor

tests/test_hybrid.py:37–144  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

35
36
37class CPUMonitor:
38 def __init__(self):
39 self.process = None
40 self.monitoring = False
41 self.cpu_samples = []
42 self.monitor_thread = None
43
44 def find_cosdata_process(self):
45 for proc in psutil.process_iter(["pid", "name", "cmdline", "exe"]):
46 try:
47 # Check process name
48 if proc.info["name"] == "cosdata":
49 return psutil.Process(proc.info["pid"])
50
51 # Check command line arguments
52 if proc.info["cmdline"]:
53 cmdline_str = " ".join(proc.info["cmdline"])
54 if "cosdata" in cmdline_str and "--admin-key" in cmdline_str:
55 return psutil.Process(proc.info["pid"])
56
57 # Check executable path
58 if proc.info.get("exe") and "cosdata" in proc.info["exe"]:
59 return psutil.Process(proc.info["pid"])
60
61 except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
62 pass
63 return None
64
65 def start_monitoring(self, sample_interval=0.1):
66 self.process = self.find_cosdata_process()
67 if not self.process:
68 print("Warning: Could not find cosdata process for CPU monitoring")
69 print("Available processes with 'cosdata' in name or cmdline:")
70 for proc in psutil.process_iter(["pid", "name", "cmdline"]):
71 try:
72 if "cosdata" in proc.info["name"].lower() or (
73 proc.info["cmdline"]
74 and any(
75 "cosdata" in str(arg).lower()
76 for arg in proc.info["cmdline"]
77 )
78 ):
79 print(
80 f" PID {proc.info['pid']}: {proc.info['name']} - {' '.join(proc.info['cmdline']) if proc.info['cmdline'] else 'N/A'}"
81 )
82 except (
83 psutil.NoSuchProcess,
84 psutil.AccessDenied,
85 psutil.ZombieProcess,
86 ):
87 pass
88 return False
89
90 print(
91 f"Found cosdata process: PID {self.process.pid}, name: {self.process.name()}"
92 )
93 self.monitoring = True
94 self.cpu_samples = []

Callers 1

Calls

no outgoing calls

Tested by 1