graphstats: Add option to graph temperatures from log
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This commit is contained in:
parent
078a03dc21
commit
cb2ecc68d2
|
@ -15,8 +15,11 @@ MAXBUFFER=2.
|
||||||
STATS_INTERVAL=5.
|
STATS_INTERVAL=5.
|
||||||
TASK_MAX=0.0025
|
TASK_MAX=0.0025
|
||||||
|
|
||||||
APPLY_PREFIX = ['mcu_awake', 'mcu_task_avg', 'mcu_task_stddev', 'bytes_write',
|
APPLY_PREFIX = [
|
||||||
'bytes_read', 'bytes_retransmit', 'freq', 'adj']
|
'mcu_awake', 'mcu_task_avg', 'mcu_task_stddev', 'bytes_write',
|
||||||
|
'bytes_read', 'bytes_retransmit', 'freq', 'adj',
|
||||||
|
'target', 'temp', 'pwm'
|
||||||
|
]
|
||||||
|
|
||||||
def parse_log(logname, mcu):
|
def parse_log(logname, mcu):
|
||||||
if mcu is None:
|
if mcu is None:
|
||||||
|
@ -139,7 +142,6 @@ def plot_frequency(data, outname, mcu):
|
||||||
graph_keys = { key: ([], []) for key in all_keys
|
graph_keys = { key: ([], []) for key in all_keys
|
||||||
if (key in ("freq", "adj") or (not one_mcu and (
|
if (key in ("freq", "adj") or (not one_mcu and (
|
||||||
key.endswith(":freq") or key.endswith(":adj")))) }
|
key.endswith(":freq") or key.endswith(":adj")))) }
|
||||||
basetime = lasttime = data[0]['#sampletime']
|
|
||||||
for d in data:
|
for d in data:
|
||||||
st = datetime.datetime.utcfromtimestamp(d['#sampletime'])
|
st = datetime.datetime.utcfromtimestamp(d['#sampletime'])
|
||||||
for key, (times, values) in graph_keys.items():
|
for key, (times, values) in graph_keys.items():
|
||||||
|
@ -168,11 +170,47 @@ def plot_frequency(data, outname, mcu):
|
||||||
fig.set_size_inches(8, 6)
|
fig.set_size_inches(8, 6)
|
||||||
fig.savefig(outname)
|
fig.savefig(outname)
|
||||||
|
|
||||||
|
def plot_temperature(data, outname, heater):
|
||||||
|
temp_key = heater + ':' + 'temp'
|
||||||
|
target_key = heater + ':' + 'target'
|
||||||
|
pwm_key = heater + ':' + 'pwm'
|
||||||
|
times = []
|
||||||
|
temps = []
|
||||||
|
targets = []
|
||||||
|
pwm = []
|
||||||
|
for d in data:
|
||||||
|
temp = d.get(temp_key)
|
||||||
|
if temp is None:
|
||||||
|
continue
|
||||||
|
times.append(datetime.datetime.utcfromtimestamp(d['#sampletime']))
|
||||||
|
temps.append(float(temp))
|
||||||
|
pwm.append(float(d[pwm_key]))
|
||||||
|
targets.append(float(d[target_key]))
|
||||||
|
# Build plot
|
||||||
|
fig, ax1 = matplotlib.pyplot.subplots()
|
||||||
|
ax1.set_title("Temperature of heater %s" % (heater,))
|
||||||
|
ax1.set_xlabel('Time')
|
||||||
|
ax1.set_ylabel('Temperature')
|
||||||
|
ax1.plot_date(times, temps, 'r', label='Measured temp', alpha=0.8)
|
||||||
|
ax1.plot_date(times, targets, 'g', label='Target', alpha=0.8)
|
||||||
|
ax2 = ax1.twinx()
|
||||||
|
ax2.set_ylabel('pwm')
|
||||||
|
ax2.plot_date(times, pwm, 'y', label='pwm', alpha=0.8)
|
||||||
|
fontP = matplotlib.font_manager.FontProperties()
|
||||||
|
fontP.set_size('x-small')
|
||||||
|
ax1.legend(loc='best', prop=fontP)
|
||||||
|
ax1.xaxis.set_major_formatter(matplotlib.dates.DateFormatter('%H:%M'))
|
||||||
|
ax1.grid(True)
|
||||||
|
fig.set_size_inches(8, 6)
|
||||||
|
fig.savefig(outname)
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
usage = "%prog [options] <logfile> <outname>"
|
usage = "%prog [options] <logfile> <outname>"
|
||||||
opts = optparse.OptionParser(usage)
|
opts = optparse.OptionParser(usage)
|
||||||
opts.add_option("-f", "--frequency", action="store_true",
|
opts.add_option("-f", "--frequency", action="store_true",
|
||||||
help="graph mcu frequency")
|
help="graph mcu frequency")
|
||||||
|
opts.add_option("-t", "--temperature", type="string", dest="heater",
|
||||||
|
default=None, help="graph heater temperature")
|
||||||
opts.add_option("-m", "--mcu", type="string", dest="mcu", default=None,
|
opts.add_option("-m", "--mcu", type="string", dest="mcu", default=None,
|
||||||
help="limit stats to the given mcu")
|
help="limit stats to the given mcu")
|
||||||
options, args = opts.parse_args()
|
options, args = opts.parse_args()
|
||||||
|
@ -182,6 +220,9 @@ def main():
|
||||||
data = parse_log(logname, options.mcu)
|
data = parse_log(logname, options.mcu)
|
||||||
if not data:
|
if not data:
|
||||||
return
|
return
|
||||||
|
if options.heater is not None:
|
||||||
|
plot_temperature(data, outname, options.heater)
|
||||||
|
return
|
||||||
if options.frequency:
|
if options.frequency:
|
||||||
plot_frequency(data, outname, options.mcu)
|
plot_frequency(data, outname, options.mcu)
|
||||||
return
|
return
|
||||||
|
|
Loading…
Reference in New Issue