import logging import threading import time from oslo_config import cfg import wrapt from aprsd.stats import collector from aprsd.threads import APRSDThread from aprsd.utils import objectstore CONF = cfg.CONF LOG = logging.getLogger("APRSD") class StatsStore(objectstore.ObjectStoreMixin): """Container to save the stats from the collector.""" lock = threading.Lock() data = {} @wrapt.synchronized(lock) def add(self, stats: dict): self.data = stats class APRSDStatsStoreThread(APRSDThread): """Save APRSD Stats to disk periodically.""" # how often in seconds to write the file save_interval = 10 def __init__(self): super().__init__("StatsStore") def loop(self): if self.loop_count % self.save_interval == 0: stats = collector.Collector().collect() ss = StatsStore() ss.add(stats) ss.save() time.sleep(1) return True