#from tracemalloc import start from decouple import config import sys import yaml import datetime import time import pandas as pd #import requests #import openpyxl import argparse import warnings import os #import re #import glob import dynatraceAPI from pagination import Pagionation import types #import SLO #from patterns.Pattern1 import Pattern1, Pattern2, Pattern3, Pattern4 #import urllib.parse from key_request_parser import krparser warnings.filterwarnings("ignore") #patterns=[Pattern1(), Pattern2(), Pattern3(), Pattern4()] # def get_request(url, headers): # try: # response = requests.get(url, headers=headers) # response.raise_for_status() # except requests.exceptions.HTTPError as errh: # return "An Http Error occurred:" + repr(errh) # except requests.exceptions.ConnectionError as errc: # return "An Error Connecting to the API occurred:" + repr(errc) # except requests.exceptions.Timeout as errt: # return "A Timeout Error occurred:" + repr(errt) # except requests.exceptions.RequestException as err: # return "An Unknown Error occurred" + repr(err) # return response 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, notExists): fileName = "./KeyRequest_Report_"+ str(datetime.date.today()) +".xlsx" writer = pd.ExcelWriter(fileName) notExists.to_excel(writer, sheet_name='notExists') 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"]]) keyReuqestsNotExists=[] for kr in [s for s in krs if s.hasNotExistingKeyRequests()==True]: for k in kr.getNotExistingKeyRequests(): keyReuqestsNotExists.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) notExists=pd.DataFrame(keyReuqestsNotExists, columns = columns, dtype = float) return ignored, notExists def main(slo_path): 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'] == "69c57b3f-725f-36fb-88ef-fb64b03eb0ce": #or row['id'] == "ab1bf34a-10fc-3446-9cc7-79d257498a52": krs.append(krp.parseBySLO(row)) resultSlos.extend(krs) ignoerd,notExists= getStats(resultSlos) write_to_excel(ignoerd,notExists) if __name__ == "__main__": main('./slo_parameter.yaml')