Repository
Munin (contrib)
Last change
2020-11-26
Graph Categories
Capabilities
Keywords
Language
Python (3.x)
Authors

nutcracker_requests_

Name

nutcracker_requests_ - monitor twemproxy (aka: nutcracker)

Configuration

Config in /etc/munin/plugin-conf.d/nutcracker.conf:

[nutcracker_*]
env.NUTCRACKER_STATS_HOST 127.0.0.1
env.NUTCRACKER_STATS_PORT 22222

Authors

Copyright 2013 Edgar Veiga edgarmveiga@gmail.com

#!/usr/bin/env python3
"""
=head1 NAME

nutcracker_requests_ - monitor twemproxy (aka: nutcracker)


=head1 CONFIGURATION

Config in /etc/munin/plugin-conf.d/nutcracker.conf:

 [nutcracker_*]
 env.NUTCRACKER_STATS_HOST 127.0.0.1
 env.NUTCRACKER_STATS_PORT 22222


=head1 AUTHORS

Copyright 2013 Edgar Veiga <edgarmveiga@gmail.com>

=cut
"""


import json
import socket
import os
import sys


def get_stats():
    data = ''

    HOST = os.environ.get('NUTCRACKER_STATS_HOST', '127.0.0.1')
    PORT = int(os.environ.get('NUTCRACKER_STATS_PORT', 22222))

    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((HOST, PORT))

    file = s.makefile('r')
    data = file.readline()
    s.close()

    return json.loads(data)


def process_data():
    data = get_stats()
    # get pools
    for key, value in data.items():
        if isinstance(value, dict):
            total = 0
            # get server requests
            for pool_key, pool_value in value.items():
                if isinstance(pool_value, dict):
                    total += pool_value["requests"]
            print("requests_" + key + ".value" + " " + str(total))


def process_config():
    print("graph_title Nutcracker requests/s")
    print("graph_category other")
    print("graph_vlabel requests/s")

    data = get_stats()
    for key, value in data.items():
        if isinstance(value, dict):
            print("requests_" + key + ".label " + key)
            print("requests_" + key + ".type COUNTER")
            print("requests_" + key + ".min 0")


if __name__ == "__main__":
    if len(sys.argv) > 1 and sys.argv[1] == "config":
        process_config()
    else:
        process_data()