#!/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 =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()