From 1ca195e0eda758f72d905b707b59844fa58a9ff2 Mon Sep 17 00:00:00 2001 From: Nico Vermaas <vermaas@astron.nl> Date: Sun, 9 Jun 2019 15:42:24 +0200 Subject: [PATCH] adding annotation and legend --- atdb_stats.py | 5 ++++- data/ingest_speed_imaging.args | 4 +++- dist/atdb_plot-1.0.0.tar.gz | Bin 6598 -> 3145 bytes 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/atdb_stats.py b/atdb_stats.py index 937d63d..0f66765 100644 --- a/atdb_stats.py +++ b/atdb_stats.py @@ -307,7 +307,7 @@ def do_ingest_speeds(args, starttime, endtime, plot_engine='plotly'): sorted_datapoints = sorted(datapoints, key=lambda k: k['timestamp']) # plot the results - atdb_plot.do_speed_plot(args.title, args.y_axis_title, args.query, sorted_datapoints) + atdb_plot.do_speed_plot(args.title, args.y_axis_title, args.query, args.annotate, sorted_datapoints) @@ -412,6 +412,9 @@ def main(): parser.add_argument("--query", default=None, help="query for the REST API, like 'taskID__contains=190607'") + parser.add_argument("--annotate", + default=None, + help="field to annotate datapoints in the (speed) plot, like 'taskid'") parser.add_argument("--interval", default="day", help="Shows bars per interval. Possible options: minute, hour, day, month") diff --git a/data/ingest_speed_imaging.args b/data/ingest_speed_imaging.args index f352747..7262817 100644 --- a/data/ingest_speed_imaging.args +++ b/data/ingest_speed_imaging.args @@ -5,5 +5,7 @@ --y_axis_title=I/O Speed in Gbps --starttime=2019-06-08 00:00 --endtime=2019-06-09 00:00 ---query=taskID__contains=190607 +--query=taskID__contains=190608 +--query=starttime__gt=2019-06-07T00:00:00Z&starttime__lt=2019-06-11T00:00:00Z +--annotate=taskid --plot_engine=mathplotlib \ No newline at end of file diff --git a/dist/atdb_plot-1.0.0.tar.gz b/dist/atdb_plot-1.0.0.tar.gz index 4c179a637568f50d43a611c9bd8238d833e7d00e..f295e205a10fd66827184cf2702917da251893c5 100644 GIT binary patch literal 3145 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 Qq(9haR>W^-s9<0K0O;i^M*si- literal 6598 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 -- GitLab