Package: py-healthcheck
HealthcheckHealthcheck is a library to write simple healthcheck functions that can
be used to monitor your application. It is possible to use in aFlaskapp orTornadoapp. It’s useful for asserting that your dependencies
are up and running and your application can respond to HTTP requests.
The Healthcheck functions can be exposed via a user definedFlaskroute so you can use an external monitoring application (monit,nagios,Runscope, etc.) to check the status and uptime of your
application.New in version 1.1: Healthcheck also gives you a simple Flask route to
view information about your application’s environment. By default, this
includes data about the operating system, the Python environment, the
current process, and the application config. You can customize which
sections are included, or add your own sections to the output.Installingpip install py-healthcheckUsageHere’s an example of basic usage withFlask:fromflaskimportFlaskfromhealthcheckimportHealthCheck,EnvironmentDumpapp=Flask(__name__)health=HealthCheck()envdump=EnvironmentDump()# add your own check function to the healthcheckdefredis_available():client=_redis_client()info=client.info()returnTrue,"redis ok"health.add_check(redis_available)# add your own data to the environment dumpdefapplication_data():return{"maintainer":"Luis Fernando Gomes","git_repo":"https://github.com/ateliedocodigo/py-healthcheck"}envdump.add_section("application",application_data)# Add a flask route to expose informationapp.add_url_rule("/healthcheck","healthcheck",view_func=lambda:health.run())app.add_url_rule("/environment","environment",view_func=lambda:envdump.run())To use withTornadoyou can import theTornadoHandler:importtornado.webfromhealthcheckimportTornadoHandler,HealthCheck,EnvironmentDumpapp=tornado.web.Application()health=HealthCheck()envdump=EnvironmentDump()# add your own check function to the healthcheckdefredis_available():client=_redis_client()info=client.info()returnTrue,"redis ok"health.add_check(redis_available)# add your own data to the environment dump or healthcheckdefapplication_data():return{"maintainer":"Luis Fernando Gomes","git_repo":"https://github.com/ateliedocodigo/py-healthcheck"}# ou choose where you want to output this informationhealth.add_section("application",application_data)health.add_section("version",__version__)envdump.add_section("application",application_data)# Add a tornado handler to expose informationapp.add_handlers(r".*",[("/healthcheck",TornadoHandler,dict(checker=health)),("/environment",TornadoHandler,dict(checker=envdump)),])Alternatively you can set all together:importtornado.webfromhealthcheckimportTornadoHandler,HealthCheck,EnvironmentDump# add your own check function to the healthcheckdefredis_available():client=_redis_client()info=client.info()returnTrue,"redis ok"health=HealthCheck(checkers=[redis_available])# add your own data to the environment dumpdefapplication_data():return{"maintainer":"Luis Fernando Gomes","git_repo":"https://github.com/ateliedocodigo/py-healthcheck"}envdump=EnvironmentDump(application=application_data)app=tornado.web.Application([("/healthcheck",TornadoHandler,dict(checker=health)),("/environment",TornadoHandler,dict(checker=envdump)),])To run all of your check functions, make a request to the healthcheck
URL you specified, like this:curl "http://localhost:5000/healthcheck"And to view the environment data, make a check to the URL you specified
for EnvironmentDump:curl "http://localhost:5000/environment"The HealthCheck classCheck FunctionsCheck functions take no arguments and should return a tuple of (bool,
str). The boolean is whether or not the check passed. The message is any
string or output that should be rendered for this check. Useful for
error messages/debugging.# add check functionsdefaddition_works():if1+1==2:returnTrue,"addition works"else:returnFalse,"the universe is broken"Any exceptions that get thrown by your code will be caught and handled
as errors in the healthcheck:# add check functionsdefthrows_exception():bad_var=Nonebad_var['explode']Will output:{"status":"failure","results":[{"output":"'NoneType' object has no attribute '__getitem__'","checker":"throws_exception","passed":false}]}Note, all checkers will get run and all failures will be reported. It’s
intended that they are all separate checks and if any one fails the
healthcheck overall is failed.CachingIn Runscope’s infrastructure, the /healthcheck endpoint is hit
surprisingly often. haproxy runs on every server, and each haproxy hits
every healthcheck twice a minute. (So if we have 30 servers in our
infrastructure, that’s 60 healthchecks per minute to every Flask
service.) Plus, monit hits every healthcheck 6 times a minute.To avoid putting too much strain on backend services, health check
results can be cached in process memory. By default, health checks that
succeed are cached for 27 seconds, and failures are cached for 9
seconds. These can be overridden with thesuccess_ttlandfailed_ttlparameters. If you don’t want to use the cache at all,
initialize the Healthcheck object withsuccess_ttl=None, failed_ttl=None.CustomizingYou can customize the status codes, headers, and output format for
success and failure responses.The EnvironmentDump classBuilt-in data sectionsBy default, EnvironmentDump data includes these 4 sections:os: information about your operating system.python: information about your Python executable, Python path,
and installed packages.process: information about the currently running Python process,
including the PID, command line arguments, and all environment
variables.Some of the data is scrubbed to avoid accidentally exposing passwords or
access keys/tokens. Config keys and environment variable names are
scanned forkey,token, orpass. If those strings are
present in the name of the variable, the value is not included.Disabling built-in data sectionsFor security reasons, you may want to disable an entire section. You can
disable sections when you instantiate theEnvironmentDumpobject,
like this:envdump=EnvironmentDump(include_python=False,include_os=False,include_process=False)Adding custom data sectionsYou can add a new section to the output by registering a function of
your own. Here’s an example of how this would be used:defapplication_data():return{"maintainer":"Luis Fernando Gomes","git_repo":"https://github.com/ateliedocodigo/py-healthcheck""config":app.config}envdump=EnvironmentDump()envdump.add_section("application",application_data)CreditsThis project was forked fromRunscope/healthcheck. since1.3.1