@@ -42,6 +42,7 @@ def __checkResponse(self, res):
4242 return False
4343 return True
4444
45+
4546 def get_user_info (self ):
4647 if self .userinfo is None :
4748 res = requests .get (self .url + '/api/user/me' , headers = self .hdrs )
@@ -102,14 +103,12 @@ def update_notification_resolution(self, notification, resolved):
102103 return [False , self .lasterr ]
103104 return [True , res .json ()]
104105
105- def get_notification_ids (self , channels ):
106+ def get_notification_channel_ids (self , channels ):
106107 res = requests .get (self .url + '/api/notificationChannels' , headers = self .hdrs )
107-
108+ ids = []
108109 if not self .__checkResponse (res ):
109110 return [False , self .lasterr ]
110-
111111 # Should try and improve this M * N lookup
112- ids = []
113112 for ch in res .json ()["notificationChannels" ]:
114113 for c in channels :
115114 if c ['type' ] == ch ['type' ]:
@@ -130,9 +129,10 @@ def get_notification_ids(self, channels):
130129 opt = ch ['options' ]
131130 if opt ['channel' ] == c ['channel' ]:
132131 ids .append (ch ['id' ])
133-
132+ print ids
134133 return [True , ids ]
135134
135+
136136 def create_alert (self , name , description , severity , for_atleast_s , condition , segmentby = [],
137137 segment_condition = 'ANY' , user_filter = '' , notify = None , enabled = True , annotations = {}):
138138 #
@@ -435,8 +435,16 @@ def add_dashboard_panel(self, dashboard, name, panel_type, metrics, scope=None,
435435 # Convert list of metrics to format used by Sysdig Cloud
436436 #
437437 property_names = {}
438+ k_count = 0
439+ v_count = 0
438440 for i , metric in enumerate (metrics ):
439441 property_name = 'v' if 'aggregations' in metric else 'k'
442+ if property_name == 'k' :
443+ i = k_count
444+ k_count += 1
445+ else :
446+ i = v_count
447+ v_count += 1
440448 property_names [metric ['id' ]] = property_name + str (i )
441449
442450 panel_configuration ['metrics' ].append ({
@@ -869,3 +877,171 @@ def create_sysdig_capture(self, hostname, capture_name, duration, capture_filter
869877 if not self .__checkResponse (res ):
870878 return [False , self .lasterr ]
871879 return [True , res .json ()]
880+
881+ def create_user_invite (self , user_email ):
882+ # Look up the list of users to see if this exists, do not create if one exists
883+ res = requests .get (self .url + '/api/users' , headers = self .hdrs )
884+ if not self .__checkResponse (res ):
885+ return [False , self .lasterr ]
886+ data = res .json ()
887+ for user in data ['users' ]:
888+ if user ['username' ] == user_email :
889+ return [False , 'user ' + user_email + ' already exists' ]
890+
891+ # Create the user
892+ user_json = {'username' : user_email }
893+ res = requests .post (self .url + '/api/users' , headers = self .hdrs , data = json .dumps (user_json ))
894+ if not self .__checkResponse (res ):
895+ return [False , self .lasterr ]
896+ return [True , res .json ()]
897+
898+ def delete_user (self , user_email ):
899+ res = self .get_user_ids ([user_email ])
900+ if res [0 ] == False :
901+ return res
902+ userid = res [1 ][0 ]
903+ res = requests .delete (self .url + '/api/users' + str (userid ), headers = self .hdrs )
904+ if not self .__checkResponse (res ):
905+ return [False , self .lasterr ]
906+ return [True , None ]
907+
908+ def get_user (self , user_email ):
909+ res = requests .get (self .url + '/api/users' , headers = self .hdrs )
910+ if not self .__checkResponse (res ):
911+ return [False , self .lasterr ]
912+ for u in res .json ()['users' ]:
913+ if u ['username' ] == user_email :
914+ return [True , u ]
915+ return [False , 'User not found' ]
916+
917+ def edit_user (self , user_email , firstName = None , lastName = None , roles = None , teams = None ):
918+ res = self .get_user (user_email )
919+ if res [0 ] == False :
920+ return res
921+ user = res [1 ]
922+ reqbody = {
923+ 'agentInstallParams' : user ['agentInstallParams' ],
924+ 'roles' : roles if roles else user ['roles' ],
925+ 'username' : user_email ,
926+ 'version' : user ['version' ]
927+ }
928+
929+ if teams == None :
930+ reqbody ['teams' ] = user ['teams' ]
931+ else :
932+ t = self .get_team_ids (teams )
933+ if t [0 ] == False :
934+ return [False , 'Could not get team IDs' ]
935+ reqbody ['teams' ] = t [1 ]
936+
937+ if firstName == None :
938+ reqbody ['firstName' ] = user ['firstName' ] if 'firstName' in user .keys () else ''
939+ else :
940+ reqbody ['firstName' ] = firstName
941+
942+ if lastName == None :
943+ reqbody ['lastName' ] = user ['lastName' ] if 'lastName' in user .keys () else ''
944+ else :
945+ reqbody ['lastName' ] = lastName
946+ print reqbody
947+ res = requests .put (self .url + '/api/users/' + str (user ['id' ]), headers = self .hdrs , data = json .dumps (reqbody ))
948+ if not self .__checkResponse (res ):
949+ return [False , self .lasterr ]
950+ return [True , 'Successfully edited user' ]
951+
952+ def get_teams (self , team_filter = '' ):
953+ res = requests .get (self .url + '/api/teams' , headers = self .hdrs )
954+ if not self .__checkResponse (res ):
955+ return [False , self .lasterr ]
956+ ret = filter (lambda t : team_filter in t ['name' ],res .json ()['teams' ])
957+ return [True , ret ]
958+
959+ def get_team (self , name ):
960+ res = self .get_teams (name )
961+ if res [0 ] == False :
962+ return res
963+ for t in res [1 ]:
964+ if t ['name' ] == name :
965+ return [True , t ]
966+ return [False , 'Could not find team' ]
967+
968+ def get_team_ids (self , teams ):
969+ res = requests .get (self .url + '/api/teams' , headers = self .hdrs )
970+ if not self .__checkResponse (res ):
971+ return [False , self .lasterr ]
972+ u = filter (lambda x : x ['name' ] in teams , res .json ()['teams' ])
973+ return [True , map (lambda x : x ['id' ], u )]
974+
975+ def get_user_ids (self , users ):
976+ res = requests .get (self .url + '/api/users' , headers = self .hdrs )
977+ if not self .__checkResponse (res ):
978+ return [False , self .lasterr ]
979+ u = filter (lambda x : x ['username' ] in users , res .json ()['users' ])
980+ return [True , map (lambda x : x ['id' ], u )]
981+
982+ def create_team (self , name , users = [], filter = '' , description = '' , show = 'host' , theme = '#7BB0B2' ):
983+ reqbody = {
984+ 'name' : name ,
985+ 'description' : description ,
986+ 'theme' : theme ,
987+ 'show' : show ,
988+ 'users' : users
989+ }
990+ if filter != '' :
991+ reqbody ['filter' ] = filter
992+
993+ res = requests .post (self .url + '/api/teams' , headers = self .hdrs , data = json .dumps (reqbody ))
994+ if not self .__checkResponse (res ):
995+ return [False , self .lasterr ]
996+ return [True , res .json ()]
997+
998+
999+ def edit_team (self , name , users = None , filter = None , description = None , show = None , theme = None ):
1000+ res = self .get_team (name )
1001+ if res [0 ] == False :
1002+ return res
1003+
1004+ t = res [1 ]
1005+ reqbody = {
1006+ 'name' : name ,
1007+ 'description' : description if description else t ['description' ],
1008+ 'theme' : theme if theme else t ['theme' ],
1009+ 'show' : show if show else t ['show' ],
1010+ 'id' : t ['id' ],
1011+ 'version' : t ['version' ]
1012+ }
1013+
1014+ # Handling for users to map user-names to IDs
1015+ if users != None :
1016+ res = self .get_user_ids (users )
1017+ if res [0 ] == False :
1018+ return [False , 'Could not convert user names to IDs' ]
1019+ reqbody ['users' ] = res [1 ]
1020+ elif 'users' in t .keys ():
1021+ reqbody ['users' ] = t ['users' ]
1022+ else :
1023+ reqbody ['users' ] = []
1024+
1025+ # Special handling for filters since we don't support blank filters
1026+ if filter != None :
1027+ reqbody ['filter' ] = filter
1028+ elif 'filter' in t .keys ():
1029+ reqbody ['filter' ] = t ['filter' ]
1030+
1031+ res = requests .put (self .url + '/api/teams/' + str (t ['id' ]), headers = self .hdrs , data = json .dumps (reqbody ))
1032+ if not self .__checkResponse (res ):
1033+ return [False , self .lasterr ]
1034+ return [True , res .json ()]
1035+
1036+ def delete_team (self , name ):
1037+ res = self .get_team (name )
1038+ if res [0 ] == False :
1039+ return res
1040+
1041+ t = res [1 ]
1042+ res = requests .delete (self .url + '/api/teams/' + str (t ['id' ]), headers = self .hdrs )
1043+ if not self .__checkResponse (res ):
1044+ return [False , self .lasterr ]
1045+ return [True , None ]
1046+
1047+
0 commit comments