from decouple import config import yaml import requests import json import pandas as pd from datetime import datetime def make_request(url, headers,verify,parameters): try: response = requests.get(url, headers=headers,verify=verify,params=parameters) 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 GatherReportingInfo(DTAPIToken, DTENV,friendlyName): env = DTENV DTAPIToken = DTAPIToken if (DTENV.find('dynatracemgd') != -1): verify=False else: verify=True DTAPIURL= env + "/api/v2/slo" headers = { 'Content-Type': 'application/json', 'Authorization': 'Api-Token ' + DTAPIToken } date_report = date_from days = (date_to - date_from).days print (str(days) + " days within reproting period") writer = pd.ExcelWriter(friendlyName+'QM_.xlsx') while (date_report<=date_to): date_report_end = date_report + datetime.timedelta(hours=days*24) millisec_date_report = date_report.timestamp() * 1000 millisec_date_report_end = date_report_end.timestamp() * 1000 parameters = { "pageSize": 25, "from": int(millisec_date_report), "to": int(millisec_date_report_end), "timeFrame": "GTF", "evaluate": True, "sloSelector": "text(\"CoCo-QM-Report\")" } r = make_request(DTAPIURL,headers,verify,parameters) content = r.json() df = pd.json_normalize(content['slo']) # Save to excel file/sheet df.to_excel(writer, sheet_name=str(date_report).split(" ")[0]) date_report = date_report + datetime.timedelta(hours=days*24) writer.save() with open('./environment.yaml') as file: doc = yaml.safe_load(file) for item, doc in doc.items(): token = dict(doc[2]) url = dict(doc[1]) print("Crawling through: " + item) print("Check if token exists in environment...") 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') date_from = datetime.strptime(config('FROM_DATE'), '%Y-%m-%d') date_to = datetime.strptime(config('TO_DATE'), '%Y-%m-%d') GatherReportingInfo(DTTOKEN,DTURL,item) else: print("token not found, skipping " + item)