This commit is contained in:
@@ -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("* * * * *"),
|
||||
)
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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,
|
||||
)
|
||||
Reference in New Issue
Block a user