import requests requests.packages.urllib3.disable_warnings() import json from datetime import datetime,timedelta import csv import sys ### Collect params ### # Url try: sys.argv[1] except: EnvId = '{your anv id}' else: EnvId = sys.argv[1] # Token try: sys.argv[2] except: APITOKEN = '{your token}' else: APITOKEN = sys.argv[2] #Metric try: sys.argv[3] except: mz_str = '{management zone}' else: mz_str = sys.argv[3] CurrentTime = datetime.now().strftime("%H:%M") print (CurrentTime) # Set up the Dynatrace API endpoint and headers api_endpoint = "https://" + EnvId + "/api/v2/problems" headers = {'Authorization': "Api-Token "+ APITOKEN} print ("-------------------- URL : " + str(api_endpoint)) # Calculate the timestamp for yesterday yesterday = datetime.now() - timedelta(days=1) yesterday_start = datetime(yesterday.year, yesterday.month, yesterday.day) yesterday_timestamp = int(yesterday_start.timestamp() * 1000) # Init variables counter = 0 firstQuery = True pageKey = None # Start working at last to collect problems from yesterday while (firstQuery or pageKey is not None): if pageKey is not None: request_params ={"nextPageKey": pageKey} else: request_params = {"from": yesterday_timestamp,"to": yesterday_timestamp + 86400000} request_params = {"from": 'now-10d' ,"to": 'now', "fields" : 'evidenceDetails'} if mz_str != '{management zone}': request_params = {"from": 'now-10d' ,"to": 'now', "fields" : 'evidenceDetails', 'problemSelector': 'managementZones("'+mz_str+'")'} #print("--------- Request Params : "+str(request_params)) # Send the request and retrieve the response response = requests.get(api_endpoint, headers=headers, params=request_params, verify=False) #print("--- Response Status Code : "+str(response.status_code)) if response.status_code==200: if firstQuery: print("------------ Total Count : "+str(response.json()["totalCount"])) # Check if there is next page key value in the response try: pageKey=(response.json()["nextPageKey"]) except: pageKey = None # Parse the response and extract problems information rows = [] problems = response.json()["problems"] for problem in problems: counter = counter+1 affectedEntities = problem.get("affectedEntities") entitiesList = [] for enttity in affectedEntities: entitiesList.append(enttity["name"]) entitiesStr = ", \n".join(entitiesList) if problem["status"] == 'CLOSED': endtime = datetime.fromtimestamp(problem["endTime"]/1000).time().strftime("%H:%M") enddate = datetime.fromtimestamp(problem["endTime"]/1000).date() else: endtime = 0 enddate = 0 problem_api_endpoint = "https://" + EnvId + "/api/v2/problems/"+problem["problemId"] response = requests.get(problem_api_endpoint, headers=headers, verify=False) displyID = response.json()["displayId"] print ('.',end='',flush=True) rows.append([ displyID, problem["problemId"], problem["title"], problem["severityLevel"], problem["status"], problem["impactLevel"], str(datetime.fromtimestamp(problem["startTime"]/1000).date()), str(datetime.fromtimestamp(problem["startTime"]/1000).time().strftime("%H:%M")), enddate, endtime, entitiesStr ]) # Write the problems information to a CSV file path = "c:/temp/temp/" filename = f"{path}dynatrace_problems_information_{yesterday_start.strftime('%Y-%m-%d')}.csv" if firstQuery: firstQuery = False with open(filename, mode='w', newline='',encoding="utf-8") as file: writer = csv.writer(file) writer.writerow(["Prodblem disply ID","Problem ID", "Title", "Severity", "Status", "Impact Level", "Start Date","Start Time","End Date", "End Time","Affected Entities"]) writer.writerows(rows) else: with open(filename, mode='a', newline='',encoding="utf-8") as file: writer = csv.writer(file) writer.writerows(rows) # Thats the end for this run print ('') print ('------Line Counter ===>>>: '+str(counter) )