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.0.1.tar.gz (5.7 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.0.1-py3-none-any.whl (6.1 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: classic_health_checks-0.0.1.tar.gz
  • Upload date:
  • Size: 5.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.13

File hashes

Hashes for classic_health_checks-0.0.1.tar.gz
Algorithm Hash digest
SHA256 1cca80098b962d152af74cdaf2e0fb70be633507ac0553ff76ed482a56c0fb63
MD5 481c354dc6751c0fea388235cefe9d20
BLAKE2b-256 95017b3827e2cdb983d77b77e3a619bea63de35ad589c2fd902015f2f63d33c3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for classic_health_checks-0.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 3f18c83c40483253b5381cc06f745920c4c4de7dbdc0649b3e73d5d2f7221a72
MD5 cf5b93bd47c13baa01f83d578427f5eb
BLAKE2b-256 c4a69551609b0ae60f3691926839123181720eaba0c7a0ddaa316454a9177829

See more details on using hashes here.

Provenance

The following attestation bundles were made for classic_health_checks-0.0.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