haikuwebkit/Websites/perf.webkit.org/tools/remote-cache-server.py

75 lines
2.3 KiB
Python
Executable File

#!/usr/bin/python
import json
import os
import shutil
import subprocess
import sys
import tempfile
def main():
if len(sys.argv) <= 1:
sys.exit('Specify the command: start, stop, reset')
command = sys.argv[1]
with open(abspath_from_root('config.json')) as config_file:
config = json.load(config_file)
cache_dir = abspath_from_root(config['cacheDirectory'])
if command == 'start':
if not os.path.isdir(cache_dir):
os.makedirs(cache_dir)
os.chmod(cache_dir, 0755)
start_httpd(config['remoteServer'])
elif command == 'stop':
stop_httpd(config['remoteServer'])
elif command == 'reset':
shutil.rmtree(cache_dir)
else:
sys.exit('Unknown command: ' + command)
def start_httpd(remote_server_config):
httpd_config_file = abspath_from_root(remote_server_config['httpdConfig'])
httpd_pid_file = abspath_from_root(remote_server_config['httpdPID'])
httpd_error_log_file = abspath_from_root(remote_server_config['httpdErrorLog'])
httpd_mutex_dir = abspath_from_root(remote_server_config['httpdMutexDir'])
version_info = subprocess.check_output(['php', '-v'], stderr=subprocess.PIPE)
php_version = 'PHP5' if 'PHP 5' in version_info else 'PHP7'
if not os.path.isdir(httpd_mutex_dir):
os.makedirs(httpd_mutex_dir)
os.chmod(httpd_mutex_dir, 0755)
doc_root = abspath_from_root('public')
# don't use -X since http://svn.apache.org/viewvc?view=revision&revision=1711479
subprocess.call(['httpd',
'-f', httpd_config_file,
'-c', 'PidFile ' + httpd_pid_file,
'-c', 'Mutex file:' + httpd_mutex_dir,
'-c', 'DocumentRoot ' + doc_root,
'-c', 'ErrorLog ' + httpd_error_log_file,
'-D', php_version])
def stop_httpd(remote_server_config):
httpd_pid_file = abspath_from_root(remote_server_config['httpdPID'])
if not os.path.isfile(httpd_pid_file):
sys.exit("PID file doesn't exist at %s" % httpd_pid_file)
with open(httpd_pid_file) as pid_file:
pid = pid_file.read().strip()
print "Stopping", pid
subprocess.call(['kill', '-TERM', pid])
def abspath_from_root(relpath):
return os.path.abspath(os.path.join(os.path.dirname(__file__), '../', relpath))
if __name__ == "__main__":
main()