xref: /aosp_15_r20/system/extras/perf_tools/parse_timestamp.py (revision 288bf5226967eb3dac5cce6c939ccc2a7f2b4fe5)
1*288bf522SAndroid Build Coastguard Workerimport sys
2*288bf522SAndroid Build Coastguard Workerimport os
3*288bf522SAndroid Build Coastguard Workerfrom datetime import datetime
4*288bf522SAndroid Build Coastguard Worker
5*288bf522SAndroid Build Coastguard Worker# Usage:
6*288bf522SAndroid Build Coastguard Worker# replace_timestamp.py input.txt output.txt timestamp_string
7*288bf522SAndroid Build Coastguard Worker#
8*288bf522SAndroid Build Coastguard Worker# Description:
9*288bf522SAndroid Build Coastguard Worker# Replace timestamp in the input.txt with the difference timestamp to timestamp_string.
10*288bf522SAndroid Build Coastguard Worker#
11*288bf522SAndroid Build Coastguard Worker# Example: replace_timestamp.py input.txt output.txt "01-28 18:12:30.339".
12*288bf522SAndroid Build Coastguard Worker#
13*288bf522SAndroid Build Coastguard Workerdef main():
14*288bf522SAndroid Build Coastguard Worker    filepath = sys.argv[1]
15*288bf522SAndroid Build Coastguard Worker    if not os.path.isfile(filepath):
16*288bf522SAndroid Build Coastguard Worker        print("File path {} does not exist. Exiting...".format(filepath))
17*288bf522SAndroid Build Coastguard Worker        sys.exit()
18*288bf522SAndroid Build Coastguard Worker
19*288bf522SAndroid Build Coastguard Worker    output_filepath = sys.argv[2]
20*288bf522SAndroid Build Coastguard Worker
21*288bf522SAndroid Build Coastguard Worker    timestamp_str = sys.argv[3]
22*288bf522SAndroid Build Coastguard Worker    date_time_obj = datetime.strptime(timestamp_str, '%m-%d %H:%M:%S.%f')
23*288bf522SAndroid Build Coastguard Worker
24*288bf522SAndroid Build Coastguard Worker    output_fp = open(output_filepath, 'w')
25*288bf522SAndroid Build Coastguard Worker    i = 1
26*288bf522SAndroid Build Coastguard Worker    with open(filepath, 'r', errors = 'ignore') as fp:
27*288bf522SAndroid Build Coastguard Worker        for line in fp:
28*288bf522SAndroid Build Coastguard Worker            newline = replace_timestamp_abs(line, timestamp_str, date_time_obj)
29*288bf522SAndroid Build Coastguard Worker            output_fp.write(newline)
30*288bf522SAndroid Build Coastguard Worker            i = i + 1
31*288bf522SAndroid Build Coastguard Worker    fp.close()
32*288bf522SAndroid Build Coastguard Worker    output_fp.close()
33*288bf522SAndroid Build Coastguard Worker
34*288bf522SAndroid Build Coastguard Worker
35*288bf522SAndroid Build Coastguard Workerdef replace_timestamp_abs(line, timestamp_str, date_time_obj0):
36*288bf522SAndroid Build Coastguard Worker    if line[:5] != timestamp_str[:5]:
37*288bf522SAndroid Build Coastguard Worker        return line
38*288bf522SAndroid Build Coastguard Worker
39*288bf522SAndroid Build Coastguard Worker    index = line.find(" ", 6)
40*288bf522SAndroid Build Coastguard Worker    if index <= 0:
41*288bf522SAndroid Build Coastguard Worker        return line
42*288bf522SAndroid Build Coastguard Worker    substr0 = line[:index]
43*288bf522SAndroid Build Coastguard Worker    substr1 = line[index:]
44*288bf522SAndroid Build Coastguard Worker
45*288bf522SAndroid Build Coastguard Worker    try:
46*288bf522SAndroid Build Coastguard Worker        date_time_obj = datetime.strptime(substr0, '%m-%d %H:%M:%S.%f')
47*288bf522SAndroid Build Coastguard Worker    except ValueError:
48*288bf522SAndroid Build Coastguard Worker        return line
49*288bf522SAndroid Build Coastguard Worker
50*288bf522SAndroid Build Coastguard Worker    date_time_delta = date_time_obj - date_time_obj0
51*288bf522SAndroid Build Coastguard Worker    date_time_delta_str = str(date_time_delta)
52*288bf522SAndroid Build Coastguard Worker    return date_time_delta_str + substr1
53*288bf522SAndroid Build Coastguard Worker
54*288bf522SAndroid Build Coastguard Workerif __name__ == '__main__':
55*288bf522SAndroid Build Coastguard Worker    main()
56