mirror of https://github.com/zulip/zulip.git
manage.py: Save an extra Django startup by converting one script to a library.
This saves us from spending 200-250ms of CPU time importing Django again just to log that we're running a management command. On `scripts/restart-server`, this saves us from one thundering herd of Django startups when all the queue workers are restarted; but there's still the Django startup for the `manage.py` process itself for each worker, so on a machine with e.g. 2 (virtual) cores the restart is still painful.
This commit is contained in:
parent
517d9b7594
commit
f73e898874
|
@ -4,8 +4,6 @@ from __future__ import print_function
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
import logging
|
|
||||||
import subprocess
|
|
||||||
|
|
||||||
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
|
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
|
||||||
sys.path.append(BASE_DIR)
|
sys.path.append(BASE_DIR)
|
||||||
|
@ -20,10 +18,9 @@ if __name__ == "__main__":
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.core.management.base import CommandError
|
from django.core.management.base import CommandError
|
||||||
|
from scripts.lib.zulip_tools import log_management_command
|
||||||
|
|
||||||
logger = logging.getLogger("zulip.management")
|
log_management_command(" ".join(sys.argv), settings.MANAGEMENT_LOG_PATH)
|
||||||
subprocess.check_call([os.path.join(BASE_DIR, "scripts", "lib", "log-management-command"),
|
|
||||||
" ".join(sys.argv)])
|
|
||||||
|
|
||||||
if "--no-traceback" not in sys.argv and len(sys.argv) > 1:
|
if "--no-traceback" not in sys.argv and len(sys.argv) > 1:
|
||||||
sys.argv.append("--traceback")
|
sys.argv.append("--traceback")
|
||||||
|
|
|
@ -1,25 +0,0 @@
|
||||||
#!/usr/bin/env python3
|
|
||||||
import sys
|
|
||||||
import logging
|
|
||||||
import os
|
|
||||||
from os.path import dirname, abspath
|
|
||||||
|
|
||||||
BASE_DIR = dirname(dirname(dirname(abspath(__file__))))
|
|
||||||
sys.path.append(BASE_DIR)
|
|
||||||
import scripts.lib.setup_path_on_import
|
|
||||||
|
|
||||||
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "zproject.settings")
|
|
||||||
from django.conf import settings
|
|
||||||
|
|
||||||
logger = logging.getLogger("zulip.management")
|
|
||||||
if not os.path.exists(settings.MANAGEMENT_LOG_PATH):
|
|
||||||
dir = os.path.dirname(settings.MANAGEMENT_LOG_PATH)
|
|
||||||
if not os.path.exists(dir):
|
|
||||||
os.makedirs(dir)
|
|
||||||
|
|
||||||
file_handler = logging.FileHandler(settings.MANAGEMENT_LOG_PATH)
|
|
||||||
formatter = logging.Formatter("%(asctime)s: %(message)s")
|
|
||||||
file_handler.setFormatter(formatter)
|
|
||||||
logger.addHandler(file_handler)
|
|
||||||
logger.setLevel(logging.INFO)
|
|
||||||
logger.info("Ran '%s'" % (sys.argv[1],))
|
|
|
@ -2,6 +2,7 @@
|
||||||
from __future__ import print_function
|
from __future__ import print_function
|
||||||
import datetime
|
import datetime
|
||||||
import errno
|
import errno
|
||||||
|
import logging
|
||||||
import os
|
import os
|
||||||
import pwd
|
import pwd
|
||||||
import re
|
import re
|
||||||
|
@ -11,7 +12,7 @@ import sys
|
||||||
import time
|
import time
|
||||||
|
|
||||||
if False:
|
if False:
|
||||||
from typing import Sequence, Any
|
from typing import Sequence, Text, Any
|
||||||
|
|
||||||
DEPLOYMENTS_DIR = "/home/zulip/deployments"
|
DEPLOYMENTS_DIR = "/home/zulip/deployments"
|
||||||
LOCK_DIR = os.path.join(DEPLOYMENTS_DIR, "lock")
|
LOCK_DIR = os.path.join(DEPLOYMENTS_DIR, "lock")
|
||||||
|
@ -131,3 +132,18 @@ def run(args, **kwargs):
|
||||||
ENDC)
|
ENDC)
|
||||||
print()
|
print()
|
||||||
raise
|
raise
|
||||||
|
|
||||||
|
def log_management_command(cmd, log_path):
|
||||||
|
# type: (Text, Text) -> None
|
||||||
|
log_dir = os.path.dirname(log_path)
|
||||||
|
if not os.path.exists(log_dir):
|
||||||
|
os.makedirs(log_dir)
|
||||||
|
|
||||||
|
formatter = logging.Formatter("%(asctime)s: %(message)s")
|
||||||
|
file_handler = logging.FileHandler(log_path)
|
||||||
|
file_handler.setFormatter(formatter)
|
||||||
|
logger = logging.getLogger("zulip.management")
|
||||||
|
logger.addHandler(file_handler)
|
||||||
|
logger.setLevel(logging.INFO)
|
||||||
|
|
||||||
|
logger.info("Ran '%s'" % (cmd,))
|
||||||
|
|
Loading…
Reference in New Issue