data/analyse.py
author Eugen Sawin <sawine@me73.com>
Wed, 23 Mar 2011 21:10:10 +0100
changeset 1 866172a16472
permissions -rwxr-xr-x
Added book version.
     1 #!/usr/bin/python
     2 
     3 import dflowlog
     4 from dflowlog import dflow_fields as fields
     5 from filter import filter
     6 import sys
     7 from datetime import datetime
     8 from datetime import timedelta
     9 from optparse import OptionParser
    10 
    11 
    12 def get_datetime(row, value):
    13 	date, time = row[fields[value]].split()
    14 	year, month, day = date.split("-")
    15 	hour, minute, second = time.split(":")
    16 	return datetime(int(year), int(month), int(day), int(hour), int(minute), int(second))
    17 
    18 def time_diff(dt1, dt2):	
    19 	diff = (max(dt1,dt2) - min(dt1, dt2))
    20 	diff = diff.seconds / 60 + diff.days * 24 * 60
    21 	if dt1 < dt2:
    22 		diff *= -1
    23 	return diff
    24 
    25 def diff(values, plans):
    26 	new_plans = []
    27 	for plan in plans:
    28 		new_plans.append(plan)
    29 		v1 = get_datetime(plan, values[0])
    30 		v2 = get_datetime(plan, values[1])
    31 		new_plans[-1].append(str(time_diff(v1, v2)))
    32 	return new_plans
    33 
    34 def column_diff(values, plans):
    35 	new_plans = []
    36 	flow_points = []
    37 	for plan in plans:
    38 		flow_point = plan[fields["flow_point"]]
    39 		if flow_point not in flow_points:
    40 			flow_points.append(flow_point)
    41 	for fp in flow_points:
    42 		flow_plans = filter("flow_point", fp, plans)		
    43 		for plan in flow_plans:
    44 			min_sep = 999
    45 			current_plan = plan
    46 			current_flow_time = get_datetime(current_plan, values[0])			
    47 			for plan2 in flow_plans:
    48 				if plan2 is not current_plan:
    49 					min_sep = min(min_sep, 
    50 									abs(time_diff(get_datetime(plan2, values[0]),
    51 									current_flow_time)))				
    52 			if min_sep < 999:
    53 				plan.append(str(min_sep))
    54 			new_plans.append(plan)
    55 	return new_plans
    56 
    57 if __name__ == "__main__":
    58 	modes = {"diff": (diff, 3),
    59 				"cdiff": (column_diff, 2)}
    60 	arg_parser = OptionParser(usage="usage: %prog [options] diff column1 column2 csv_logs\
    61 									 %prog [options] cdiff column csv_logs")
    62 	arg_parser.add_option("-f", "--files",
    63 				action="store_true", dest="files_mode",
    64 				help="csv_logs are files")
    65 	arg_parser.set_defaults(files_mode=False)
    66 	(options, args) = arg_parser.parse_args()
    67 	plans = []
    68 	
    69 	if options.files_mode:
    70 		plans =	dflowlog.parse_files(args[modes[args[0]][1]:])
    71 		options.files_mode = False
    72 	else:
    73 		plans = dflowlog.parse_pipe(args[modes[args[0]][1]:])
    74 	
    75 	plans = modes[args[0]][0](args[1:], plans)	
    76 		
    77 	dflowlog.print_logs(plans)
    78 	
    79