Simple health-checks
Project description
Classic Health Checks
Простая реализация проверки работоспособности сервиса (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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6c12c96c0c3ae97b3c0b4afd694699b6552615fa73010369cbf0ca65f63bd43e
|
|
| MD5 |
8efc2175b45ff5063ae47041fdc5237a
|
|
| BLAKE2b-256 |
92350f78f6dce9f511c7e4896f096b352a4ecf59cca7ca53a5ee9e97fa52963d
|
Provenance
The following attestation bundles were made for classic_health_checks-0.1.0.tar.gz:
Publisher:
publish.yml on variasov/classic-health-checks
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
classic_health_checks-0.1.0.tar.gz -
Subject digest:
6c12c96c0c3ae97b3c0b4afd694699b6552615fa73010369cbf0ca65f63bd43e - Sigstore transparency entry: 974910677
- Sigstore integration time:
-
Permalink:
variasov/classic-health-checks@93c1bd3229f05cb03822cde91fc6d1f90ac3abc5 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/variasov
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@93c1bd3229f05cb03822cde91fc6d1f90ac3abc5 -
Trigger Event:
push
-
Statement type:
File details
Details for the file classic_health_checks-0.1.0-py3-none-any.whl.
File metadata
- Download URL: classic_health_checks-0.1.0-py3-none-any.whl
- Upload date:
- Size: 6.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e87409093faa298f42171d89c9bb42b55c5c1edc00b0728db0f9eb1d9c2725f7
|
|
| MD5 |
cd1de10c1bc43ade9e6b04776d7e225f
|
|
| BLAKE2b-256 |
9caae2d09c1c216a15ede04370cd4f154b11a715337e70c97ee369ff21cc4b2c
|
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
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
classic_health_checks-0.1.0-py3-none-any.whl -
Subject digest:
e87409093faa298f42171d89c9bb42b55c5c1edc00b0728db0f9eb1d9c2725f7 - Sigstore transparency entry: 974910740
- Sigstore integration time:
-
Permalink:
variasov/classic-health-checks@93c1bd3229f05cb03822cde91fc6d1f90ac3abc5 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/variasov
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@93c1bd3229f05cb03822cde91fc6d1f90ac3abc5 -
Trigger Event:
push
-
Statement type: