Skip to content

Instantly share code, notes, and snippets.

@coderanger
Last active April 26, 2020 10:17
Show Gist options
  • Save coderanger/c67d3df255bcbeaf625b6ce038fa2f38 to your computer and use it in GitHub Desktop.
Save coderanger/c67d3df255bcbeaf625b6ce038fa2f38 to your computer and use it in GitHub Desktop.
Django on Twisted with Prometheus
"""
Support for running `python -m myapp`.
"""
from myapp.wsgi import main
if __name__ == "__main__":
main()
import os
from django.conf import settings
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myapp.settings")
# This application object is used by any WSGI server configured to use this
# file. This includes Django's development server, if the WSGI_APPLICATION
# setting points here.
application = get_wsgi_application()
def main():
import sys
from twisted import logger
from twisted.internet import reactor
from twisted.internet.endpoints import TCP4ServerEndpoint
from twisted.python import threadpool
from twisted.web.http import proxiedLogFormatter
from twisted.web.server import Site
from twisted.web.wsgi import WSGIResource
from prometheus_client.twisted import MetricsResource
observers = [logger.textFileLogObserver(sys.stdout)]
logger.globalLogBeginner.beginLoggingTo(observers)
logger.Logger().info('myapp starting on :8000')
pool = threadpool.ThreadPool()
reactor.callWhenRunning(pool.start)
django_resource = WSGIResource(reactor, pool, application)
django_site = Site(django_resource, logFormatter=proxiedLogFormatter)
django_endpoint = TCP4ServerEndpoint(reactor, 8000)
django_endpoint.listen(django_site)
metrics_resource = MetricsResource()
metrics_site = Site(metrics_resource)
metrics_endpoint = TCP4ServerEndpoint(reactor, 9000)
metrics_endpoint.listen(metrics_site)
reactor.run()
pool.stop()
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment