from decouple import config import yaml import requests import json import pandas as pd from datetime import datetime def make_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 GatherReportingInfo(DTAPIToken, DTENV,friendlyName): reportingFolder = config('REPORTING_FOLDER') env = DTENV DTAPIToken = DTAPIToken DTAPIURL= env + "/api/config/v1/managementZones/" headers = { 'Content-Type': 'application/json', 'Authorization': 'Api-Token ' + DTAPIToken } #r = requests.get(DTAPIURL,headers=headers) r = make_request(DTAPIURL,headers) df = pd.DataFrame() mgmt = pd.DataFrame() now=datetime.now() strnow = now.strftime("%Y%m%d_%H%M") for mgmtZone in r.json()['values']: mgmtZoneName = mgmtZone['name'] #Remove "CD_"-prefix if(mgmtZoneName.startswith('CD_')): mgmtZoneName = mgmtZoneName[3:] row={'MgmtZone':mgmtZoneName,'ZoneID':mgmtZone['id']} mgmt = mgmt.append(row,ignore_index=True) ##GetRestartRequiredServices DTAPIURL= env + "/api/v1/entity/infrastructure/processes?relativeTime=5mins&actualMonitoringState=OFF&expectedMonitoringState=ON&managementZone="+mgmtZone['id'] #response = requests.get(DTAPIURL, headers=headers) response = make_request(DTAPIURL,headers) for pgi in response.json(): if(pgi['monitoringState']['restartRequired'] == True): row={'MgmtZone':mgmtZoneName,'RestartRequired':pgi['monitoringState']['restartRequired'],'ProcessToRestart':pgi['displayName']} for tag in pgi['tags']: try: row.update({ tag['key']:tag['value']}) except: row.update({ tag['key']:tag['key']}) df = df.append(row,ignore_index=True) del response df.to_csv(reportingFolder + friendlyName + '_Restart_' + strnow +'.csv') mgmt.to_csv(reportingFolder + friendlyName + '_MgtmZone_' + strnow +'.csv') #Gather Alertingprofiles DTAPIURL= env + "/api/config/v1/alertingProfiles" #response = requests.get(DTAPIURL, headers=headers) response = make_request(DTAPIURL,headers) data = response.json() alertingsprofiles = pd.json_normalize(data['values']) alertingsprofiles['clean_name'] = alertingsprofiles['name'].apply(lambda x: x[3:] if x.startswith('CD_') else x) alertingsprofiles['clean_name'] = alertingsprofiles['clean_name'].apply(lambda x: x[:-5] if x.endswith(' PROD') else x) alertingsprofiles['clean_name'] = alertingsprofiles['clean_name'].apply(lambda x: x[:-4] if x.endswith(' E2E') else x) alertingsprofiles.to_csv(reportingFolder + friendlyName + '_AltertingProfiles_' + strnow +'.csv') #Gather Dashboards DTAPIURL = env + "/api/config/v1/dashboards" #response = requests.get(DTAPIURL, headers=headers) response = make_request(DTAPIURL,headers) data = response.json() dashboards = pd.json_normalize(data['dashboards']) dashboards['clean_name'] = dashboards['name'].apply(lambda x: x[3:] if x.startswith('CD_') else x) dashboards['clean_name'] = dashboards['clean_name'].apply(lambda x: x[:-5] if x.endswith(' PROD') else x) dashboards['clean_name'] = dashboards['clean_name'].apply(lambda x: x[:-4] if x.endswith(' E2E') else x) dashboards['clean_name'] = dashboards['clean_name'].apply(lambda x: x[:-9] if x.endswith(' PROD-E2E') else x) dashboards.to_csv(reportingFolder + friendlyName + '_Dashboards_' + strnow +'.csv') 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') GatherReportingInfo(DTTOKEN,DTURL,item) else: print("token not found, skipping " + item)