Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import urllib.request
- import urllib.parse
- from json import loads
- from datetime import datetime
- def get_token(username, password, server_name):
- params = urllib.parse.urlencode({
- 'username': username,
- 'password': password,
- 'client': 'referer',
- 'referer': server_name,
- 'expiration': 60,
- 'f': 'json'
- })
- params = params.encode('ascii')
- url = server_name + '/portal/sharing/rest/generateToken?'
- try:
- response = urllib.request.urlopen(url, params)
- if response.getcode() != 200:
- print(response.info())
- else:
- response_data = loads(response.read().decode('utf-8'))
- if 'error' in response_data:
- print(response_data['error']['details'])
- return
- else:
- return response_data['token']
- except IOError as e:
- print('Please Ensure URL to Portal is Valid: ', e.__dict__)
- return
- def update_service(params, folder_url, service, min_inst, max_inst):
- # Get Service Information
- service_name = service['serviceName']
- service_type = service['type']
- service_url = folder_url + '/' + service_name + '.' + service_type
- response = urllib.request.urlopen(service_url, params)
- service_data = loads(response.read().decode('utf-8'))
- # If Service Min/Max Instances Do Not Match Inputs,
- # Edit Service Data & Pass to Edit REST Operation
- if (service_data['minInstancesPerNode'] != min_inst) or (service_data['maxInstancesPerNode'] != max_inst):
- print('Updating: ', service_name, service_type, ' | ',
- service_data['minInstancesPerNode'], ' | ',
- service_data['maxInstancesPerNode'])
- service_data['minInstancesPerNode'] = min_inst
- service_data['maxInstancesPerNode'] = max_inst
- print('Updating: ', service_name, service_type, ' | ',
- service_data['minInstancesPerNode'], ' | ',
- service_data['maxInstancesPerNode'])
- edit_params = urllib.parse.urlencode({
- 'token': token,
- 'f': 'json',
- 'runAsync': 'true',
- 'service': service_data
- })
- edit_params = edit_params.encode('ascii')
- edit_url = (service_url + '/edit')
- response = urllib.request.urlopen(edit_url, edit_params)
- edit_response = loads(response.read().decode('utf-8'))
- print(edit_response)
- def get_services(token, server_name, server_port, protected_folders, min_inst, max_inst):
- # Collect Root Services Directory
- params = urllib.parse.urlencode({
- 'token': token,
- 'f': 'json'
- })
- params = params.encode('ascii')
- url = server_name + ':' + server_port + '/arcgis/admin/services'
- response = urllib.request.urlopen(url, params)
- services_directory = loads(response.read().decode('utf-8'))
- # Get Services in Root Directory & Update Services
- root_services = services_directory['services']
- for service in root_services:
- folder_url = url + '/'
- update_service(params, folder_url, service, min_inst, max_inst)
- # Get Folders in Root Services Directory & Update Services
- folders = (services_directory['folders'])
- for folder in folders:
- if folder not in protected_folders:
- folder_url = url + '/' + folder
- response = urllib.request.urlopen(folder_url, params)
- folder_directory = loads(response.read().decode('utf-8'))
- folder_services = folder_directory['services']
- for service in folder_services:
- update_service(params, folder_url, service, min_inst, max_inst)
- if __name__ == "__main__":
- start = datetime.now()
- print('Script Start: ', start)
- username = 'username'
- password = 'password'
- server_name = 'server'
- server_port = 'port'
- min_inst = 0
- max_inst = 1
- protected_folders = ['System', 'Utilities']
- token = get_token(username, password, server_name)
- get_services(token, server_name, server_port, protected_folders, min_inst, max_inst)
- end = datetime.now()
- print('Script End: ', end)
- print('Script Run: ', end-start)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement