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