def __init__(self, cached_time=1, config=None): # Init stats self.stats = GlancesStatsServer(config) # Initial update self.stats.update() # cached_time is the minimum time interval between stats updates # i.e. XML/RPC calls will not retrieve updated info until the time # since last update is passed (will retrieve old cached info instead) self.timer = Timer(0) self.cached_time = cached_time
class GlancesInstance(object): """All the methods of this class are published as XML-RPC methods.""" def __init__(self, cached_time=1, config=None): # Init stats self.stats = GlancesStatsServer(config) # Initial update self.stats.update() # cached_time is the minimum time interval between stats updates # i.e. XML/RPC calls will not retrieve updated info until the time # since last update is passed (will retrieve old cached info instead) self.timer = Timer(0) self.cached_time = cached_time def __update__(self): # Never update more than 1 time per cached_time if self.timer.finished(): self.stats.update() self.timer = Timer(self.cached_time) def init(self): # Return the Glances version return version def getAll(self): # Update and return all the stats self.__update__() return json.dumps(self.stats.getAll()) def getAllPlugins(self): # Return the plugins list return json.dumps(self.stats.getAllPlugins()) def getAllLimits(self): # Return all the plugins limits return json.dumps(self.stats.getAllLimitsAsDict()) def getAllViews(self): # Return all the plugins views return json.dumps(self.stats.getAllViewsAsDict()) def getAllMonitored(self): # Return the processes monitored list # return json.dumps(self.monitors.getAll()) return json.dumps(self.stats.getAll()['monitor']) def __getattr__(self, item): """Overwrite the getattr method in case of attribute is not found. The goal is to dynamically generate the API get'Stats'() methods. """ header = 'get' # Check if the attribute starts with 'get' if item.startswith(header): try: # Update the stat self.__update__() # Return the attribute return getattr(self.stats, item) except Exception: # The method is not found for the plugin raise AttributeError(item) else: # Default behavior raise AttributeError(item)