cocaine plugin

This commit is contained in:
Denis Zheleztsov 2015-07-10 14:46:52 +03:00
parent c5b954b1c6
commit aad92b67be
3 changed files with 188 additions and 0 deletions

View File

@ -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)

View File

@ -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
# }
# }
# }
#}

78
plugins/cocaine/cox_check.py Executable file
View File

@ -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