153 lines
7.0 KiB
Python
153 lines
7.0 KiB
Python
from decouple import config
|
|
# import sys
|
|
import yaml
|
|
import datetime
|
|
# import time
|
|
import pandas as pd
|
|
# import argparse
|
|
import warnings
|
|
# import os
|
|
import dynatraceAPI
|
|
# from pagination import Pagionation
|
|
# import types
|
|
from KRParser import krparser
|
|
#from key_request_parser import krparser
|
|
import time
|
|
#from datetime import datetime
|
|
warnings.filterwarnings("ignore")
|
|
|
|
|
|
def getSLO(ENV, DTAPIToken, DTENV):
|
|
# 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 write_to_excel(ignored, noData1M, noData1W, all_TP_slos):
|
|
|
|
fileName = "./KeyRequest_Report_"+ str(datetime.date.today()) +".xlsx"
|
|
|
|
writer = pd.ExcelWriter(fileName)
|
|
|
|
if noData1M["slo"].count() > 0:
|
|
noData1M.to_excel(writer, sheet_name='noData1M')
|
|
|
|
if noData1W["slo"].count() > 0:
|
|
noData1W.to_excel(writer, sheet_name='noData1W')
|
|
|
|
if ignored["slo"].count() > 0:
|
|
ignored.to_excel(writer, sheet_name='ignored')
|
|
|
|
if all_TP_slos["slo"].count() > 0:
|
|
all_TP_slos.to_excel(writer, sheet_name='TP_')
|
|
|
|
|
|
writer.save()
|
|
writer.close()
|
|
|
|
|
|
def getStats(krs):
|
|
|
|
ts = time.time()
|
|
epoch = datetime.datetime.now().timestamp()
|
|
tmpIgnoredList=[]
|
|
for kr in [a for a in krs if len(a.keyRequests) == 0]:
|
|
tmpIgnoredList.append([kr.metadata["sloName"], kr.metadata["sloId"], kr.metadata["env"],"","","","","",kr.metadata["filter"], kr.metadata["metricExpression"], "", epoch])
|
|
|
|
|
|
|
|
noData1M=[]
|
|
for kr in [s for s in krs if s.hasNoData("1M")==True]:
|
|
for k in kr.getKeyRequestByHasData("1M"):
|
|
noData1M.append([kr.metadata["sloName"], kr.metadata["sloId"], kr.metadata["env"], k["displayName"], k["entityId"],k["services"][0]["displayName"] if len(k["services"]) > 0 else "",
|
|
[x for x in k["services"][0]["tags"] if x['key']=="compass-id"][0]["value"] if len(k["services"]) > 0 and len(k["services"][0]["tags"]) > 0 and len([x for x in k["services"][0]["tags"] if x['key']=="compass-id"]) > 0 else "",
|
|
k["_mInSloDef"],
|
|
kr.metadata["filter"],
|
|
kr.metadata["metricExpression"],
|
|
kr.matchedGroups._list[0]['pattern'], epoch])
|
|
|
|
noData1W=[]
|
|
for kr in [s for s in krs if s.hasNoData("1W")==True]:
|
|
for k in kr.getKeyRequestByHasData("1W"):
|
|
noData1W.append([kr.metadata["sloName"], kr.metadata["sloId"], kr.metadata["env"], k["displayName"], k["entityId"], k["services"][0]["displayName"] if len(k["services"]) > 0 else "",
|
|
[x for x in k["services"][0]["tags"] if x['key']=="compass-id"][0]["value"] if len(k["services"]) > 0 and len(k["services"][0]["tags"]) > 0 and len([x for x in k["services"][0]["tags"] if x['key']=="compass-id"]) > 0 else "",
|
|
k["_mInSloDef"],
|
|
kr.metadata["filter"],
|
|
kr.metadata["metricExpression"],
|
|
kr.matchedGroups._list[0]['pattern'], epoch])
|
|
|
|
# noData1W=[]
|
|
# for kr in [s for s in krs if s.hasNoData1WKeyRequests()==True]:
|
|
# for k in kr.getNoData1WKeyRequests():
|
|
# noData1W.append([kr.metadata["sloName"], kr.metadata["env"], k["displayName"], k["entityId"], kr.metadata["filter"], kr.metadata["metricExpression"]])
|
|
|
|
columns =['slo', 'sloID', 'env', 'displayName','entityId','service','compass-id','InSloDef','filter', 'metricExpression','pattern', 'timestamp']
|
|
ignored=pd.DataFrame(tmpIgnoredList, columns=columns)
|
|
noData_1M=pd.DataFrame(noData1M, columns = columns)
|
|
noData_1W=pd.DataFrame(noData1W, columns = columns)
|
|
|
|
allTPSlos=[]
|
|
for kr in [a for a in krs if len(a.keyRequests) != 0 and a.metadata["sloName"].startswith("TP_")]:
|
|
for k in kr.keyRequests:
|
|
allTPSlos.append([kr.metadata["sloName"], kr.metadata["sloId"], kr.metadata["env"], k["displayName"], k["entityId"],
|
|
k["count"]["1W"], k["count"]["1M"],
|
|
k["services"][0]["displayName"] if len(k["services"]) > 0 else "",
|
|
[x for x in k["services"][0]["tags"] if x['key']=="compass-id"][0]["value"] if len(k["services"]) > 0 and len(k["services"][0]["tags"]) > 0 and len([x for x in k["services"][0]["tags"] if x['key']=="compass-id"]) > 0 else "",
|
|
k["_mInSloDef"],
|
|
kr.metadata["filter"], kr.metadata["metricExpression"], kr.matchedGroups._list[0]['pattern'], epoch])
|
|
|
|
columns_ext =['slo', 'sloID', 'env', 'displayName','entityId','Count_1W', 'Count_1M','service','compass-id','InSloDef', 'filter', 'metricExpression', 'pattern', 'timestamp']
|
|
all_TP_slos=pd.DataFrame(allTPSlos, columns = columns_ext)
|
|
|
|
return ignored, noData_1M, noData_1W, all_TP_slos
|
|
|
|
def main():
|
|
|
|
resultSlos=[]
|
|
|
|
with open('./environment.yaml') as file:
|
|
env_doc = yaml.safe_load(file)
|
|
|
|
#iterate through all environments
|
|
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')
|
|
|
|
krs=[]
|
|
#krp = krparser.KRParser(krparser.KROption.VALIDATE_EXISTS | krparser.KROption.VALIDATE_HASDATA | krparser.KROption.RESOLVESERVICES ,DTURL, DTTOKEN)
|
|
krp = krparser.KRParser(name=env,options=krparser.KROption.VALIDATE_HASDATA | krparser.KROption.RESOLVESERVICES, config={"threads":10, "serviceLookupParams":{"fields":"tags"}, "extendResultObjects":{"env":env}}, DTAPIURL=DTURL, DTAPIToken=DTTOKEN)
|
|
|
|
slosF=getSLO(env, DTTOKEN, DTURL)
|
|
#slosF=slosF.loc[slosF['id'] == "a96a4031-e201-3e98-b739-27be7dc85a09"]
|
|
#slosF=slosF.loc[slosF['id'] == "0f23cb75-4c94-3204-944d-cdc751ea625d"]
|
|
krs=krp.parse(slosF)
|
|
# for index, row in slosF.iterrows():
|
|
# #if row['id'] == "1ec65bfa-8d66-3215-a094-c289da440f32": #"1de2685e-0f06-370c-8b25-2326426e89c3": #or row['id'] == "ab1bf34a-10fc-3446-9cc7-79d257498a52":
|
|
# #if row['id'] == "a01cc45e-8369-3623-a156-1b261e6f4c98":
|
|
# #if str.startswith(row["name"],"TP_"):
|
|
# krs.append(krp.parseBySLO(row))
|
|
|
|
resultSlos.extend(krs)
|
|
|
|
|
|
|
|
# for slo in resultSlos:
|
|
# if slo.key
|
|
|
|
ignoerd, noData1M, noData1W, all_TP_slos= getStats(resultSlos)
|
|
write_to_excel(ignoerd, noData1M, noData1W, all_TP_slos)
|
|
|
|
if __name__ == "__main__":
|
|
main() |