ExamplesΒΆ
The following example demonstrates how to initialize the status handler for the base application status page.
import tornado.ioloop
import tornado.web
from sprockets.handlers import status
application = tornado.web.Application([
('/status', status.StatusHandler),
])
if __name__ == '__main__':
# Set the application name to the local package
status.set_application('mypackage')
application.listen(8888)
tornado.ioloop.IOLoop.current().start()
You can change the status by setting the status attribute on
RequestHandler.application, but note this does it for the single
running process and should be coordinated across all backends using an
external synchronization mechanism.
The following example uses Consul to determine if a request is in maintenance mode.
import json
import socket
from tornado import gen
from tornado import httpclient
from sprockets.handlers import status
class ConsulStatusHandler(status.StatusHandler):
HEALTH_URL_FORMAT = 'http://localhost:8500/v1/health/node/{0}
@gen.coroutine
def prepare(self):
result = yield self._maintenance_enabled()
if result:
setattr(self.application, 'status', status.MAINTENANCE)
else:
setattr(self.application, 'status', status.OK)
@gen.coroutine
def _maintenance_enabled(self)
client = httpclient.AsyncHTTPClient()
url = self.HEALTH_URL_FORMAT.format(socket.gethostname())
result = yield client.fetch()
return self._in_maintenance(json.loads(result.body))
@staticmethod
def _in_maintenance(self, checks):
for check in checks:
if check['CheckID'] == '_node_maintenance':
return check['Status'] == 'critical'
return False