setup.py 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import os
  2. import sys
  3. import time
  4. import setup_util
  5. import subprocess
  6. import multiprocessing
  7. def get_env_for_database(args):
  8. if args.database == 'MySQL':
  9. driver = 'mysql'
  10. dbname = 'hello_world'
  11. else:
  12. driver = 'sqlite'
  13. dbname = os.environ['ULIB_ROOT'] + '/db/%.*s'
  14. return {
  15. 'UMEMPOOL': '135,0,0,34,8465,129,-17,-22,41',
  16. 'ORM_DRIVER': driver,
  17. 'ORM_OPTION': "host=" + args.database_host + " user=benchmarkdbuser password=benchmarkdbpass character-set=utf8 dbname=" + dbname
  18. }
  19. def start(args, logfile, errfile):
  20. try:
  21. ulib_root = os.environ['ULIB_ROOT']
  22. fcfg = ulib_root + "/benchmark.cfg"
  23. fprg = ulib_root + "/bin/userver_tcp"
  24. # 1. Change ULib Server configuration
  25. setup_util.replace_text(fcfg, "PREFORK_CHILD .*", "PREFORK_CHILD " + str(multiprocessing.cpu_count()))
  26. # 2. Start ULib Server (userver_tcp)
  27. logfile.write("ULib: trying to start server %s -c %s\n" % (fprg, fcfg))
  28. # Run in the background, but keep stdout/stderr for easy debugging
  29. subprocess.Popen( "%s -c %s" % (fprg, fcfg), shell=True, stdout=logfile, stderr=errfile, env = get_env_for_database(args))
  30. logfile.write("ULib: server STARTED\n")
  31. return 0
  32. except subprocess.CalledProcessError:
  33. return 1
  34. def stop(logfile, errfile):
  35. try:
  36. logfile.write( "ULib: setup.py STOP\n")
  37. # Stop ULib Server (userver_tcp)
  38. subprocess.check_call("kill -TERM $( cat $ULIB_ROOT/userver_tcp.pid )", shell=True, stderr=errfile, stdout=logfile)
  39. time.sleep(3);
  40. p = subprocess.Popen(['pgrep', 'userver_tcp'], stdout=subprocess.PIPE)
  41. out, err = p.communicate()
  42. for line in out.splitlines():
  43. if 'userver_tcp' in line:
  44. pid = int(line.split(None, 2)[1])
  45. os.kill(pid, 9)
  46. subprocess.call("rm -f $ULIB_ROOT/userver_tcp.pid", shell=True, stderr=errfile, stdout=logfile)
  47. return 0
  48. except subprocess.CalledProcessError:
  49. return 1