Skip to content

Instantly share code, notes, and snippets.

@Tafkas Tafkas/
Last active Nov 24, 2015

What would you like to do?
A munin plugin for Linux to monitor Codebase ticket progress
#!/usr/bin/env python
codebase_munin - A munin plugin for Linux to monitor Codebase ticket progress
Copyright (C) 2015 Christian Stade-Schuldt
Author: Christian Stade-Schuldt
Like Munin, this plugin is licensed under the GNU GPL v2 license
Add the following section to your munin-node's plugin configuration:
env.codebase_user [codebase_api_user]
env.codebase_key [codebase_api_key]
This plugin supports the following munin configuration parameters:
#%# family=auto contrib
#%# capabilities=autoconf
import os
import re
import sys
import time
import requests
def get_ticket_statuses():
"""get the current ticket statuses"""
codebase_api_user = os.environ['codebase_user']
codebase_api_key = os.environ['codebase_key']
# ignore statuses Archive, Done and Invalid
statuses_list = ["Deployed", "In Progress", "In specification", "On hold", "Open", "QA", "Ready for deploy", "Specified"]
ticket_statuses = {s : 0 for s in statuses_list}
for s in statuses_list:
cnt = 1
while True:
payload = {'page' : cnt, 'query' : 'status:"{}"'.format(s)}
r = requests.get('', params=payload, auth=(codebase_api_user, codebase_api_key))
if r.status_code == 200:
for ticket in r.json():
if ticket['ticket']['status']:
status = ticket['ticket']['status']['name']
ticket_statuses[status] += 1
cnt += 1
for s in statuses_list:
print'%s.value %d' % (s.replace(' ', '_').lower(), ticket_statuses[s])
def print_config():
print "graph_title Codebase tickets by status"
print "graph_vlabel number of tickets"
print "graph_category codebase"
print "graph_order deployed, in_progress, in_specification, on_hold, open, qa, ready_for_deploy, specified"
print "graph_info This graph shows the ticket statuses of the bi project."
print "graph_scale no"
print "deployed.label deployed"
print "deployed.type GAUGE"
print "deployed.draw AREA"
print "in_progress.type GAUGE"
print "in_progress.draw STACK"
print "in_progress.label in_progress"
print "in_specification.type GAUGE"
print "in_specification.draw STACK"
print "in_specification.label in_specification"
print "on_hold.type GAUGE"
print "on_hold.draw STACK"
print "on_hold.label on_hold"
print "open.type GAUGE"
print "open.draw STACK"
print "open.label open"
print "qa.type GAUGE"
print "qa.draw STACK"
print "qa.label qa"
print "ready_for_deploy.type GAUGE"
print "ready_for_deploy.draw STACK"
print "ready_for_deploy.label ready_for_deploy"
print "specified.type GAUGE"
print "specified.draw STACK"
print "specified.label specified"
if __name__ == '__main__':
if len(sys.argv) == 2 and sys.argv[1] == 'config':
elif len(sys.argv) == 2 and sys.argv[1] == 'autoconf':
print 'yes'
elif len(sys.argv) == 1 or len(sys.argv) == 2 and sys.argv[1] == 'fetch':
# Some docs say it'll be called with fetch, some say no arg at all
sys.exit("Couldn't retrieve codebase ticket statuses")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.