Skip to main content

Simple health-checks

Project description

Classic Health Checks

PyPI version License: MIT

Простая реализация проверки работоспособности сервиса (liveness probe) через обновление временной метки файла.

Этот пакет предоставляет задачу, которая может быть запущена в отдельном потоке или гринлете для периодического обновления файла на диске. Внешние системы мониторинга, такие как Kubernetes или systemd, могут отслеживать время последнего изменения этого файла, чтобы убедиться, что сервис активен и не завис.

Установка

pip install classic-health-checks

Использование (Usage)

Вот минимальный пример использования HealthCheck в отдельном потоке.

Использование с gevent

Для использования с gevent убедитесь, что он установлен:

pip install gevent

HealthCheck легко интегрируется с gevent. Инициализируем и запускаем run в гринлете.

import gevent
from gevent.monkey import patch_all

patch_all()

import logging
from pydantic_settings import BaseSettings
from classic.health_checks import HealthCheck, HealthCheckSettingsMixin

# Настройте базовый логгер
logging.basicConfig(
    level=logging.DEBUG,
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger(__name__)

class AppSettings(HealthCheckSettingsMixin, BaseSettings):
   ...

settings = AppSettings(HEALTHCHECK_FILE_PATH='/tmp/healthcheck')

# 1. Создаем экземпляр

health_check = HealthCheck(
    logger=logger,
    settings=settings,
)

# 2. Запускаем HealthCheck и другие задачи в своих гринлетах

# Псевдо-задачи для примера
class LongRunningTask:
    def __init__(self, name: str):
        self.name = name
    def run(self):
        logger.info(f"Задача '{self.name}' запущена.")
        while True:
            gevent.sleep(60)

task1 = LongRunningTask("Обработчик сообщений")
task2 = LongRunningTask("Сборщик метрик")

all_greenlets = [
    gevent.spawn(health_check.run),
    gevent.spawn(task1.run),
    gevent.spawn(task2.run),
]

logger.info(f"Запущено {len(all_greenlets)} гринлетов, включая HealthCheck.")

# 3. Ожидаем завершения всех задач и обрабатываем остановку
try:
    gevent.joinall(all_greenlets, raise_error=True)
except (KeyboardInterrupt, SystemExit):
    logger.info("Получен сигнал остановки, завершаем все гринлеты...")
    gevent.killall(all_greenlets)
    logger.info("Приложение остановлено.")

Подсказка: "Сигнал остановки" обычно отправляется нажатием Ctrl+C в терминале, где запущен скрипт.

Интеграция с Kubernetes

Вы можете использовать этот механизм для настройки livenessProbe в вашем Helm-чарте:

# ... внутри spec.template.spec.containers[]
# Добавляем переменную окружения, чтобы она была доступна в livenessProbe
env:
- name: HEALTHCHECK_FILE_PATH
  value: /tmp/my_app_healthy
  
  
envsFromSecret:
  secret-envs:
    ...
livenessProbe:
  exec:
    command:
    - /bin/sh
    - -c
    - "[ $(($(date +%s) - $(stat -c %Y $HEALTHCHECK_FILE_PATH))) -le 10 ]"
  periodSeconds: 10
  initialDelaySeconds: 30
  failureThreshold: 3

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

classic_health_checks-0.1.1.tar.gz (5.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

classic_health_checks-0.1.1-py3-none-any.whl (6.3 kB view details)

Uploaded Python 3

File details

Details for the file classic_health_checks-0.1.1.tar.gz.

File metadata

  • Download URL: classic_health_checks-0.1.1.tar.gz
  • Upload date:
  • Size: 5.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for classic_health_checks-0.1.1.tar.gz
Algorithm Hash digest
SHA256 3cab6b71a30f7efa03b1ffa6567d92b658c7b7a5a6599c8ed155e6d4d575d42f
MD5 437e4a040a28254a3e4b6d9515dbf12b
BLAKE2b-256 4e90813b5c7358382217802174e9d16b8779ee9e0e49f0795f827017aef4125a

See more details on using hashes here.

Provenance

The following attestation bundles were made for classic_health_checks-0.1.1.tar.gz:

Publisher: publish.yml on variasov/classic-health-checks

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file classic_health_checks-0.1.1-py3-none-any.whl.

File metadata

File hashes

Hashes for classic_health_checks-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 d9da2d09b054f675bba3a381571b841d8a09c07764eac5c25bc31fd5431ff685
MD5 f6ff773d389971b0b029f94735127396
BLAKE2b-256 da65d6b0279c702eda56492e5a9aa572ac5fa70d96f4cb2901e0b727e3a279ce

See more details on using hashes here.

Provenance

The following attestation bundles were made for classic_health_checks-0.1.1-py3-none-any.whl:

Publisher: publish.yml on variasov/classic-health-checks

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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