import datetime import fnmatch import os import resource import subprocess from django.conf import settings errorlog = "/var/log/horizon/gunicorn.log" capture_output = True # maxrss ceiling in kbytes MAXRSS_CEILING = 512000 def worker_abort(worker): path = ("/proc/%s/fd") % os.getpid() contents = os.listdir(path) upload_dir = getattr(settings, 'FILE_UPLOAD_TEMP_DIR', '/tmp') pattern = os.path.join(upload_dir, '*.upload') for i in contents: f = os.path.join(path, i) if os.path.exists(f): try: link = os.readlink(f) if fnmatch.fnmatch(link, pattern): worker.log.info(link) os.remove(link) except OSError: pass def when_ready(server): subprocess.check_call(["/usr/bin/horizon-assets-compress"]) def post_worker_init(worker): worker.nrq = 0 worker.restart = False def pre_request(worker, req): worker.nrq += 1 if worker.restart: worker.nr = worker.max_requests - 1 maxrss = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss msg = "%(date)s %(uri)s %(rss)u" % ({'date': datetime.datetime.now(), 'uri': getattr(req, "uri"), 'rss': maxrss}) worker.log.info(msg) def post_request(worker, req, environ, resp): worker.nrq -= 1 if not worker.restart: maxrss = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss if maxrss > MAXRSS_CEILING and worker.nrq == 0: worker.restart = True