From daa21616ff57944163846751614570de046e96c5 Mon Sep 17 00:00:00 2001 From: Daniel Mikula Date: Wed, 26 Apr 2023 09:31:00 +0200 Subject: [PATCH] prep for fetching data --- .gitignore | 5 +++- create_report.py | 71 ++++++++++++++++++++++-------------------------- decorators.py | 12 ++++++++ 3 files changed, 48 insertions(+), 40 deletions(-) create mode 100644 decorators.py diff --git a/.gitignore b/.gitignore index 0738441..90eebc9 100644 --- a/.gitignore +++ b/.gitignore @@ -135,4 +135,7 @@ crash.log *.tfvars #excel reports -*.xlsx \ No newline at end of file +*.xlsx + +# json files +*.json \ No newline at end of file diff --git a/create_report.py b/create_report.py index d3ad344..efdf1ee 100644 --- a/create_report.py +++ b/create_report.py @@ -7,10 +7,13 @@ from key_request_parser import krparser from datetime import datetime, timedelta import datetime -import re +import json + +import typing +from decorators import timer -def getSLO(ENV, DTAPIToken, DTENV): +def get_slo(ENV, DTAPIToken, DTENV) -> pd.DataFrame: # DTENV = base url # DTAPIToken = sec token dtclient = dynatraceAPI.Dynatrace(DTENV, DTAPIToken) @@ -29,7 +32,8 @@ def previous_week_range(date: datetime): return start_date, end_date -def main(): +@timer +def main() -> None: # Get All SLOs reportItem = {} @@ -47,7 +51,7 @@ def main(): # krp = krparser.KRParser(krparser.KROption.VALIDATE_EXISTS | krparser.KROption.VALIDATE_HASDATA ,DTURL, DTTOKEN) - slosF = getSLO(env, DTTOKEN, DTURL) + slosF = get_slo(env, DTTOKEN, DTURL) slosF = slosF[slosF["name"].str.startswith("TP_")] # parse the metric Expression to get Services and Requests @@ -55,7 +59,7 @@ def main(): krs = [] krp = krparser.KRParser( krparser.KROption.VALIDATE_EXISTS - | krparser.KROption.VALIDATE_HASDATA + # | krparser.KROption.VALIDATE_HASDATA | krparser.KROption.RESOLVESERVICES, DTURL, DTTOKEN, @@ -79,43 +83,32 @@ def main(): # "serviceName": "$servicename$" # }] + reportItem[str(env)] = {} + for kr in krs: - reportItem[kr.metadata["sloName"]] = {} - reportItem[kr.metadata["sloName"]]["sloname"] = kr.metadata["sloName"] - reportItem[kr.metadata["sloName"]]["services"] = [] + reportItem[str(env)][kr.metadata["sloName"]] = {} + reportItem[str(env)][kr.metadata["sloName"]]["sloname"] = kr.metadata[ + "sloName" + ] + reportItem[str(env)][kr.metadata["sloName"]]["services"] = [] + reportItem[str(env)][kr.metadata["sloName"]]["requests"] = [] - reportItem[kr.metadata["sloName"]]["services"].append( - {"serviceName": "$servicename$"} - ) + for key_request in kr.keyRequests: + reportItem[str(env)][kr.metadata["sloName"]]["requests"].append( + { + "displayName": key_request["displayName"], + "entityId": key_request["entityId"], + } + ) - extract_services_and_requests(kr.metadata["metricExpression"]) - - print(reportItem) - # filtering the SLO dataframe based on those dates and the service name - - -def extract_services_and_requests(metric_expression: str): - services = [] - requests = [] - - result = metric_expression.split("entityName.in") - regex_pattern = r"~(.*?)~" - method_list = ["GET", "POST", "http"] - for x in result: - matches = re.findall(regex_pattern, x) - for match in matches: - if match != "SERVICE": - # TODO: not working properly. fix needed - res = any(ele in match for ele in method_list) - if res: - requests.extend(matches) - else: - services.extend(matches) - - print(f"services: {services}") - print("-" * 80) - print(f"requests: {requests}") - return result + for service in key_request["services"]: + reportItem[str(env)][kr.metadata["sloName"]]["services"].append( + { + "type": service["type"], + "displayName": service["displayName"], + "entityId": service["entityId"], + } + ) if __name__ == "__main__": diff --git a/decorators.py b/decorators.py new file mode 100644 index 0000000..f925947 --- /dev/null +++ b/decorators.py @@ -0,0 +1,12 @@ +from time import time + + +def timer(func): + def wrapper_function(*args, **kwargs): + start = time() + result = func(*args, **kwargs) + end = time() + print(f"Function {func.__name__!r} executed in {(end - start):.4f} seconds.") + return result + + return wrapper_function