60 lines
1.4 KiB
Python
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()
|