import glob import yaml import json import os import sys import time import re import requests import numpy import matplotlib.pyplot as plt import matplotlib.dates as mdates import datetime import random import warnings warnings.filterwarnings("ignore") #from pdb import set_trace as bp timeout = 180 # if no argument print help and exit if len(sys.argv) == 1: print("You need to specify an alert config file.") exit(1) #else config_file = 'alert_configs/'+sys.argv[1]+'.yaml' # test file exists or exit alert_config = yaml.load(open(config_file, 'rb').read()) # We will show 10 intervals by default if len(sys.argv) == 3: interval = int(sys.argv[2]) else: interval = 10 alert_config['query']['start_relative']['value'] = str(int(alert_config['query']['start_relative']['value'])*interval) kairosdb_url = "http://kairosdb-metrics.service.eng.consul:8080/" query_url = os.path.join(kairosdb_url + "api/v1/datapoints/query") #ret = requests.post(query_url, data=json.dumps(query), timeout) ret = requests.post(query_url, json.dumps(alert_config['query']), timeout) results = ret.json()['queries'][0]['results'] # Transforming to human readable data # for result in results[0]['values']: # result[0] = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(result[0]/1000)) # result[0] = datetime.datetime.strptime(result[0],'%Y-%m-%d %H:%M:%S') for result in results: for value in result['values']: # bp() # transform date from epoch to human readable format value[0] = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(value[0]/1000)) # transform date string to datetime object value[0] = datetime.datetime.strptime(value[0],'%Y-%m-%d %H:%M:%S') series = numpy.array(result['values']) label_str = str(result['group_by'][0].get('group', '')) line_color = tuple(numpy.random.random(size=3)) plt.plot_date(series[:,0],series[:,1], marker='.', color=line_color, linestyle='-', label=label_str) #series = numpy.array(results[0]['values']) #converted_dates = map(datetime.datetime.strptime, datelist, len(datelist)*['%Y-%m-%d %H:%M:%S']) #x_axis = (converted_dates) formatter = mdates.DateFormatter('%H:%M:%S') # ax.xaxis.set_major_formatter(mdates.DateFormatter("%Y-%m")) # series = series.astype(numpy.unicode, copy=False) ax = plt.subplot() #ax.set_xlabel('TIME') #ax.set_ylabel('VALUE') #bc = plt.axes() #bc.xaxis.set_major_formatter(formatter) #plt.plot_date(series[:,0],series[:,1], marker='o', color='b', linestyle='-') #plt.plot_date(converted_dates,series[:,1], marker='o', color='b', linestyle='-') #ax.set_xticks(series[:,0]) #ax.xaxis.set_major_formatter(mdates.DateFormatter("%Y-%m")) #ax.xaxis.set_minor_formatter(mdates.DateFormatter("%Y-%m")) # ax = plt.subplot.gcf().axes[0] #ax.set_title(sys.argv[1]) ax.xaxis.set_major_formatter(formatter) #plt.xaxis.set_major_formatter(formatter) plt.title(sys.argv[1]) plt.legend() # pyplot.gcf().autofmt_xdate(rotation=25) #ax.xaxis_date() # ax.xaxis.set_major_formatter(mdates.DateFormatter("%Y-%m")) # ax.xaxis.set_minor_formatter(mdates.DateFormatter("%Y-%m")) # ax.plot(series[:,0],series[:,1], marker='o', color='b', linestyle='-') myRe = re.compile('^(?!occurrences).*_threshold$') # Adding thresholds to the graph for key in alert_config: if myRe.match(key): plt.axhline(y=float(alert_config[key]), color='r', linestyle='--', label=str(key)) plt.text(series[0][0],float(alert_config[key]),key) #plt.gcf().autofmt_xdate() #ax = .add_axes([0,0,1,1]) plt.gcf().autofmt_xdate(rotation=25) #plt.axhline(y=500000, color='o', linestyle='-') plt.show() #results[0]['values']