116 lines
3.8 KiB
Python
116 lines
3.8 KiB
Python
import yaml
|
|
from decouple import config
|
|
import dynatraceAPI
|
|
import pandas as pd
|
|
from pagination import Pagionation
|
|
from key_request_parser import krparser
|
|
|
|
from datetime import datetime, timedelta
|
|
import datetime
|
|
import json
|
|
|
|
import typing
|
|
from decorators import timer
|
|
|
|
|
|
def get_slo(ENV, DTAPIToken, DTENV) -> pd.DataFrame:
|
|
# DTENV = base url
|
|
# DTAPIToken = sec token
|
|
dtclient = dynatraceAPI.Dynatrace(DTENV, DTAPIToken)
|
|
my_params_report = {"pageSize": 25}
|
|
# gets all slos and filter later
|
|
api_url_report = "/api/v2/slo"
|
|
pages = dtclient.returnPageination(api_url_report, my_params_report, "slo")
|
|
df = pd.DataFrame(pages.elements)
|
|
df["env"] = ENV
|
|
return df
|
|
|
|
|
|
def previous_week_range(date: datetime):
|
|
start_date = date + timedelta(-date.weekday(), weeks=-1)
|
|
end_date = date + timedelta(-date.weekday() - 1)
|
|
return start_date, end_date
|
|
|
|
|
|
@timer
|
|
def main() -> None:
|
|
# Get All SLOs
|
|
|
|
reportItem = {}
|
|
with open("./environment.yaml") as file:
|
|
env_doc = yaml.safe_load(file)
|
|
|
|
for env, doc in env_doc.items():
|
|
token = dict(doc[2])
|
|
url = dict(doc[1])
|
|
|
|
if config(token.get("env-token-name")) != "":
|
|
print("Gather data, hold on a minute")
|
|
DTTOKEN = config(token.get("env-token-name"))
|
|
DTURL = url.get("env-url")
|
|
|
|
# krp = krparser.KRParser(krparser.KROption.VALIDATE_EXISTS | krparser.KROption.VALIDATE_HASDATA ,DTURL, DTTOKEN)
|
|
|
|
slosF = get_slo(env, DTTOKEN, DTURL)
|
|
slosF = slosF[slosF["name"].str.startswith("TP_")]
|
|
|
|
# parse the metric Expression to get Services and Requests
|
|
|
|
krs = []
|
|
krp = krparser.KRParser(
|
|
krparser.KROption.VALIDATE_EXISTS
|
|
# | krparser.KROption.VALIDATE_HASDATA
|
|
| krparser.KROption.RESOLVESERVICES,
|
|
DTURL,
|
|
DTTOKEN,
|
|
)
|
|
|
|
for index, row in slosF.iterrows():
|
|
krs.append(krp.parseBySLO(row))
|
|
|
|
# x = 0
|
|
|
|
# SLO Name | SERVICE | PROCESS GRUPPE | TAGS
|
|
# {"sloname": {
|
|
# "sloname":$sloname$,
|
|
# "services":[{
|
|
# "serviceName": "$servicename$"
|
|
# }]
|
|
# },
|
|
# "sloname": {
|
|
# "sloname":$sloname$,
|
|
# "services":[{
|
|
# "serviceName": "$servicename$"
|
|
# }]
|
|
|
|
reportItem[str(env)] = {}
|
|
|
|
for kr in krs:
|
|
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"] = []
|
|
|
|
for key_request in kr.keyRequests:
|
|
reportItem[str(env)][kr.metadata["sloName"]]["requests"].append(
|
|
{
|
|
"displayName": key_request["displayName"],
|
|
"entityId": key_request["entityId"],
|
|
}
|
|
)
|
|
|
|
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__":
|
|
main()
|