From aad92b67bebeb13bd1841372c71ea66af9a239c9 Mon Sep 17 00:00:00 2001 From: Denis Zheleztsov Date: Fri, 10 Jul 2015 14:46:52 +0300 Subject: [PATCH] cocaine plugin --- plugins/cocaine/check_cocaine.py | 66 +++++++++++++++++++++++++ plugins/cocaine/cocaine_metrics.py | 44 +++++++++++++++++ plugins/cocaine/cox_check.py | 78 ++++++++++++++++++++++++++++++ 3 files changed, 188 insertions(+) create mode 100755 plugins/cocaine/check_cocaine.py create mode 100755 plugins/cocaine/cocaine_metrics.py create mode 100755 plugins/cocaine/cox_check.py diff --git a/plugins/cocaine/check_cocaine.py b/plugins/cocaine/check_cocaine.py new file mode 100755 index 0000000..f1d0bc0 --- /dev/null +++ b/plugins/cocaine/check_cocaine.py @@ -0,0 +1,66 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +import argparse +import sys +from cox_check import * + + +parser = argparse.ArgumentParser() +parser.add_argument('-s', '--host') +args = parser.parse_args() +if args.host: + cocaine_tool = cocaine_tool + ' -h ' + args.host + + +# Cocaine applications +apps_array = get_apps() + +# Runlists +runlists_array = get_runlists() + +apps_info = {} + +# Get info about app +for app_name in apps_array: + apps_info[app_name] = get_app_info(app_name) + +apps_status = {} + +for app_name in apps_info: + state = get_app_state(app_name) + + if state == 'running': + apps_status[app_name] = { '0': state } + else: + # Check production runlist + runlist = get_runlist(runlists_array, app_name) + if runlist == 'production': + apps_status[app_name] = { '2': state } + else: + apps_status[app_name] = { '1': state } + +crit_apps = [] +warn_apps = [] +for app in apps_status: + for code in apps_status[app]: + message = apps_status[app][code] + if code == '2': + crit_apps.append(app) + if code == '1': + warn_apps.append(app) + +if len(crit_apps) == 0: + pass +else: + print crit_apps + sys.exit(2) + +if len(warn_apps) == 0: + pass +else: + print warn_apps + sys.exit(1) + +print "OK" +sys.exit(0) diff --git a/plugins/cocaine/cocaine_metrics.py b/plugins/cocaine/cocaine_metrics.py new file mode 100755 index 0000000..f18dd05 --- /dev/null +++ b/plugins/cocaine/cocaine_metrics.py @@ -0,0 +1,44 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +import time +import socket +from cox_check import get_apps, get_app_info, get_app_state + +apps = get_apps() +hostname = socket.getfqdn() + +for app in apps: + status = get_app_state(app) + if status == 'running': + info = get_app_info(app) + print hostname + '.' + app + ".load-median " + str( info['apps'][app]['load-median'] ) + ' ' + str ( time.time() ) + print hostname + '.' + app + ".sessions.pending " + str( info['apps'][app]['sessions']['pending'] ) + ' ' + str ( time.time() ) + print hostname + '.' + app + ".queue.depth " + str( info['apps'][app]['queue']['depth'] ) + ' ' + str ( time.time() ) + print hostname + '.' + app + ".queue.capacity " + str( info['apps'][app]['queue']['capacity'] ) + ' ' + str ( time.time() ) + print hostname + '.' + app + ".slaves.active " + str( info['apps'][app]['slaves']['active'] ) + ' ' + str ( time.time() ) + print hostname + '.' + app + ".slaves.idle " + str( info['apps'][app]['slaves']['idle'] ) + ' ' + str ( time.time() ) + print hostname + '.' + app + ".slaves.capacity " + str( info['apps'][app]['slaves']['capacity'] ) + ' ' + str ( time.time() ) + + +#{ +# "apps": { +# "js": { +# "load-median": 0, +# "profile": "default", +# "sessions": { +# "pending": 0 +# }, +# "queue": { +# "depth": 0, +# "capacity": 100 +# }, +# "state": "running", +# "slaves": { +# "active": 0, +# "idle": 0, +# "capacity": 10 +# } +# } +# } +#} diff --git a/plugins/cocaine/cox_check.py b/plugins/cocaine/cox_check.py new file mode 100755 index 0000000..19c9c6b --- /dev/null +++ b/plugins/cocaine/cox_check.py @@ -0,0 +1,78 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +import os +import ast + +cocaine_tool = '/usr/bin/cocaine-tool' + +# Get applications array +def get_apps(): + apps = get_cmd( cocaine_tool + ' app list' ) + apps_array = get_dict(apps) + + return apps_array + + +# Get runlists array +def get_runlists(): + runlists = get_cmd( cocaine_tool + ' runlist list' ) + runlists_array = get_dict(runlists) + + return runlists_array + + +# Return dictionary of cocaine applicatio info +def get_app_info(app_name): + info = get_cmd( cocaine_tool + ' info -n ' + app_name ) + info_dict = get_dict(info) + + return info_dict + + +# Get application state +def get_app_state(app_name): + app_info = get_app_info(app_name) + state = '' + try: + state = app_info['apps'][app_name]['state'] + except: + state = 'not running' + + return state + + +# Get dictionary from string +def get_dict(string): + out_dict = ast.literal_eval(string) + + return out_dict + + +# Check runlis +def get_runlist(runlists, app): + for runlist in runlists: + runlist_info = get_runlist_info(runlist) + try: + if runlist_info[app]: + return runlist + except: + pass + + return 'Not in runlist' + + +# Get runlist info +def get_runlist_info(runlist): + info = get_cmd( cocaine_tool + ' runlist view -n ' + runlist ) + info_dict = get_dict(info) + + return info_dict + + +# Get shell command output +def get_cmd(cmd): + out = os.popen(cmd).read() + + return out +