Created
November 12, 2014 19:23
-
-
Save tcotav/c47688f987a989c1caf9 to your computer and use it in GitHub Desktop.
bit of matplotlib stuff for graphing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/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