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: metric_str = '{The Metric}' else: metric_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} #print("--------- Request Params : "+str(request_params)) # Send the request and retrieve the response response = requests.get(api_endpoint, headers=headers, params=request_params) print("--- Response Status Code : "+str(response.status_code)) if response.status_code==200: 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 rows.append([ 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"