From 6cc300fd8798be9e30ffa7b0ce5044f10f998d57 Mon Sep 17 00:00:00 2001 From: Omer Lachish Date: Sun, 16 Feb 2020 09:32:27 +0000 Subject: [PATCH] support relative time in cloudwatch queries --- redash/query_runner/cloudwatch.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/redash/query_runner/cloudwatch.py b/redash/query_runner/cloudwatch.py index ac73298d7c..16f65e5e9a 100644 --- a/redash/query_runner/cloudwatch.py +++ b/redash/query_runner/cloudwatch.py @@ -3,7 +3,7 @@ import datetime from redash.query_runner import BaseQueryRunner, register -from redash.utils import json_dumps +from redash.utils import json_dumps, parse_human_time def parse_response(results): @@ -30,6 +30,18 @@ def parse_response(results): return rows, columns +def parse_query(query): + query = yaml.safe_load(query) + + for timeKey in ["StartTime", "EndTime"]: + if isinstance(query.get(timeKey), str): + query[timeKey] = int(parse_human_time(query[timeKey]).timestamp()) + if not query.get("EndTime"): + query["EndTime"] = int(datetime.datetime.now().timestamp()) + + return query + + class CloudWatch(BaseQueryRunner): should_annotate_query = False @@ -89,7 +101,7 @@ def get_schema(self, get_stats=False): def run_query(self, query, user): cloudwatch = self._get_client() - query = yaml.safe_load(query) + query = parse_query(query) results = [] paginator = cloudwatch.get_paginator("get_metric_data")