CyberAlphaWolf

Server : Apache
System : Linux 182.49.167.72.host.secureserver.net 4.18.0-553.92.1.el8_10.x86_64 #1 SMP Wed Jan 14 06:31:58 EST 2026 x86_64
User : kikai ( 1014)
PHP Version : 8.3.30
Disable Function : NONE
Directory :  /lib/fm-agent/plugins/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //lib/fm-agent/plugins/uwsgi.py
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

XYZEAZ - Cyber Alpha Wolf © All Rights Reserved