Admiral/admiral-worker/app/services/PsutilSystemService.py
2025-06-24 14:22:50 +02:00

60 lines
1.4 KiB
Python

import logging
from dataclasses import dataclass
from typing import Optional
from typing_extensions import override
import psutil
import requests
from urllib3.exceptions import NameResolutionError
from core.services.SystemService import SystemService
log = logging.getLogger(__name__)
@dataclass
class PsutilSystemService(SystemService):
@override
def getMaxRamMbAvailable(self) -> float:
return psutil.virtual_memory().total / 10**6
@override
def getIp(self) -> str:
return requests.get('https://checkip.amazonaws.com').text.strip()
@override
def getCpuUtilization(self) -> float:
return psutil.cpu_percent(interval=None)
@override
def getRamMbAvailable(self) -> float:
return psutil.virtual_memory().available / 10**6
@override
def getCpuAvailable(self) -> int:
count = 0
for utilization in psutil.cpu_percent(percpu=True):
if utilization < 25:
count += 1
return count
@override
def getProcessCpu(self, pid: int = None) -> Optional[float]:
proc = psutil.Process(pid=pid)
return proc.cpu_percent(interval=None)
@override
def getProcessRam(self, pid: int = None) -> Optional[float]:
proc = psutil.Process(pid=pid)
return proc.memory_info().rss / 10**6
@override
def killProcess(self, pid: int = None):
proc = psutil.Process(pid=pid)
proc.kill()
@override
def terminateProcess(self, pid: int = None):
proc = psutil.Process(pid=pid)
proc.terminate()