mirror of https://github.com/craigerl/aprsd.git
45 lines
1.1 KiB
Python
45 lines
1.1 KiB
Python
import datetime
|
|
import tracemalloc
|
|
|
|
from oslo_config import cfg
|
|
|
|
import aprsd
|
|
from aprsd import utils
|
|
|
|
|
|
CONF = cfg.CONF
|
|
|
|
|
|
class APRSDStats:
|
|
"""The AppStats class is used to collect stats from the application."""
|
|
|
|
_instance = None
|
|
|
|
def __new__(cls, *args, **kwargs):
|
|
"""Have to override the new method to make this a singleton
|
|
|
|
instead of using @singletone decorator so the unit tests work.
|
|
"""
|
|
if not cls._instance:
|
|
cls._instance = super().__new__(cls)
|
|
return cls._instance
|
|
|
|
def __init__(self):
|
|
self.start_time = datetime.datetime.now()
|
|
|
|
def uptime(self):
|
|
return datetime.datetime.now() - self.start_time
|
|
|
|
def stats(self) -> dict:
|
|
current, peak = tracemalloc.get_traced_memory()
|
|
stats = {
|
|
"version": aprsd.__version__,
|
|
"uptime": self.uptime(),
|
|
"callsign": CONF.callsign,
|
|
"memory_current": int(current),
|
|
"memory_current_str": utils.human_size(current),
|
|
"memory_peak": int(peak),
|
|
"memory_peak_str": utils.human_size(peak),
|
|
}
|
|
return stats
|