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 <fateh...@gmail.com> AuthorDate: Fri Jun 17 07:57:28 2022 -0700 RANGER-3794: Improve performance of delete users/groups utility Signed-off-by: pradeep <prad...@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)