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 GatherDeepMonitoring(DTAPIToken, DTENV,friendlyName): reportingFolder = config('REPORTING_FOLDER') env = DTENV DTAPIToken = DTAPIToken #DTAPIURL = env + "/api/v1/entity/infrastructure/processes?relativeTime=5mins&tag=[CONTEXTLESS]Environment:PROD&expectedMonitoringState=ON" DTAPIURL = env + "/api/v1/entity/infrastructure/processes?tag=[CONTEXTLESS]compass-id" headers = { 'Content-Type': 'application/json', 'Authorization': 'Api-Token ' + DTAPIToken } #r = requests.get(DTAPIURL,headers=headers) r = make_request(DTAPIURL,headers) #data = r.json() df = pd.DataFrame() for pg in r.json(): row = {'PGName':pg['displayName']} row.update({'ExpectedMonitoringState': pg['monitoringState']['expectedMonitoringState']}) row.update({'RestartRequired': pg['monitoringState']['restartRequired']}) try: for mgmtZone in pg['managementZones']: row.update({'ManagementZone':mgmtZone['name']}) except: row.update({'ManagementZone':'NONE'}) for item in pg['metadata']: if 'kubernetesNamespaces' in item: row.update({'kubernetesNamespaces': pg['metadata']['kubernetesNamespaces']}) if 'kubernetesAnnotations' in item: for annotation in pg['metadata']['kubernetesAnnotations']: row.update({ annotation : pg['metadata']['kubernetesAnnotations'][annotation]}) for tag in pg['tags']: try: row.update({ tag['key']:tag['value']}) except: row.update({ tag['key']:tag['key']}) df = df.append(row,ignore_index=True) #total = data['totalCount'] #pageSize = data['pageSize'] #print(data) now=datetime.now() strnow = now.strftime("%Y%m%d_%H%M") df.to_csv(reportingFolder + friendlyName + '_monitoredProcesses_' + strnow + '.csv') ################# ##main ################# 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') GatherDeepMonitoring(DTTOKEN,DTURL,item) else: print("token not found, skipping " + item)