sawine@0: #!/usr/bin/python sawine@0: sawine@0: import dflowlog sawine@0: from dflowlog import dflow_fields as fields sawine@0: from filter import filter sawine@0: import sys sawine@0: from datetime import datetime sawine@0: from datetime import timedelta sawine@0: from optparse import OptionParser sawine@0: sawine@0: sawine@0: def get_datetime(row, value): sawine@0: date, time = row[fields[value]].split() sawine@0: year, month, day = date.split("-") sawine@0: hour, minute, second = time.split(":") sawine@0: return datetime(int(year), int(month), int(day), int(hour), int(minute), int(second)) sawine@0: sawine@0: def time_diff(dt1, dt2): sawine@0: diff = (max(dt1,dt2) - min(dt1, dt2)) sawine@0: diff = diff.seconds / 60 + diff.days * 24 * 60 sawine@0: if dt1 < dt2: sawine@0: diff *= -1 sawine@0: return diff sawine@0: sawine@0: def diff(values, plans): sawine@0: new_plans = [] sawine@0: for plan in plans: sawine@0: new_plans.append(plan) sawine@0: v1 = get_datetime(plan, values[0]) sawine@0: v2 = get_datetime(plan, values[1]) sawine@0: new_plans[-1].append(str(time_diff(v1, v2))) sawine@0: return new_plans sawine@0: sawine@0: def column_diff(values, plans): sawine@0: new_plans = [] sawine@0: flow_points = [] sawine@0: for plan in plans: sawine@0: flow_point = plan[fields["flow_point"]] sawine@0: if flow_point not in flow_points: sawine@0: flow_points.append(flow_point) sawine@0: for fp in flow_points: sawine@0: flow_plans = filter("flow_point", fp, plans) sawine@0: for plan in flow_plans: sawine@0: min_sep = 999 sawine@0: current_plan = plan sawine@0: current_flow_time = get_datetime(current_plan, values[0]) sawine@0: for plan2 in flow_plans: sawine@0: if plan2 is not current_plan: sawine@0: min_sep = min(min_sep, sawine@0: abs(time_diff(get_datetime(plan2, values[0]), sawine@0: current_flow_time))) sawine@0: if min_sep < 999: sawine@0: plan.append(str(min_sep)) sawine@0: new_plans.append(plan) sawine@0: return new_plans sawine@0: sawine@0: if __name__ == "__main__": sawine@0: modes = {"diff": (diff, 3), sawine@0: "cdiff": (column_diff, 2)} sawine@0: arg_parser = OptionParser(usage="usage: %prog [options] diff column1 column2 csv_logs\ sawine@0: %prog [options] cdiff column csv_logs") sawine@0: arg_parser.add_option("-f", "--files", sawine@0: action="store_true", dest="files_mode", sawine@0: help="csv_logs are files") sawine@0: arg_parser.set_defaults(files_mode=False) sawine@0: (options, args) = arg_parser.parse_args() sawine@0: plans = [] sawine@0: sawine@0: if options.files_mode: sawine@0: plans = dflowlog.parse_files(args[modes[args[0]][1]:]) sawine@0: options.files_mode = False sawine@0: else: sawine@0: plans = dflowlog.parse_pipe(args[modes[args[0]][1]:]) sawine@0: sawine@0: plans = modes[args[0]][0](args[1:], plans) sawine@0: sawine@0: dflowlog.print_logs(plans) sawine@0: sawine@0: