Skip to content

Commit c76e56d

Browse files
authored
Merge pull request #86 from SumoLogic/hpal_sdk_release_0.1.14
Added monitor APIs and retries
2 parents 9706d46 + f87ed05 commit c76e56d

File tree

1 file changed

+66
-10
lines changed

1 file changed

+66
-10
lines changed

sumologic/sumologic.py

Lines changed: 66 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33
import os
44
import sys
55
import time
6+
from requests.adapters import HTTPAdapter
7+
from urllib3.util.retry import Retry
8+
69
try:
710
import cookielib
811
except ImportError:
@@ -12,6 +15,12 @@
1215
class SumoLogic(object):
1316
def __init__(self, accessId, accessKey, endpoint=None, caBundle=None, cookieFile='cookies.txt'):
1417
self.session = requests.Session()
18+
retries = Retry(total=3, backoff_factor=1, status_forcelist=[500, 502, 503, 504, 429])
19+
adapter = HTTPAdapter(max_retries=retries)
20+
self.session.mount('https://', adapter)
21+
self.session.mount('http://', adapter)
22+
23+
1524
self.session.auth = (accessId, accessKey)
1625
self.DEFAULT_VERSION = 'v1'
1726
self.method = None
@@ -268,16 +277,31 @@ def sync_folder(self, folder_id, content):
268277
def check_sync_folder(self, folder_id, job_id):
269278
return self.get('/content/folders/%s/synchronize/%s/status' % (folder_id, job_id), version='v2')
270279

271-
def delete_folder(self, folder_id):
272-
return self.delete('/content/%s/delete' % folder_id, version='v2')
280+
def delete_folder(self, folder_id, isAdmin=False):
281+
headers = {'isAdminMode': 'true'} if isAdmin else {}
282+
return self.delete('/content/%s/delete' % folder_id, headers=headers, version='v2')
273283

274-
def create_folder(self, name, description, parent_folder_id):
284+
def create_folder(self, name, description, parent_folder_id, isAdmin=False):
285+
headers = {'isAdminMode': 'true'} if isAdmin else {}
275286
content = {
276287
"name": name,
277288
"description": description,
278289
"parentId": parent_folder_id
279290
}
280-
return self.post('/content/folders', params=content, version='v2')
291+
return self.post('/content/folders', params=content, headers=headers, version='v2')
292+
293+
def get_children_folder(self, folder_id):
294+
r = self.get('/content/folders/%s' % folder_id, version='v2')
295+
return json.loads(r.text)['children']
296+
297+
def folder_not_exist(self, folder_id):
298+
endpoint = self.get_versioned_endpoint('v2')
299+
r = self.session.get(endpoint + '/content/folders/' + folder_id, params=None)
300+
return "Content with the given ID does not exist." in r.text
301+
302+
def get_parent_folder_id(self, folder_id):
303+
r = self.get('/content/folders/%s' % folder_id, version='v2')
304+
return json.loads(r.text)['parentId']
281305

282306
def get_personal_folder(self):
283307
return self.get('/content/folders/personal', version='v2')
@@ -293,15 +317,25 @@ def get_global_folder(self):
293317
else:
294318
return None
295319

296-
def import_content(self, folder_id, content, is_overwrite="false"):
297-
return self.post('/content/folders/%s/import?overwrite=%s' % (folder_id, is_overwrite), params=content,
320+
def import_content(self, folder_id, content, is_overwrite="false", isAdmin=False):
321+
headers = {'isAdminMode': 'true'} if isAdmin else {}
322+
return self.post('/content/folders/%s/import?overwrite=%s' % (folder_id, is_overwrite), headers=headers, params=content,
298323
version='v2')
299324

300325
def check_import_status(self, folder_id, job_id):
301326
return self.get('/content/folders/%s/import/%s/status' % (folder_id, job_id), version='v2')
302327

303-
def get_folder(self, folder_id):
304-
return self.get('/content/folders/%s' % folder_id, version='v2')
328+
def get_folder(self, folder_id, isAdmin=False):
329+
headers = {'isAdminMode': 'true'} if isAdmin else {}
330+
return self.get('/content/folders/%s' % folder_id, headers = headers, version='v2')
331+
332+
def update_folder(self, folder_id, isAdmin=False):
333+
headers = {'isAdminMode': 'true'} if isAdmin else {}
334+
return self.get('/content/folders/%s' % folder_id, headers = headers, version='v2')
335+
336+
def copy_folder(self, folder_id, destination_folder_id, isAdmin=False):
337+
headers = {'isAdminMode': 'true'} if isAdmin else {}
338+
return self.post('/content/%s/copy?destinationFolder=%s' % (folder_id, destination_folder_id), headers=headers,params={}, version='v2')
305339

306340
def export_content(self, content_id):
307341
return self.post('/content/%s/export' % content_id, params="", version='v2')
@@ -392,8 +426,9 @@ def update_lookup_table(self, id, content):
392426
return self.put('/lookupTables/%s/row' % id, params=content, version='v1')
393427

394428
# apps
395-
def install_app(self, app_id, content):
396-
return self.post('/apps/%s/install' % (app_id), params=content)
429+
def install_app(self, app_id, content, isAdmin = False):
430+
headers = {'isAdminMode': 'true'} if isAdmin else {}
431+
return self.post('/apps/%s/install' % (app_id), headers=headers, params=content)
397432

398433
def check_app_install_status(self, job_id):
399434
return self.get('/apps/install/%s/status' % job_id)
@@ -692,3 +727,24 @@ def delete_cse_threat_intel_indicator(self, threat_intel_indicator_id):
692727
result = response.json()
693728

694729
return result
730+
731+
# monitors
732+
def import_monitors(self, folder_id, content):
733+
response = self.post('/monitors/%s/import' % folder_id, params=content)
734+
return json.loads(response.text)
735+
736+
def set_monitors_permissions(self, content):
737+
response = self.put('/monitors/permissions/set', params=content)
738+
return json.loads(response.text)
739+
740+
def export_monitors(self, folder_id):
741+
response = self.get('/monitors/%s/export' % folder_id)
742+
return json.loads(response.text)
743+
744+
def get_root_folder(self):
745+
response = self.get('/monitors/root')
746+
return json.loads(response.text)
747+
748+
def delete_monitor_folder(self, folder_id):
749+
return self.delete('/monitors/%s' % folder_id)
750+

0 commit comments

Comments
 (0)