You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ranger.apache.org by pr...@apache.org on 2022/07/12 17:09:11 UTC

[ranger] branch master updated: RANGER-3794: Improve performance of delete users/groups utility

This is an automated email from the ASF dual-hosted git repository.

pradeep pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ranger.git


The following commit(s) were added to refs/heads/master by this push:
     new f59f3a7e4 RANGER-3794: Improve performance of delete users/groups utility
f59f3a7e4 is described below

commit f59f3a7e47ed3673d62df6c2f74450185f6e3b02
Author: Fateh Singh <fa...@gmail.com>
AuthorDate: Fri Jun 17 07:57:28 2022 -0700

    RANGER-3794: Improve performance of delete users/groups utility
    
    Signed-off-by: pradeep <pr...@apache.org>
---
 security-admin/scripts/deleteUserGroupUtil.py | 83 +++++++++++----------------
 1 file changed, 35 insertions(+), 48 deletions(-)

diff --git a/security-admin/scripts/deleteUserGroupUtil.py b/security-admin/scripts/deleteUserGroupUtil.py
index 1c9f58385..8bca54acb 100644
--- a/security-admin/scripts/deleteUserGroupUtil.py
+++ b/security-admin/scripts/deleteUserGroupUtil.py
@@ -14,13 +14,12 @@
 
 import argparse
 import os,sys
-import pycurl
 import getpass
 import logging
-try:
-	from StringIO import StringIO as BytesIO
-except ImportError:
-	from io import BytesIO
+import time
+import requests
+
+s = requests.Session()
 
 def log(msg,type):
 	if type == 'info':
@@ -54,44 +53,25 @@ def printUsage():
 	log("[I] -debug: Enables debugging","info")
 	sys.exit(1)
 
-def processRequest(url,usernamepassword,data,method,isHttps,certfile,isDebug):
-	buffer = BytesIO()
-	header = BytesIO()
-	c = pycurl.Curl()
-	c.setopt(c.URL, url)
-	c.setopt(pycurl.HTTPHEADER, ['Content-Type: application/json','Accept: application/json'])
-	c.setopt(pycurl.USERPWD, usernamepassword)
-	c.setopt(pycurl.VERBOSE, 0)
-	if isHttps==True:
-		c.setopt(pycurl.SSL_VERIFYPEER,1)
-		c.setopt(pycurl.SSL_VERIFYHOST,2)
-		c.setopt(pycurl.CAINFO, certfile)
-
-	c.setopt(c.WRITEFUNCTION ,buffer.write)
-	c.setopt(c.HEADERFUNCTION,header.write)
-	# setting proper method and parameters
-	if method == 'get' :
-		c.setopt(pycurl.HTTPGET, 1)
-	elif method == 'delete' :
-		c.setopt(pycurl.CUSTOMREQUEST, "DELETE")
-		c.setopt(c.POSTFIELDS, str(data))
-	else :
-		log("[E] Unknown Http Request method found, only get or delete method are allowed!","error")
+def processRequest(url, username, password, data, method, isHttps, certfile, isDebug):
+	verify = isHttps
+	if isHttps:
+		verify = certfile
+	if method.lower() == 'get':
+		response = s.get(url, data=data, auth=(username, password),verify=verify)
+	elif method.lower() == 'delete':
+		response = s.delete(url, data=data, auth=(username, password),verify=verify)
+	else:
+		log("[E] Unsupported method"+method,'error')
+		pass
 
-	c.perform()
-	# getting response
-	response = buffer.getvalue()
-	headerResponse = header.getvalue()
-	response_code=0
-	response_code=str(c.getinfo(pycurl.RESPONSE_CODE))
-	response_code=int(response_code)
-	buffer.close()
-	header.close()
-	c.close()
+	#log("[I] Request time: %s seconds" % str(response.elapsed.total_seconds()),"info")
+	response_code = response.status_code
 	if isDebug ==True or (response_code!=200 and response_code!=204):
-		log('Request URL = ' + str(url), "info")
-		log('Response    = ' + str(headerResponse), "info")
+		log('Request URL = ' + str(url),'debug')
+		log('Response    = ' + str(response.headers),'debug')
 	return response_code
+
 def validateArgs(argv):
 	if(len(argv)<7):
 		log("[E] insufficient number of arguments. Found " + str(len(argv)) + "; expected at least 7","error")
@@ -121,6 +101,7 @@ def validateArgs(argv):
 			printUsage()
 
 def main(argv):
+	start_time = time.time()
 	FORMAT = '%(asctime)-15s %(message)s'
 	logging.basicConfig(format=FORMAT, level=logging.DEBUG)
 	inputPath=""
@@ -213,16 +194,18 @@ def main(argv):
 	if isUser==True and isGroup==True:
 		log("[E] -users and -groups both option were provided, only one is allowed.","error")
 		printUsage()
+	io_time = 0
 	if password =="" :
+		io_start_time = time.time()
 		password=getpass.getpass("Enter Ranger Admin password : ")
-
-	usernamepassword=user+":"+password
+		io_end_time = time.time()
+		io_time = io_end_time - io_start_time
 	url=host+'/service/xusers/secure/users/roles/userName/'+user
 	response_code=0
 	try:
-		response_code=processRequest(url,usernamepassword,None,'get',isHttps,certfile,False)
-	except pycurl.error as e:
-		print(e)
+		response_code=processRequest(url,user,password,None,'get',isHttps,certfile,False)
+	except Exception as e:
+		log("[E] request error: %s:" % (e), "error")
 		sys.exit(1)
 	if response_code == 302 or response_code==401 or response_code==403:
 		log("[E] Authentication Error:Please try with valid credentials!","error")
@@ -243,14 +226,12 @@ def main(argv):
 		url=host+'/service/xusers'+restpath+line+tail
 		method='delete'
 		data=None
-		response_code=processRequest(url,usernamepassword,data,method,isHttps,certfile,isDebug)
+		response_code=processRequest(url,user,password,data,method,isHttps,certfile,isDebug)
 		if response_code==302 or response_code==401:
 			if isUser==True:
 				log("[E] failed while deleting user '" + line + "'. Please verify the parameters","error")
 			elif isGroup==True:
 				log("[E] failed while deleting group '" + line + "'. Please verify the parameters","error")
-			buffer.close()
-			header.close()
 			break
 		elif response_code==204:
 			if isUser==True:
@@ -280,4 +261,10 @@ def main(argv):
 			log("[I] Number of user deleted : "+str(processedRows),"info")
 		elif isGroup==True:
 			log("[I] Number of group deleted : "+str(processedRows),"info")
+		end_time = time.time()
+		log("[I] Total time for io : "+str(io_time),"info")
+		log("[I] Total time taken for execution : "+str(end_time-start_time)+" seconds","info")
+		log("[I] Averge time taken for execution : "+str(float(end_time-start_time)/float(processedRows))+" seconds","info")
+		log("[I] Total time taken for deletion : "+str(end_time-start_time-io_time)+" seconds","info")
+		log("[I] Averge time taken for deletion : "+str(float(end_time-start_time-io_time)/float(processedRows))+" seconds","info")
 main(sys.argv)