#!/usr/bin/python

import urllib2 as urllib
import json
import sys
import argparse

parser = argparse.ArgumentParser()
parser.add_argument("-c", "--crit", type=int, required=True)
parser.add_argument("-w", "--warn", type=int)
parser.add_argument("-s", "--span", type=str)
parser.add_argument("-u", "--until", type=str)
parser.add_argument("-i", "--sufficient", type=int, default=2)
parser.add_argument("--host", type=str, default="ppcgraphite.yandex.ru")
parser.add_argument("expr")
args = parser.parse_args()
if args.warn == None: args.warn = args.crit
if args.span == None: args.span = "1hours"

url = "http://%s/render/?_salt=1373877071.536&format=json&from=-%s&target=%s" % (args.host, args.span, args.expr)
if args.until: url = url + "&until=-" + args.until

try:
  r = urllib.urlopen(url).read()
  # [[value,time],[]], sorted by time, ascending
  datapoints = json.loads(r)[0][u"datapoints"]
  values = [x[0] for x in datapoints if x[0] != None]
except Exception as e:
  print "2;Can't get data form graphite. " + str(e)

if len(values) < args.sufficient:
  print "2;NO DATA"
  sys.exit(0)

delta = max(values) - min(values)
if args.warn > args.crit:
  if delta > args.warn:
    print "0;OK"
  elif args.crit < delta and delta <= args.warn:
    print "1;%d less than %d" % (delta, args.warn)
  elif delta <= args.crit:
    print "2;%d less than %d" % (delta, args.crit)
else:
  if delta < args.warn:
    print "0;OK"
  elif args.warn <= delta and delta < args.crit:
    print "1;%d greater than %d" % (delta, args.warn)
  elif delta >= args.crit:
    print "2;%d greater than %d" % (delta, args.crit)
