109 lines
4.0 KiB
Python
109 lines
4.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 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"],k["services"][0]["displayName"] if len(k["services"]) > 0 else "", 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"], k["services"][0]["displayName"] if len(k["services"]) > 0 else "", 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','service','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 | krparser.KROption.RESOLVESERVICES ,DTURL, DTTOKEN)
|
|
|
|
slosF=getSLO(env, DTTOKEN, DTURL)
|
|
|
|
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'] == "8fca3fbd-87a8-3005-91c8-727825ed7d99":
|
|
#if str.startswith(row["name"],"TP_"):
|
|
krs.append(krp.parseBySLO(row))
|
|
|
|
resultSlos.extend(krs)
|
|
|
|
ignoerd,noData1M, noData1W= getStats(resultSlos)
|
|
write_to_excel(ignoerd, noData1M, noData1W)
|
|
|
|
if __name__ == "__main__":
|
|
main() |