class QueryWorker(Worker): """ This class wraps the Server class model with threading functionallity, to check the values of the variables in its reports. """ rpc = None queue = None time_lapse = None rrd_dir = None def __init__(self, **kwargs): Worker.__init__(self, kwargs["id"]) self.queue = kwargs["queue"] self.rpc = JSONRPCClient("http://%(host)s:%(port)d" % kwargs) self.time_lapse = kwargs["time_lapse"] self.rrd_dir = kwargs["rrd_dir"] def get_value(self, server_id, variable): """ """ if variable.query: f = 'doquery' kwargs = {'sql': variable.query, 'parsefunc': dict, } else: f = 'show_status' kwargs = {'pattern': variable.name, } logger.debug("Method: '%s', kwargs: %s" % (f, \ repr(kwargs))) value = self.rpc.call_method(server_id, f, kwargs) logger.debug("Query result: %s" % repr(value)) return value def run(self): while not self.queue.empty(): try: (s, se, v) = self.queue.get_nowait() # A server-variable tuple value = self.get_value(s.id, v) rrd = rrdtool.RRDWrapper.get_instance(s, se, v, self.time_lapse, self.rrd_dir) rrd.update(value[v.name]) except Queue.Empty: pass except Exception: logger.exception("Exception ocurred when processing "\ "an element:") continue logger.debug("Finished worker job.")