forked from djarrard-zz/Python-AGS-Admin
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathadminfunctions.py
More file actions
153 lines (145 loc) · 6 KB
/
adminfunctions.py
File metadata and controls
153 lines (145 loc) · 6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
import requests, json
#### PLEASE SEE FUNCTION DOCUMENTATION FOR MORE INFORMATION ABOUT THESE FUNCTIONS ##
###Script Functions - These should not need to be modified OOTB.
def defineEndpoints(agsURL):
base = agsURL.split(r"/rest")[0]
REST = base + "/rest/services"
adminAPI = base + "/admin"
info = base + "/rest/info"
response = requests.get(info + "?f=json", verify=False)
jsonresponse = json.loads(response.text)
tokenURL = jsonresponse["authInfo"]["tokenServicesUrl"]
output = {"REST":REST,"TokenUrl":tokenURL,"Admin":adminAPI}
return output
def getToken(tokenURL, username, password, referer):
token_POSTdata = {'username':username,'password':password,'f':"json", 'referer':referer}
token_request = requests.post(tokenURL, token_POSTdata, verify=False)
token_response = json.loads(token_request.text)
return token_response
def getServiceAdminEndpoints(adminURL, token):
serviceList = []
if token != "":
tokenstring = "&token="+token
else:
tokenstring = ""
crawl_URL = adminURL + "/services/?f=json" + tokenstring
folders = []
services = []
serviceURLs = []
request = requests.get(crawl_URL, verify=False)
response = json.loads(request.text)
for item in response["services"]:
serviceInfo = []
serviceInfo.append(item["folderName"])
serviceInfo.append(item["serviceName"])
serviceInfo.append(item["type"])
serviceList.append(serviceInfo)
for folder in response["foldersDetail"]:
if folder["isDefault"] == False:
folders.append(folder["folderName"])
for item in folders:
url = adminURL +"/services/" + item + "/" + "?f=json" + tokenstring
request = requests.get(url, verify=False)
response = json.loads(request.text)
for item in response["services"]:
serviceInfo = []
serviceInfo.append(item["folderName"])
serviceInfo.append("/" + item["serviceName"])
serviceInfo.append(item["type"])
serviceList.append(serviceInfo)
urlList = []
for item in serviceList:
url = adminURL + "/services/" + item[0] + item[1] + "." + item[2]
urlList.append(url)
return urlList
def updateMinMaxInstance(serviceAdminUrl, token, minInstances, maxInstances):
if token != "":
tokenstring = "&token="+token
else:
tokenstring = ""
requestURL = serviceAdminUrl + "?f=json" + tokenstring
request = requests.get(requestURL, verify=False)
response = json.loads(request.text)
if response["minInstancesPerNode"] != minInstances or response["maxInstancesPerNode"] != maxInstances:
response["minInstancesPerNode"] = minInstances
response["maxInstancesPerNode"] = maxInstances
newjson = json.dumps(response)
editURL = serviceAdminUrl + "/edit" + "?f=json" + tokenstring
postData = {"service":newjson}
request = requests.post(editURL, postData, verify=False)
response = json.loads(request.text)["status"]
return "Service update result: " + response
else:
return "Service was already configured as desired"
def StartStopDelete(serviceAdminUrl, token, operation):
if token != "":
tokenstring = "&token="+token
else:
tokenstring = ""
if operation.upper() == "START":
requestUrl = serviceAdminUrl + "/start" + "?f=json" + tokenstring
elif operation.upper() == "STOP":
requestUrl = serviceAdminUrl + "/stop" + "?f=json" + tokenstring
elif operation.upper() == "DELETE":
requestUrl = serviceAdminUrl + "/stop" + "?f=json" +tokenstring
request = requests.post(requestUrl, "", verify=False)
response = json.loads(request.text)["status"]
return "Result: " + response
def updateTimeouts(serviceAdminUrl, token, maxWaitTime, maxStartupTime, maxIdleTime, maxUsageTime):
if token != "":
tokenstring = "&token="+token
else:
tokenstring = ""
defaultmaxWaitTime = 60
defaultmaxStartupTime = 300
defaultmaxIdleTime = 1800
defaultmaxUsageTime = 600
requestURL = serviceAdminUrl + "?f=json" + tokenstring
request = requests.get(requestURL, verify=False)
response = json.loads(request.text)
if maxWaitTime != "":
newWaitTime = maxWaitTime
else:
newWaitTime = defaultmaxWaitTime
if maxStartupTime != "":
newStartupTime = maxStartupTime
else:
newStartupTime = defaultmaxStartupTime
if maxIdleTime != "":
newIdleTime = maxIdleTime
else:
newIdleTime = defaultmaxIdleTime
if maxUsageTime != "":
newUsageTime = maxUsageTime
else:
newUsageTime = defaultmaxUsageTime
response["maxWaitTime"] = newWaitTime
response["maxStartupTime"] = newStartupTime
response["maxIdleTime"] = newIdleTime
response["maxUsageTime"] = newUsageTime
newjson = json.dumps(response)
editURL = serviceAdminUrl + "/edit" + "?f=json" + tokenstring
postData = {"service":newjson}
request = requests.post(editURL, postData, verify=False)
response = json.loads(request.text)["status"]
return "Serviced update result: " + response
def backupSite(adminUrl, token, outputDirectory):
if token != "":
tokenstring = "&token="+token
else:
tokenstring = ""
compCheckUrl = adminUrl + "?f=json" + tokenstring
compCheckRequest = requests.get(compCheckUrl, verify=False)
response = json.loads(compCheckRequest.text)
if response["currentVersion"] >= 10.2:
bkpUrl = adminUrl + "/exportSite"
bkpPostData = {"f":"json","location":outputDirectory,"token":token}
request = requests.post(bkpUrl, bkpPostData, verify=False)
response = json.loads(request.text)
if response["status"] == "success":
return {'outcome':"success",'messages':response["location"]}
else:
return {'outcome':"error",'messages':response["messages"]}
return response
else:
return "This ArcGIS Server does not support the exportSite operation. 10.2 and higher is required."