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.0.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.0-py3-none-any.whl (6.2 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: classic_health_checks-0.1.0.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.0.tar.gz
Algorithm Hash digest
SHA256 6c12c96c0c3ae97b3c0b4afd694699b6552615fa73010369cbf0ca65f63bd43e
MD5 8efc2175b45ff5063ae47041fdc5237a
BLAKE2b-256 92350f78f6dce9f511c7e4896f096b352a4ecf59cca7ca53a5ee9e97fa52963d

See more details on using hashes here.

Provenance

The following attestation bundles were made for classic_health_checks-0.1.0.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.0-py3-none-any.whl.

File metadata

File hashes

Hashes for classic_health_checks-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e87409093faa298f42171d89c9bb42b55c5c1edc00b0728db0f9eb1d9c2725f7
MD5 cd1de10c1bc43ade9e6b04776d7e225f
BLAKE2b-256 9caae2d09c1c216a15ede04370cd4f154b11a715337e70c97ee369ff21cc4b2c

See more details on using hashes here.

Provenance

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