from decouple import config import yaml import requests import json import pandas as pd import time from distutils.version import LooseVersion 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/v1/oneagents" headers = { 'Content-Type': 'application/json', 'Authorization': 'Api-Token ' + DTAPIToken } r = make_request(DTAPIURL,headers) data = r.json() hosts = [] for host in data['hosts']: hosts.append(host) while 'nextPageKey' in data.keys(): if data['nextPageKey'] == None: break DTAPIURL= env + "/api/v1/oneagents?nextPageKey=" + data['nextPageKey'] r = make_request(DTAPIURL,headers) data = r.json() for host in data['hosts']: hosts.append(host) df = pd.DataFrame() mgmt = pd.DataFrame() for Host in hosts: row={'Name':Host['hostInfo']['displayName'],'availabilityState':Host['detailedAvailabilityState'],'autoUpdateSetting':Host['autoUpdateSetting'],'UpdateStatus':Host['updateStatus']} for tag in Host['hostInfo']['tags']: if tag['key'] == 'Cloud': try: row.update({ tag['key']:tag['value']}) except: row.update({ tag['key']:tag['key']}) if tag['key'] == 'Hub': try: row.update({ tag['key']:tag['value']}) except: row.update({ tag['key']:tag['key']}) if tag['key'] == 'Platform': try: row.update({ tag['key']:tag['value']}) except: row.update({ tag['key']:tag['key']}) if tag['key'] == 'licensing-base': try: row.update({ tag['key']:tag['value']}) except: row.update({ tag['key']:tag['key']}) if tag['key'] == 'PaaS': try: row.update({ tag['key']:tag['value']}) except: row.update({ tag['key']:tag['key']}) try: agentVersion = str(Host['hostInfo']['agentVersion']['major']) + '.' + str(Host['hostInfo']['agentVersion']['minor']) + '.' + str(Host['hostInfo']['agentVersion']['revision']) + '.' + Host['hostInfo']['agentVersion']['timestamp'] row.update({'agentVersion':agentVersion}) except: row.update({'agentVersion':'NOT_FOUND'}) df = df.append(row,ignore_index=True) df.to_csv(reportingFolder + friendlyName + 'oa_versions.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)