keyrequest_monitor/createKeyRequestReport.py

107 lines
3.7 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 key_request_parser import krparser
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):
fileName = "./KeyRequest_Report_"+ str(datetime.date.today()) +".xlsx"
writer = pd.ExcelWriter(fileName)
noData1M.to_excel(writer, sheet_name='noData1M')
noData1W.to_excel(writer, sheet_name='noData1W')
ignored.to_excel(writer, sheet_name='ignored')
writer.save()
writer.close()
def getStats(krs):
tmpIgnoredList=[]
for kr in [a for a in krs if len(a.keyRequests) == 0]:
tmpIgnoredList.append([kr.metadata["sloName"], kr.metadata["env"],"","",kr.metadata["filter"], kr.metadata["metricExpression"]])
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["env"], k["displayName"], k["entityId"], kr.metadata["filter"], kr.metadata["metricExpression"]])
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["env"], k["displayName"], k["entityId"], kr.metadata["filter"], kr.metadata["metricExpression"]])
# 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', 'env', 'displayName','entityId', 'filter', 'metricExpression']
ignored=pd.DataFrame(tmpIgnoredList, columns=columns, dtype = float)
noData_1M=pd.DataFrame(noData1M, columns = columns, dtype = float)
noData_1W=pd.DataFrame(noData1W, columns = columns, dtype = float)
return ignored, noData_1M, noData_1W
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 ,DTURL, DTTOKEN)
slosF=getSLO(env, DTTOKEN, DTURL)
for index, row in slosF.iterrows():
#if row['id'] == "7a7f9c66-75c1-30b9-a505-801ffa5f9e98": #or row['id'] == "ab1bf34a-10fc-3446-9cc7-79d257498a52":
krs.append(krp.parseBySLO(row))
resultSlos.extend(krs)
ignoerd,noData1M, noData1W= getStats(resultSlos)
write_to_excel(ignoerd, noData1M, noData1W)
if __name__ == "__main__":
main()