Skip to content
This repository was archived by the owner on Sep 22, 2024. It is now read-only.

Commit 6b88cc6

Browse files
committed
PAF-18 #Replace common URLs with constants
1 parent 4b7495f commit 6b88cc6

File tree

7 files changed

+57
-39
lines changed

7 files changed

+57
-39
lines changed

dynatrace/cluster/sso.py

+5-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
"""SSO Operations for Dynatrace"""
22
import dynatrace.requests.request_handler as rh
33

4+
ENDPOINT = "sso/ssoProvider"
5+
46
def disable_sso (cluster):
57
"""Disable SSO Sign-in"""
68
disable_payload = {
@@ -10,7 +12,7 @@ def disable_sso (cluster):
1012
"ssoGroupsEnabled": False,
1113
"ssoLoginDisabled": True
1214
}
13-
response = rh.cluster_post(cluster, "sso/ssoProvider", json=disable_payload)
15+
response = rh.cluster_post(cluster, ENDPOINT, json=disable_payload)
1416
return response.status_code
1517

1618
def enable_sso(cluster, disable_local=False, groups_enabled=False, is_openid=False):
@@ -30,9 +32,9 @@ def enable_sso(cluster, disable_local=False, groups_enabled=False, is_openid=Fal
3032
if is_openid:
3133
enable_payload['ssoProvider'] = "OIDC"
3234

33-
response = rh.cluster_post(cluster, "sso/ssoProvider", json=enable_payload)
35+
response = rh.cluster_post(cluster, ENDPOINT, json=enable_payload)
3436
return response.status_code
3537

3638
def get_sso_status (cluster):
37-
response = rh.cluster_get(cluster, "sso/ssoProvider")
39+
response = rh.cluster_get(cluster, ENDPOINT)
3840
return response.json()

dynatrace/requests/request_handler.py

+18-13
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,11 @@
44
import requests
55
from urllib3.exceptions import InsecureRequestWarning
66

7+
HTTPS_STR = "https://"
8+
CLUSTER_V1_PATH = "/api/v1.0/onpremise/"
9+
ENV_API_V1 = "/api/v1/"
10+
CONFIG_API_V1 = "/api/config/v1/"
11+
712
OLD_MERGE_ENVIRONMENT_SETTINGS = requests.Session.merge_environment_settings
813

914
@contextlib.contextmanager
@@ -56,7 +61,7 @@ def sanitize_endpoint (endpoint):
5661

5762
def generate_tenant_url(cluster, tenant):
5863
"""Generate URL based on SaaS or Managed"""
59-
url = "https://"
64+
url = HTTPS_STR
6065
if cluster["is_managed"]:
6166
url = url + cluster['url'] + "/e/" + cluster['tenant'][tenant]
6267
else:
@@ -76,7 +81,7 @@ def cluster_get(cluster, endpoint, params=None):
7681
params['Api-Token'] = cluster['cluster_token']
7782

7883
response = requests.get(
79-
"https://" + cluster['url'] + "/api/v1.0/onpremise/" + endpoint,
84+
HTTPS_STR + cluster['url'] + CLUSTER_V1_PATH + endpoint,
8085
params=params,
8186
verify=False
8287
)
@@ -97,7 +102,7 @@ def cluster_post(cluster, endpoint, params=None, json=None):
97102
params['Api-Token'] = cluster['cluster_token']
98103

99104
response = requests.post(
100-
"https://" + cluster['url'] + "/api/v1.0/onpremise/" + endpoint,
105+
HTTPS_STR + cluster['url'] + CLUSTER_V1_PATH + endpoint,
101106
params=params,
102107
json=json,
103108
verify=False
@@ -118,7 +123,7 @@ def cluster_put(cluster, endpoint, params=None, json=None):
118123
params['Api-Token'] = cluster['cluster_token']
119124

120125
response = requests.put(
121-
"https://" + cluster['url'] + "/api/v1.0/onpremise/" + endpoint,
126+
HTTPS_STR + cluster['url'] + CLUSTER_V1_PATH + endpoint,
122127
params=params,
123128
json=json,
124129
verify=False
@@ -138,7 +143,7 @@ def cluster_delete(cluster, endpoint, params=None, json=None):
138143
with no_ssl_verification():
139144
params['Api-Token'] = cluster['cluster_token']
140145
response = requests.delete(
141-
"https://" + cluster['url'] + "/api/v1.0/onpremise/" + endpoint,
146+
HTTPS_STR + cluster['url'] + CLUSTER_V1_PATH + endpoint,
142147
params=params,
143148
json=json,
144149
verify=False
@@ -156,7 +161,7 @@ def env_get(cluster, tenant, endpoint, params=None):
156161
with no_ssl_verification():
157162
params['Api-Token'] = cluster['api_token'][tenant]
158163
response = requests.get(
159-
generate_tenant_url(cluster, tenant) + "/api/v1/" + endpoint,
164+
generate_tenant_url(cluster, tenant) + ENV_API_V1 + endpoint,
160165
params=params,
161166
verify=False
162167
)
@@ -174,7 +179,7 @@ def env_post(cluster, tenant, endpoint, params=None, json=None):
174179
params['Api-Token'] = cluster['api_token'][tenant]
175180

176181
response = requests.post(
177-
generate_tenant_url(cluster, tenant) + "/api/v1/" + endpoint,
182+
generate_tenant_url(cluster, tenant) + ENV_API_V1 + endpoint,
178183
params=params,
179184
verify=False,
180185
json=json
@@ -193,7 +198,7 @@ def env_put(cluster, tenant, endpoint, params=None, json=None):
193198
params['Api-Token'] = cluster['api_token'][tenant]
194199

195200
response = requests.put(
196-
generate_tenant_url(cluster, tenant) + "/api/v1/" + endpoint,
201+
generate_tenant_url(cluster, tenant) + ENV_API_V1 + endpoint,
197202
params=params,
198203
verify=False,
199204
json=json
@@ -211,7 +216,7 @@ def env_delete(cluster, tenant, endpoint, params=None):
211216
with no_ssl_verification():
212217
params['Api-Token'] = cluster['api_token'][tenant]
213218
response = requests.delete(
214-
generate_tenant_url(cluster, tenant) + "/api/v1/" + endpoint,
219+
generate_tenant_url(cluster, tenant) + ENV_API_V1 + endpoint,
215220
params=params,
216221
verify=False
217222
)
@@ -230,7 +235,7 @@ def config_get(cluster, tenant, endpoint, params=None, json=None):
230235
params['Api-Token'] = cluster['api_token'][tenant]
231236

232237
response = requests.get(
233-
generate_tenant_url(cluster, tenant) + "/api/config/v1/" + endpoint,
238+
generate_tenant_url(cluster, tenant) + CONFIG_API_V1 + endpoint,
234239
params=params,
235240
verify=False,
236241
json=json
@@ -249,7 +254,7 @@ def config_post(cluster, tenant, endpoint, params=None, json=None):
249254
params['Api-Token'] = cluster['api_token'][tenant]
250255

251256
response = requests.post(
252-
generate_tenant_url(cluster, tenant) + "/api/config/v1/" + endpoint,
257+
generate_tenant_url(cluster, tenant) + CONFIG_API_V1 + endpoint,
253258
params=params,
254259
verify=False,
255260
json=json
@@ -268,7 +273,7 @@ def config_put(cluster, tenant, endpoint, params=None, json=None):
268273
params['Api-Token'] = cluster['api_token'][tenant]
269274

270275
response = requests.put(
271-
generate_tenant_url(cluster, tenant) + "/api/config/v1/" + endpoint,
276+
generate_tenant_url(cluster, tenant) + CONFIG_API_V1 + endpoint,
272277
params=params,
273278
verify=False,
274279
json=json
@@ -287,7 +292,7 @@ def config_delete(cluster, tenant, endpoint, params=None, json=None):
287292
params['Api-Token'] = cluster['api_token'][tenant]
288293

289294
response = requests.delete(
290-
generate_tenant_url(cluster, tenant) + "/api/config/v1/" + endpoint,
295+
generate_tenant_url(cluster, tenant) + CONFIG_API_V1 + endpoint,
291296
params=params,
292297
verify=False,
293298
json=json

dynatrace/tenant/maintenance.py

+8-5
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44
import dynatrace.requests.request_handler as rh
55
import user_variables as uv
66

7+
8+
MZ_ENDPOINT = "/maintenanceWindows/"
9+
710
class InvalidDateFormatException(ValueError):
811
def __init__(self, required_format):
912
self.required_format = required_format
@@ -114,28 +117,28 @@ def generate_schedule(recurrence_type, start_time, duration, range_start, range_
114117

115118
def create_window (cluster, tenant, json):
116119
"""Create Maintenance Window"""
117-
response = rh.config_post(cluster, tenant, '/maintenanceWindows', json=json)
120+
response = rh.config_post(cluster, tenant, MZ_ENDPOINT, json=json)
118121
return response.status_code
119122

120123
def update_window (cluster, tenant, window_id, json):
121124
"""Update Maintenance Window"""
122-
response = rh.config_put(cluster, tenant, '/maintenanceWindows/' + window_id, json=json)
125+
response = rh.config_put(cluster, tenant, MZ_ENDPOINT + window_id, json=json)
123126
return response.status_code
124127

125128
def delete_window (cluster, tenant, window_id):
126129
"""Delete Maintenance Window"""
127-
response = rh.config_delete(cluster, tenant, '/maintenanceWindows/' + window_id)
130+
response = rh.config_delete(cluster, tenant, MZ_ENDPOINT + window_id)
128131
return response.status_code
129132

130133
def get_windows (cluster, tenant):
131134
"""Return List of Maintenance Windows in Effect"""
132-
response = rh.config_get(cluster, tenant, '/maintenanceWindows')
135+
response = rh.config_get(cluster, tenant, MZ_ENDPOINT)
133136
return response.json()
134137

135138

136139
def get_window (cluster, tenant, window_id):
137140
"""Return Maintenance Window Details"""
138-
response = rh.config_get(cluster, tenant, '/maintenanceWindows/' + window_id)
141+
response = rh.config_get(cluster, tenant, MZ_ENDPOINT + window_id)
139142
return response.json()
140143

141144
def parse_tag(tag_string):

dynatrace/tenant/request_attributes.py

+7-5
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,12 @@
33
import json
44
from dynatrace.requests import request_handler as rh
55

6+
ENDPOINT = "/service/requestAttributes/"
7+
68
def pull_to_files(cluster, tenant, ignore_disabled=True):
79
"""Pull files from an environment to local"""
810
# API Calls needed: Pull RA, take the ID and pull the details of each RA
9-
all_ra_call = rh.config_get(cluster, tenant, "/service/requestAttributes")
11+
all_ra_call = rh.config_get(cluster, tenant, ENDPOINT)
1012
all_ra_json = all_ra_call.json()
1113
all_ra_json = all_ra_json['values']
1214
#print (json.dumps(all_ra_json, indent=2))
@@ -15,7 +17,7 @@ def pull_to_files(cluster, tenant, ignore_disabled=True):
1517
single_ra_call = rh.config_get(
1618
cluster,
1719
tenant,
18-
"/service/requestAttributes/" + str(request_attribute['id'])
20+
ENDPOINT + str(request_attribute['id'])
1921
)
2022
if single_ra_call.status_code == 200:
2123
single_ra_json = single_ra_call.json()
@@ -34,7 +36,7 @@ def push_from_files(file_list, cluster, tenant):
3436
"""Push Request Attributes in JSONs to a tenant"""
3537

3638
# Checks for Existing RAs to update them put request rather than a post that would fail
37-
existing_ra_get = rh.config_get(cluster, tenant, "/service/requestAttributes")
39+
existing_ra_get = rh.config_get(cluster, tenant, ENDPOINT)
3840
existing_ra_json = existing_ra_get.json()
3941
existing_ra_json = existing_ra_json['values']
4042
existing_ra_list = {}
@@ -48,14 +50,14 @@ def push_from_files(file_list, cluster, tenant):
4850
single_ra_post = rh.config_put(
4951
cluster,
5052
tenant,
51-
"/service/requestAttributes/" + existing_ra_list[file],
53+
ENDPOINT + existing_ra_list[file],
5254
json=ra_json
5355
)
5456
else:
5557
single_ra_post = rh.config_post(
5658
cluster,
5759
tenant,
58-
"/service/requestAttributes",
60+
ENDPOINT,
5961
json=ra_json
6062
)
6163
if single_ra_post.status_code >= 400:

dynatrace/timeseries/timeseries.py

+6-4
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,22 @@
11
from dynatrace.requests import request_handler as rh
22

3+
ENDPOINT = "timeseries/"
4+
35
def get_timeseries_list(cluster, tenant, params=None):
46
"""Get List of Timeseries Metics"""
5-
response = rh.env_get(cluster, tenant, "timeseries", params=params)
7+
response = rh.env_get(cluster, tenant, ENDPOINT, params=params)
68
return response.json()
79

810
def get_timeseries_metric (cluster, tenant, metric, params=None):
911
"""Get Timeseries Metric"""
1012
#Chose to do GET, but could also be done as POST. Don't think there are any advantages to post
11-
response = rh.env_get(cluster, tenant, "timeseries/" + metric, params=params)
13+
response = rh.env_get(cluster, tenant, ENDPOINT + metric, params=params)
1214
return response.json()
1315

1416
def create_custom_metric (cluster, tenant, metric, json, params=None):
15-
response = rh.env_put(cluster, tenant, "timeseries/" + metric, params=params, json=json)
17+
response = rh.env_put(cluster, tenant, ENDPOINT + metric, params=params, json=json)
1618
return response.status_code
1719

1820
def delete_custom_metic (cluster, tenant, metric):
19-
response = rh.env_delete(cluster, tenant, "timeseries/" + metric)
21+
response = rh.env_delete(cluster, tenant, ENDPOINT + metric)
2022
return response.status_code

dynatrace/topology/applications.py

+7-5
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,21 @@
22
# Applications needs a seperate definition since the url is not the same (not /infrastructre/)
33
from dynatrace.requests import request_handler as rh
44

5+
ENDPOINT = "entity/applications/"
6+
57
def get_applications_tenantwide(cluster, tenant):
68
"""Get Information for all applications in a tenant"""
7-
response = rh.env_get(cluster, tenant, "entity/applications")
9+
response = rh.env_get(cluster, tenant, ENDPOINT)
810
return response.json()
911

1012
def get_application(cluster, tenant, entity):
1113
"""Get Information on one application for in a tenant"""
12-
response = rh.env_get(cluster, tenant, "entity/applications/" + entity)
14+
response = rh.env_get(cluster, tenant, ENDPOINT + entity)
1315
return response.json()
1416

1517
def set_application_properties(cluster, tenant, entity, prop_json):
1618
"""Update properties of application entity"""
17-
response = rh.env_post(cluster, tenant, "entity/applications/" + entity, json=prop_json)
19+
response = rh.env_post(cluster, tenant, ENDPOINT + entity, json=prop_json)
1820
return response.json()
1921

2022
def get_application_count_tenantwide(cluster, tenant):
@@ -24,7 +26,7 @@ def get_application_count_tenantwide(cluster, tenant):
2426
"includeDetails" : "false"
2527
}
2628

27-
response = rh.env_get(cluster, tenant, "entity/applications", params=params)
29+
response = rh.env_get(cluster, tenant, ENDPOINT, params=params)
2830
env_app_count = len(response.json())
2931
return env_app_count
3032

@@ -55,5 +57,5 @@ def add_application_tags (cluster, tenant, entity, tag_list):
5557

5658
def get_application_baseline(cluster, tenant, entity):
5759
"""Get baselines on one application for in a tenant"""
58-
response = rh.env_get(cluster, tenant, "entity/applications/" + entity + "/baseline")
60+
response = rh.env_get(cluster, tenant, ENDPOINT + entity + "/baseline")
5961
return response.json()

dynatrace/topology/shared.py

+6-4
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
# 2. Get specific entity - application, host process, process group, service
77
# 3. Update properties of entity - application, custom, host, process group, service
88

9+
ENDPOINT = "entity/infrastructure/"
10+
911
def check_valid_layer(layer, layer_list):
1012
"""Check if the operation is valid for the layer"""
1113
if layer is None or layer_list is None:
@@ -21,7 +23,7 @@ def get_env_layer_entities(cluster, tenant, layer, params=None):
2123
response = rh.env_get(
2224
cluster,
2325
tenant,
24-
"entity/infrastructure/" + layer,
26+
ENDPOINT + layer,
2527
params=params
2628
)
2729
return response.json()
@@ -33,7 +35,7 @@ def get_env_layer_entity(cluster, tenant, layer, entity, params=None):
3335
response = rh.env_get(
3436
cluster,
3537
tenant,
36-
"entity/infrastructure/" + layer + "/" + entity,
38+
ENDPOINT + layer + "/" + entity,
3739
params=params
3840
)
3941
return response.json()
@@ -45,7 +47,7 @@ def set_env_layer_properties(cluster, tenant, layer, entity, prop_json):
4547
response = rh.env_post(
4648
cluster,
4749
tenant,
48-
"entity/infrastructure/" + layer + "/" + entity,
50+
ENDPOINT + layer + "/" + entity,
4951
json=prop_json
5052
)
5153
return response.status_code
@@ -62,7 +64,7 @@ def get_env_layer_count(cluster, tenant, layer, params=None):
6264
params['includeDetails'] : "false"
6365

6466
check_valid_layer(layer, layer_list)
65-
response = rh.env_get(cluster, tenant, "entity/infrastructure/" + layer, params=params)
67+
response = rh.env_get(cluster, tenant, ENDPOINT + layer, params=params)
6668
env_layer_count = len(response.json())
6769
return env_layer_count
6870

0 commit comments

Comments
 (0)