keyrequest_monitor/createKeyRequestReport.py

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()