prep for fetching data

master
Daniel Mikula 2023-04-26 09:31:00 +02:00
parent d7f0b62a57
commit daa21616ff
3 changed files with 48 additions and 40 deletions

5
.gitignore vendored
View File

@ -135,4 +135,7 @@ crash.log
*.tfvars
#excel reports
*.xlsx
*.xlsx
# json files
*.json

View File

@ -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__":

12
decorators.py Normal file
View File

@ -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