diff --git a/powerlog.py b/powerlog.py new file mode 100755 index 0000000..c3fdcd0 --- /dev/null +++ b/powerlog.py @@ -0,0 +1,77 @@ +#!/usr/bin/python +#import matplotlib +#matplotlib.use("Agg") +import matplotlib.pyplot as plt +import numpy as np +import getopt +import sys + +def get_time_power(file_name): + offset = 1000000 + loop_offset = 0 + last_time = 0 + time_log = np.array([]) + power_log = np.array([]) + log = open(file_name, "r") + for line in log: + line = line.strip().split(" ") + time = int(line[0]) + if time < last_time: + loop_offset += offset + last_time = time + time_log = np.append(time_log, time + loop_offset) + power_log = np.append(power_log, int(line[2])) + if len(time_log) != len(power_log): + return None + return time_log, power_log + +def time_us_to_ms(time_us): + time_ms = np.array([]) + for value in time_us: + time_ms = np.append(time_ms, value / 1000) + return time_ms + +def get_basename(file_name): + basename = file_name.strip().split(".") + if len(basename) < 1: + return None + return basename[0] + +def print_power_diagram(time_ms, power_mw, time_slope, power_slope, basename, image_format="svg"): + plt.clf() + plt.plot(time_ms, power_mw, "r-", time_slope, power_slope, "b-") + plt.show() + return None + +def get_slope(x, y, interval): + y_sum = 0 + x_start = x[0] + div = 0 + x_slope = np.array([]) + y_slope = np.array([]) + for i in range(0, len(x)): + if x[i] > (x_start + interval): + if div == 0: + div = 1 + x_slope = np.append(x_slope, x[i]) + y_slope = np.append(y_slope, y_sum / div) + div = 0 + y_sum = 0 + x_start = x[i] + else: + y_sum += y[i] + div += 1 + return x_slope, y_slope + +def main(args): + opts, _ = getopt.getopt(args, "f:", ["file="]) + for opt, arg in opts: + if opt in ("-f", "--file"): + time_us, power_mw = get_time_power(arg) + time_ms = time_us_to_ms(time_us) + time_slope, power_slope = get_slope(time_ms, power_mw, 1000) + print_power_diagram(time_ms, power_mw, time_slope, power_slope, get_basename(arg)) + return None + +if __name__ == "__main__": + sys.exit(main(sys.argv[1:]))