import yaml from decouple import config import dynatraceAPI import pandas as pd from pagination import Pagionation from key_request_parser import krparser from datetime import datetime, timedelta import datetime import re def getSLO(ENV, DTAPIToken, DTENV): # DTENV = base url # DTAPIToken = sec token dtclient = dynatraceAPI.Dynatrace(DTENV, DTAPIToken) my_params_report = {'pageSize': 25} # gets all slos and filter later api_url_report = "/api/v2/slo" pages = dtclient.returnPageination(api_url_report, my_params_report, "slo") df = pd.DataFrame(pages.elements) df["env"]=ENV return df def previous_week_range(date: datetime): start_date = date + timedelta(-date.weekday(), weeks=-1) end_date = date + timedelta(-date.weekday() -1) return start_date, end_date def main(): #Get All SLOs reportItem={} with open('./environment.yaml') as file: env_doc = yaml.safe_load(file) for env, doc in env_doc.items(): token = dict(doc[2]) url = dict(doc[1]) 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') #krp = krparser.KRParser(krparser.KROption.VALIDATE_EXISTS | krparser.KROption.VALIDATE_HASDATA ,DTURL, DTTOKEN) slosF = getSLO(env, DTTOKEN, DTURL) slosF = slosF[slosF['name'].str.startswith('TP_')] #parse the metric Expression to get Services and Requests krs=[] krp = krparser.KRParser(krparser.KROption.VALIDATE_EXISTS | krparser.KROption.VALIDATE_HASDATA | krparser.KROption.RESOLVESERVICES, DTURL, DTTOKEN) for index, row in slosF.iterrows(): krs.append(krp.parseBySLO(row)) x=0 #SLO Name | SERVICE | PROCESS GRUPPE | TAGS {"sloname": { "sloname":$sloname$, "services":[{ "serviceName": "$servicename$" }] }, "sloname": { "sloname":$sloname$, "services":[{ "serviceName": "$servicename$" }] # { "SLO 1": { "sloname": "SLO 1", "services": [ { "serviceName": "Service 1", "processGroup": "Process Group 1", "tags": ["tag1", "tag2"] }, { "serviceName": "Service 2", "processGroup": "Process Group 2", "tags": ["tag3", "tag4"] } ] }, "SLO 2": { "sloname": "SLO 2", "services": [ { "serviceName": "Service 3", "processGroup": "Process Group 3", "tags": ["tag5", "tag6"] } ] } } # }} for kr in krs: reportItem[kr.metadata.name]= # DEBUG # print(krs) for x in krs: print(x.metadata) # regex ~ XYZ ~ #filtering the SLO dataframe based on those dates and the service name # import datetime # import re #extract all the service names that start with "TP_" metric_expression = 'sum(duration), filter(entity.service.name, beginsWith("TP_"))' # Define regex pattern to match service names regex_pattern = r'beginsWith\("TP_(.*?)"\)' # Find all matches of pattern in metric expression matches = re.findall(regex_pattern, metric_expression) print(matches) #get detail info service names import requests import json environment_id = "ENVIRONMENT_ID" api_token = "dt0c01.MBX344ELRJNDGSWGOSK3JBE5.KHJ6BLKLZ6UB6NKJQRXYINLDCKN36HGOK6ECYAOZ3REF2KHWM2NIBIKOITVXCWUT" headers = {"Authorization": "Api-Token {}".format(api_token)} # url = "https://xxu26128.live.dynatrace.com/api/v1/entity/services".format(environment_id) params = {"filter": "displayName LIKE 'TP_%'"} # response = requests.get(url, headers=headers, params=params) # response_json = json.loads(response.text) # for service in response_json["entities"]: # display_name = service["displayName"] # print("Service Name: {0}".format(display_name)) if __name__ == "__main__": main()