keyrequest_monitor/createKeyRequestReport.py

135 lines
4.6 KiB
Python

#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, 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(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'] == "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('./slo_parameter.yaml')