Added support for Gatus-based monitoring
build-docker / docker (push) Successful in 1m33s

This commit is contained in:
2026-04-08 17:21:17 +02:00 Verified
parent 7ffa8e7789
commit 6afa5c3072
3 changed files with 72 additions and 0 deletions
+34
View File
@@ -1,7 +1,11 @@
import logging
from datetime import datetime, timezone, timedelta
from logging import Logger
from typing import Literal
from aiohttp import ClientSession, ClientTimeout
from apscheduler.triggers.cron import CronTrigger
from apscheduler.triggers.date import DateTrigger
from libbot.cache.classes import CacheMemcached, CacheRedis
from libbot.cache.manager import create_cache_client
from libbot.pycord.classes import PycordBot
@@ -14,6 +18,7 @@ class HoloBot(PycordBot):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self._schedule_jobs()
self._set_cache_engine()
def _set_cache_engine(self) -> None:
@@ -26,3 +31,32 @@ class HoloBot(PycordBot):
prefix=self.config["cache"][cache_type]["prefix"],
default_ttl_seconds=3600,
)
async def _send_heartbeat(self) -> None:
if self.config["monitoring"]["enabled"] is False:
return
async with ClientSession() as session:
await session.post(
self.config["monitoring"]["url"],
headers={
"Authorization": f"Bearer {self.config['monitoring']['token']}"
},
timeout=ClientTimeout(3.0),
)
def _schedule_jobs(self) -> None:
if self.scheduler is None:
return
self.scheduler.add_job(
self._send_heartbeat,
trigger=DateTrigger(
datetime.now(tz=timezone.utc) + timedelta(seconds=5),
timezone=timezone.utc,
),
)
self.scheduler.add_job(
self._send_heartbeat,
trigger=CronTrigger.from_crontab("* * * * *"),
)
+5
View File
@@ -33,6 +33,11 @@
"prefix": null
}
},
"monitoring": {
"enabled": false,
"url": "https://status.example.org/api/v1/endpoints/my-group_my-service/external?success=true",
"token": "12345678"
},
"logging": {
"size": 512,
"location": "logs"
+33
View File
@@ -0,0 +1,33 @@
import logging
from logging import Logger
from libbot.utils import config_set, config_delete
from mongodb_migrations.base import BaseMigration
logger: Logger = logging.getLogger(__name__)
class Migration(BaseMigration):
def upgrade(self):
try:
config_set("enabled", False, "monitoring")
config_set("url", "", "monitoring")
config_set("token", "", "monitoring")
except Exception as exc:
logger.error(
"Could not upgrade the config during migration '%s' due to: %s",
__name__,
exc,
)
def downgrade(self):
try:
config_delete("monitoring", "enabled")
config_delete("monitoring", "url")
config_delete("monitoring", "token")
except Exception as exc:
logger.error(
"Could not downgrade the config during migration '%s' due to: %s",
__name__,
exc,
)