Skip to main content

Health Check API for multiprocessing python apps

Project description

A Health Check API Library for Multiprocessing Python Apps

passing coverage version license

This library adds a health check REST API to your multiprocessing apps. You can add decorators to your periodic running functions and library will track the function calls. This library supports multiprocessing threads. You can fetch a single overall app status by fetching http://<ip>:<port>/health, a single overall app readiness by fetching http://<ip>:<port>/ready, or detailed statuses of all service with fetching http://<ip>:<port>/health?v http://<ip>:<port>/ready?v

Usage

Set PY_HEALTH_CHECK_HOST and PY_HEALTH_CHECK_PORT environment variable and add the appropriate decorator to your periodic functions or class methods

import time
import multiprocessing as mp

import healthcheck_python


def run_continuously():
	while True:
		run_once()
		time.sleep(1)


@healthcheck_python.periodic(service="my_service1", timeout=10)
@healthcheck_python.healthy(service="my_service1")
def run_once():
	do_something()


@healthcheck_python.periodic(timeout=5)
class MyProcess(mp.Process):

	def __init__(self, queue):
		super().__init__()
		self.queue = queue

		self.continue_running = True
		self.var = 0

	def run(self):
		self.init()
		while self.continue_running:
			self.do_the_thing_once()
			time.sleep(1)

	@healthcheck_python.healthy
	def do_the_thing_once(self):
		self.do_something()

	@healthcheck_python.mark_ready
	def init(self):
		self.var = 1

	@healthcheck_python.mark_done
	def cleanup(self):
		self.queue.close()

With these wrappers, run_once() has to called every 10 seconds and MyProcess.do_the_thing_once() has to be called every 5 seconds. If at least one fails, the app status will be down.

$ curl http://localhost:8080/health
{"status": true}
$ curl http://localhost:8080/health?v
{"status": true, "ready": false, "services": {"my_service1": {"ready", false, "latest_start": 1611137135.3203568, "latest_end": 1611137135.3203998, "fps":0, "timeout": 10},"MyProcess": {"ready":true, "latest_start": 1611137135.3203568, "latest_end": 1611137135.3203998, "fps":0, "timeout": 5}}}

Set PY_HEALTH_TEST_MODE to disable the functionality. Your functions will run without any intervention and no port will be listened

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

healthcheck-python-0.9.0.tar.gz (14.9 kB view hashes)

Uploaded Source

Built Distribution

healthcheck_python-0.9.0-py3-none-any.whl (19.8 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page