PNG  IHDR;IDATxܻn0K )(pA 7LeG{ §㻢|ذaÆ 6lذaÆ 6lذaÆ 6lom$^yذag5bÆ 6lذaÆ 6lذa{ 6lذaÆ `}HFkm,mӪôô! x|'ܢ˟;E:9&ᶒ}{v]n&6 h_tڠ͵-ҫZ;Z$.Pkž)!o>}leQfJTu іچ\X=8Rن4`Vwl>nG^is"ms$ui?wbs[m6K4O.4%/bC%t Mז -lG6mrz2s%9s@-k9=)kB5\+͂Zsٲ Rn~GRC wIcIn7jJhۛNCS|j08yiHKֶۛkɈ+;SzL/F*\Ԕ#"5m2[S=gnaPeғL lذaÆ 6l^ḵaÆ 6lذaÆ 6lذa; _ذaÆ 6lذaÆ 6lذaÆ RIENDB` import agent_util import logging logger = logging.getLogger(__name__) class UWSGIPlugin(agent_util.Plugin): textkey = "uwsgi" label = "UWSGI" @classmethod def get_metadata(self, config): status = agent_util.SUPPORTED msg = None # check if uwsgi is even installed installed = agent_util.which("uwsgi") if not installed: self.log.info("The uwsgi binary was not found.") status = agent_util.UNSUPPORTED msg = "uwsgi binary not found" return {} if not config: msg = "The [uwsgi] config block is not found in the agent config file." self.log.info(msg) status = agent_util.MISCONFIGURED if status == agent_util.SUPPORTED and (not "server" in config or not "port" in config): msg = "The server and port settings were not found in the [uwsgi] block of the agent config file." self.log.info(msg) status = agent_util.MISCONFIGURED workers = [] if status is agent_util.SUPPORTED: try: status, output = agent_util.execute_command('nc %s %s' % (config['server'], config['port'])) if status != 0: raise Exception(output) output = agent_util.json_loads(output) for worker in output["workers"]: workers.append("Worker #%s" % worker["pid"]) workers.sort() except: status = agent_util.MISCONFIGURED msg = "Unable to get uwsgi status, please make sure uwsgi is running with the status module enabled and that the connection settings in the agent configuration file are valid." self.log.info(msg) if status == agent_util.SUPPORTED and not workers: status = agent_util.MISCONFIGURED msg = "No workers found." metadata = { "requests": { "label": "Requests per second", "options": workers, "status": status, "error_message": msg, "unit": "requests" }, "exceptions": { "label": "Exceptions", "options": workers, "status": status, "error_message": msg, "unit": "exceptions" }, "status": { "label": "Worker is busy or free to use(BUSY=1, FREE=0)", "options": workers, "status": status, "error_message": msg }, "rss": { "label": "Worker RSS (Resident Set Size)", "options": workers, "status": status, "error_message": msg }, "vsz": { "label": "Worker VSZ (Virtual Memory Size)", "options": workers, "status": status, "error_message": msg }, "running_time": { "label": "How long worker is working", "options": workers, "status": status, "error_message": msg, "unit": "workers" }, "respawn_count": { "label": "How many requests worker did since worker (re)spawn", "options": workers, "status": status, "error_message": msg, "unit": "requests" }, "tx": { "label": "How many data was transmitted by worker", "options": workers, "status": status, "error_message": msg, "unit": "data" }, "avg_rt": { "label": "Average request time", "options": workers, "status": status, "error_message": msg, "unit": "ms" } } return metadata def check(self, textkey, worker, config): status, output = agent_util.execute_command("nc %s %s" %(config["server"],config["port"])) if status != 0: raise Exception(output) output = agent_util.json_loads(output) workers = output["workers"] pid = worker.replace("Worker #","") for w in workers: if w["pid"] == int(pid): worker = w break try: res = worker[textkey] if textkey == "status": if res == "idle": res = 0 else: res = 1 except: res = 0 return res