77# !/usr/bin/env python3
88import logging
99
10+ import argparse
1011from flask import Flask , request
1112import daemonize
1213import json
1314import sys
1415import os
1516
17+ from redisbench_admin .cli import populate_with_poetry_data
1618from redisbench_admin .run .args import S3_BUCKET_NAME
1719from redisbench_admin .run .s3 import get_test_s3_bucket_path
1820from redisbench_admin .utils .remote import extract_git_vars
3436
3537
3638class PerfDaemon :
37- def __init__ (self ):
38- pass
39+ def __init__ (self , user = None , group = None ):
40+ self .user = user
41+ self .group = group
3942
4043 def main (self ):
4144 app = Flask (__name__ )
@@ -257,25 +260,44 @@ def profile_stop(profiler_name, pid):
257260 return json .dumps (status_dict )
258261
259262
260- d = PerfDaemon ()
261-
262-
263263def main ():
264- global d
265264
265+ _ , project_description , project_version = populate_with_poetry_data ()
266+ project_name = "perf-daemon"
267+ parser = argparse .ArgumentParser (
268+ description = project_description ,
269+ formatter_class = argparse .ArgumentDefaultsHelpFormatter ,
270+ )
271+ if len (sys .argv ) < 2 :
272+ print (
273+ "A minimum of 2 arguments is required: perf-daemon <mode> <arguments>."
274+ " Use perf-daemon --help if you need further assistance."
275+ )
276+ sys .exit (1 )
277+ requested_tool = sys .argv [1 ]
278+ # common arguments to all tools
279+ parser .add_argument ("--user" , default = None )
280+ parser .add_argument ("--group" , default = None )
281+ argv = sys .argv [2 :]
282+ args = parser .parse_args (args = argv )
283+ d = PerfDaemon (args .user , args .group )
266284 def start (foreground = False ):
267285 current_path = os .path .abspath (os .getcwd ())
268286 print (
269- "Starting perfdaemon . PID file {}. Daemon workdir: {}" .format (
270- PID_FILE , current_path
287+ "Starting {} . PID file {}. Daemon workdir: {}" .format (
288+ project_name , PID_FILE , current_path
271289 )
272290 )
291+ if d .user is not None :
292+ print ("Specifying user {}. group {}." .format (d .user , d .group ))
273293 daemonize .Daemonize (
274- app = "perfdaemon" ,
294+ app = project_name ,
275295 pid = PID_FILE ,
276296 action = d .main ,
277297 chdir = current_path ,
278298 foreground = foreground ,
299+ user = d .user ,
300+ group = d .group ,
279301 ).start ()
280302
281303 def stop ():
@@ -292,19 +314,17 @@ def usage():
292314 print ("usage: start|stop|restart|foreground" )
293315 sys .exit (1 )
294316
295- if len (sys .argv ) < 2 :
296- usage ()
297- if sys .argv [1 ] == "start" :
317+ if requested_tool == "start" :
298318 start ()
299- elif sys . argv [ 1 ] == "stop" :
319+ elif requested_tool == "stop" :
300320 stop ()
301- elif sys . argv [ 1 ] == "restart" :
321+ elif requested_tool == "restart" :
302322 stop ()
303323 start ()
304- elif sys . argv [ 1 ] == "foreground" :
324+ elif requested_tool == "foreground" :
305325 foreground ()
306326 else :
307- sys . exit ( 1 )
327+ usage ( )
308328
309329
310330if __name__ == "__main__" :
0 commit comments