mina-api / keep_alive.py
Mina
Fresh deploy without large files
25ae7fe
"""
Keep-Alive Service to prevent Render.com from sleeping
Pings the server every 10 minutes to maintain activity
"""
import asyncio
import httpx
import logging
from datetime import datetime
logger = logging.getLogger("keep_alive")
class KeepAliveService:
def __init__(self, base_url: str = "http://localhost:7860"):
self.base_url = base_url
self.running = False
self.ping_interval = 600 # 10 minutes
async def start(self):
"""Start the keep-alive service"""
self.running = True
logger.info("🔄 Keep-Alive service started (pinging every 10 minutes)")
while self.running:
try:
await asyncio.sleep(self.ping_interval)
await self._ping()
except Exception as e:
logger.error(f"Keep-Alive error: {e}")
async def _ping(self):
"""Send a ping to keep the service alive"""
try:
async with httpx.AsyncClient(timeout=10.0) as client:
response = await client.get(f"{self.base_url}/health")
if response.status_code == 200:
logger.info(f"✅ Keep-Alive ping successful at {datetime.now().strftime('%H:%M:%S')}")
else:
logger.warning(f"⚠️ Keep-Alive ping returned {response.status_code}")
except Exception as e:
logger.warning(f"Keep-Alive ping failed: {e}")
def stop(self):
"""Stop the keep-alive service"""
self.running = False
logger.info("Keep-Alive service stopped")
keep_alive = KeepAliveService()