11import json
22import requests
33import time
4- import random
4+ from random import uniform
5+ from requests .adapters import HTTPAdapter
6+ from requests .packages .urllib3 .util .retry import Retry
57
68try :
79 import cookielib
@@ -15,6 +17,9 @@ class SumoLogic(object):
1517
1618 def __init__ (self , accessId , accessKey , endpoint = None , cookieFile = 'cookies.txt' ):
1719 self .session = requests .Session ()
20+ retries = Retry (total = 3 , backoff_factor = 0.1 , status_forcelist = [502 , 503 , 504 , 429 ])
21+ self .session .mount ('https://' , HTTPAdapter (max_retries = retries ))
22+ self .session .mount ('http://' , HTTPAdapter (max_retries = retries ))
1823 self .session .auth = (accessId , accessKey )
1924 self .session .headers = {'content-type' : 'application/json' , 'accept' : 'application/json' }
2025 cj = cookielib .FileCookieJar (cookieFile )
@@ -48,6 +53,7 @@ def get_versioned_endpoint(self, version):
4853
4954 def delete (self , method , params = None , version = DEFAULT_VERSION ):
5055 endpoint = self .get_versioned_endpoint (version )
56+ time .sleep (uniform (2 , 5 ))
5157 r = self .session .delete (endpoint + method , params = params )
5258 if 400 <= r .status_code < 600 :
5359 r .reason = r .text
@@ -56,6 +62,7 @@ def delete(self, method, params=None, version=DEFAULT_VERSION):
5662
5763 def get (self , method , params = None , version = DEFAULT_VERSION ):
5864 endpoint = self .get_versioned_endpoint (version )
65+ time .sleep (uniform (2 , 5 ))
5966 r = self .session .get (endpoint + method , params = params )
6067 if 400 <= r .status_code < 600 :
6168 r .reason = r .text
@@ -64,6 +71,7 @@ def get(self, method, params=None, version=DEFAULT_VERSION):
6471
6572 def post (self , method , params , headers = None , version = DEFAULT_VERSION ):
6673 endpoint = self .get_versioned_endpoint (version )
74+ time .sleep (uniform (2 , 5 ))
6775 r = self .session .post (endpoint + method , data = json .dumps (params ), headers = headers )
6876 if 400 <= r .status_code < 600 :
6977 r .reason = r .text
@@ -72,6 +80,7 @@ def post(self, method, params, headers=None, version=DEFAULT_VERSION):
7280
7381 def put (self , method , params , headers = None , version = DEFAULT_VERSION ):
7482 endpoint = self .get_versioned_endpoint (version )
83+ time .sleep (uniform (2 , 5 ))
7584 r = self .session .put (endpoint + method , data = json .dumps (params ), headers = headers )
7685 if 400 <= r .status_code < 600 :
7786 r .reason = r .text
@@ -205,15 +214,29 @@ def create_folder(self, name, description, parent_folder_id):
205214 def get_personal_folder (self ):
206215 return self .get ('/content/folders/personal' , version = 'v2' )
207216
217+ def get_folder_by_id (self , folder_id ):
218+ response = self .get ('/content/folders/%s' % folder_id , version = 'v2' )
219+ return json .loads (response .text )
220+
221+ def update_folder_by_id (self , folder_id , content ):
222+ response = self .put ('/content/folders/%s' % folder_id , version = 'v2' , params = content )
223+ return json .loads (response .text )
224+
225+ def copy_folder (self , folder_id , parent_folder_id ):
226+ return self .post ('/content/%s/copy?destinationFolder=%s' % (folder_id , parent_folder_id ), params = {},
227+ version = 'v2' )
228+
208229 def import_content (self , folder_id , content , is_overwrite = "false" ):
209230 return self .post ('/content/folders/%s/import?overwrite=%s' % (folder_id , is_overwrite ), params = content ,
210231 version = 'v2' )
211232
212233 def check_import_status (self , folder_id , job_id ):
213234 return self .get ('/content/folders/%s/import/%s/status' % (folder_id , job_id ), version = 'v2' )
214235
236+ def check_copy_status (self , folder_id , job_id ):
237+ return self .get ('/content/%s/copy/%s/status' % (folder_id , job_id ), version = 'v2' )
238+
215239 def install_app (self , app_id , content ):
216- time .sleep (random .randint (1 , 10 ))
217240 return self .post ('/apps/%s/install' % (app_id ), params = content )
218241
219242 def check_app_install_status (self , job_id ):
@@ -223,14 +246,17 @@ def get_apps(self):
223246 response = self .get ('/apps' )
224247 return json .loads (response .text )
225248
226- def create_explorer_view (self , content ):
227- return self .post ('/topologies' , params = content , version = 'v1alpha' )
249+ def create_hierarchy (self , content ):
250+ return self .post ('/entities/hierarchies' , params = content , version = 'v1' )
251+
252+ def delete_hierarchy (self , hierarchy_id ):
253+ return self .delete ('/entities/hierarchies/%s' % hierarchy_id , version = 'v1' )
228254
229- def delete_explorer_view (self , explorer_id ):
230- return self .delete ('/topologies/ %s' % explorer_id , version = 'v1alpha ' )
255+ def update_hierarchy (self , hierarchy_id , content ):
256+ return self .put ('/entities/hierarchies/ %s' % hierarchy_id , params = content , version = 'v1 ' )
231257
232- def get_explorer_views (self ):
233- response = self .get ('/topologies ' , version = 'v1alpha ' )
258+ def get_entity_hierarchies (self ):
259+ response = self .get ('/entities/hierarchies ' , version = 'v1 ' )
234260 return json .loads (response .text )
235261
236262 def create_metric_rule (self , content ):
0 commit comments