Skip to content

Instantly share code, notes, and snippets.

@tcotav
Created November 12, 2014 19:23
Show Gist options
  • Save tcotav/c47688f987a989c1caf9 to your computer and use it in GitHub Desktop.
Save tcotav/c47688f987a989c1caf9 to your computer and use it in GitHub Desktop.
bit of matplotlib stuff for graphing
#!/usr/bin/env python
import sys
from os import listdir
from os.path import isfile, join, getmtime, split
from datetime import datetime
import matplotlib.pyplot as plt
import numpy as np
# legend
from matplotlib.font_manager import FontProperties
# set for multiple on same legend sizing
from pylab import rcParams
rcParams['figure.figsize'] = 20, 10
def is_numeric(val):
try:
float(val)
return True
except ValueError:
return False
def filepath_to_key(fp):
head, tail = split(fp)
return tail.split(".")[0]
# returns time series [(x0, y0), (x1, y1)...]
def parseFile(fname, normalize_data=False, date_after=None, date_before=None):
date_list=[]
val_list=[]
firstval=None
"""
Tue Nov 11 20:15:01 PST 2014
712
#################################
"""
# parse the lines
for ll in open(fname):
if ll[0].isupper(): # matches date
ll=ll.strip().replace(" PST", "")
date=datetime.strptime(ll, "%c") # Locale's date appx
elif ll[0] == "#":
append_data=False
if date_after and date_before:
if date <= date_before and date >= date_after:
append_data=True
elif date_before:
if date <= date_before:
append_data=True
elif date_after:
if date >= date_after:
append_data=True
else:
append_data=True
if append_data:
date_list.append(date)
val_list.append(val)
elif is_numeric(ll[0:2]):
ll=ll.strip()
if normalize_data:
if not firstval:
firstval=float(ll)
val = float(ll)/firstval
else:
val=ll
else:
print "fellthrough"
sys.exit(1)
return (filepath_to_key(fname), date_list, val_list)
if __name__ == "__main__":
import argparse
date_format="%Y-%m-%d %H:%M:%S"
parser = argparse.ArgumentParser()
parser.add_argument("-m", "--multiple", default=False, action='store_true', help="show each server on separate graph")
parser.add_argument("-n", "--normalize", default=False, action='store_true', help="normalize data")
parser.add_argument("-a", "--after_date", help="graph data after a certain date, format=\"%Y-%m-%d %H:%M:%S\"")
parser.add_argument("-b", "--before_date", help="graph data before a certain date, format=\"%Y-%m-%d %H:%M:%S\"")
parser.add_argument("srcdir", help="location of the data files")
args = parser.parse_args()
if args.srcdir:
srcdir=args.srcdir
if args.after_date:
date_after=datetime.strptime(args.after_date, date_format)
else:
date_after=None
if args.before_date:
date_before=datetime.strptime(args.before_date, date_format)
else:
date_before=None
# skip site-web-001
# get current file list
currentfiles = [ f for f in listdir(srcdir) if isfile(join(srcdir,f)) ]
for fname in currentfiles:
data=parseFile(join(srcdir,fname), normalize_data=args.normalize, date_after=date_after, date_before=date_before)
plt.plot(data[1], data[2], label=data[0]) #lines
if args.multiple:
plt.xlabel('time')
plt.ylabel('response (ms)')
plt.title(data[0])
plt.axis()
plt.show()
if not args.multiple:
plt.axis()
fontP = FontProperties()
fontP.set_size('small')
#plt.legend(bbox_to_anchor=(1.1, 1.05), prop = fontP)
plt.legend(loc='upper center', bbox_to_anchor=(0.5, 1.10),
ncol=4, fancybox=True, shadow=True, prop=fontP)
plt.xlabel('time')
plt.ylabel('response (ms)')
plt.show()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment