From a4847119715ee27a694f92faa2168fc1dd3353c6 Mon Sep 17 00:00:00 2001 From: Jose Gracia Date: Wed, 7 Feb 2024 14:28:57 +0100 Subject: [PATCH] Replace explicit query string with function in TimescaleDB --- monitoring/db/scripts/get_detailed_power.py | 38 ++++++--------------- 1 file changed, 10 insertions(+), 28 deletions(-) diff --git a/monitoring/db/scripts/get_detailed_power.py b/monitoring/db/scripts/get_detailed_power.py index 6d4a20f..f9ee851 100755 --- a/monitoring/db/scripts/get_detailed_power.py +++ b/monitoring/db/scripts/get_detailed_power.py @@ -141,34 +141,17 @@ class Power: class MonitoringDB: QUERY_STRING_HAWK = """ -with _job as ( - select job_id, starttime, endtime, nodes from job where job_id='{jobid}.hawk-pbs5' -), -node_series as( - select n.name, scmcavg.id as series_id from node n - inner join (select * from label where key='node') l on n.id = l.value::int - inner join series_cmc_power_racktraynodepoweravg scmcavg on l.id = scmcavg.labels[( - select pos from label_key_position - where metric_category= 'cmc_power' - and metric_name = 'RackTrayNodePowerAvg' - and key = 'node' - )] - where n.id = any((select nodes from _job)::int[]) +-- For description of get_job_data(), see https://kb.hlrs.de/monitoring/index.php/TimescaleDB_-_Query_Guidelines#Function:_get_job_data_and_get_ai_job_data +select * from get_job_data( + '{jobid}.hawk-pbs5', + 'cmc_power_racktraynodepoweravg', -- power data source + '{interval} seconds', + array['avg'], -- aggregation: average across samples in bucket + array['time','node'] -- sort by time first than node (ascending) ) -select a.time, ns.name, a.value from ( - select - time_bucket(extract ('epoch' from '{interval} seconds'::interval)::int*1000, cmcavg.ts) as time, - cmcavg.series_id::varchar, - avg(cmcavg.val) AS value - from cmc_power_racktraynodepoweravg cmcavg - where - ts <= (select endtime from _job) - and ts >= (select starttime from _job) - and series_id = Any(select series_id from node_series) - group by time, cmcavg.series_id order by time desc) a -inner join node_series ns on a.series_id::int = ns.series_id; - """ - +as t(time bigint, name varchar, avg double precision); +""" + def __init__(self, verbose): self.connection = self.init_db(verbose) @@ -185,7 +168,6 @@ inner join node_series ns on a.series_id::int = ns.series_id; @classmethod def build_query(cls, jobid, interval): - """Query taken from https://kb.hlrs.de/monitoring/index.php/TimescaleDB_-_Query_Guidelines#Power_by_Job_Query""" import sqlalchemy as db query_string = cls.QUERY_STRING_HAWK return db.text(query_string.format(jobid=jobid, interval=interval))