Spaces:
Sleeping
Sleeping
Commit Β·
3782d65
1
Parent(s): 5a264f5
updated readme
Browse files- README.md +10 -0
- backend/__init__.py +4 -0
- backend/utils/__init__.py +3 -0
- backend/utils/scheduler.py +56 -0
- requirements.txt +1 -0
README.md
CHANGED
|
@@ -1,3 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
# π« BREATHE
|
| 2 |
|
| 3 |
> **Stress Intelligence Platform** β understand your stress before it controls you.
|
|
|
|
| 1 |
+
---
|
| 2 |
+
title: BREATHE
|
| 3 |
+
emoji: π«
|
| 4 |
+
colorFrom: blue
|
| 5 |
+
colorTo: indigo
|
| 6 |
+
sdk: docker
|
| 7 |
+
app_file: app.py
|
| 8 |
+
pinned: false
|
| 9 |
+
---
|
| 10 |
+
|
| 11 |
# π« BREATHE
|
| 12 |
|
| 13 |
> **Stress Intelligence Platform** β understand your stress before it controls you.
|
backend/__init__.py
CHANGED
|
@@ -87,4 +87,8 @@ def create_app(config_override: dict | None = None) -> Flask:
|
|
| 87 |
roberta_ckpt =os.environ.get("ROBERTA_CKPT", ""),
|
| 88 |
)
|
| 89 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 90 |
return app
|
|
|
|
| 87 |
roberta_ckpt =os.environ.get("ROBERTA_CKPT", ""),
|
| 88 |
)
|
| 89 |
|
| 90 |
+
# ββ Background scheduler βββββββββββββββββββββββββββββββββββββββββββββββββ
|
| 91 |
+
from .utils.scheduler import init_scheduler
|
| 92 |
+
init_scheduler(app, db)
|
| 93 |
+
|
| 94 |
return app
|
backend/utils/__init__.py
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""
|
| 2 |
+
Utilities for the backend.
|
| 3 |
+
"""
|
backend/utils/scheduler.py
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""
|
| 2 |
+
Background scheduler for periodic tasks like keeping the database alive.
|
| 3 |
+
"""
|
| 4 |
+
import logging
|
| 5 |
+
from apscheduler.schedulers.background import BackgroundScheduler
|
| 6 |
+
from apscheduler.triggers.interval import IntervalTrigger
|
| 7 |
+
|
| 8 |
+
logger = logging.getLogger(__name__)
|
| 9 |
+
|
| 10 |
+
|
| 11 |
+
def keep_db_alive(db):
|
| 12 |
+
"""
|
| 13 |
+
Execute a simple query to keep the database connection alive.
|
| 14 |
+
Prevents connection timeouts from idle databases.
|
| 15 |
+
"""
|
| 16 |
+
try:
|
| 17 |
+
# Execute a simple query to test the connection
|
| 18 |
+
db.session.execute("SELECT 1")
|
| 19 |
+
db.session.commit()
|
| 20 |
+
logger.debug("Database keep-alive ping successful")
|
| 21 |
+
except Exception as e:
|
| 22 |
+
logger.warning(f"Database keep-alive ping failed: {e}")
|
| 23 |
+
try:
|
| 24 |
+
db.session.rollback()
|
| 25 |
+
except Exception as rollback_err:
|
| 26 |
+
logger.error(f"Failed to rollback after keep-alive error: {rollback_err}")
|
| 27 |
+
|
| 28 |
+
|
| 29 |
+
def init_scheduler(app, db):
|
| 30 |
+
"""
|
| 31 |
+
Initialize the background scheduler with periodic database keep-alive jobs.
|
| 32 |
+
|
| 33 |
+
Args:
|
| 34 |
+
app: Flask application instance
|
| 35 |
+
db: SQLAlchemy database instance
|
| 36 |
+
"""
|
| 37 |
+
scheduler = BackgroundScheduler()
|
| 38 |
+
|
| 39 |
+
# Add a job to ping the database every 5 minutes (300 seconds)
|
| 40 |
+
# Adjust the interval as needed based on your database provider's timeout policy
|
| 41 |
+
scheduler.add_job(
|
| 42 |
+
func=keep_db_alive,
|
| 43 |
+
args=[db],
|
| 44 |
+
trigger=IntervalTrigger(seconds=300), # 5 minutes
|
| 45 |
+
id="keep_db_alive",
|
| 46 |
+
name="Keep database connection alive",
|
| 47 |
+
replace_existing=True,
|
| 48 |
+
)
|
| 49 |
+
|
| 50 |
+
try:
|
| 51 |
+
scheduler.start()
|
| 52 |
+
logger.info("Background scheduler started with database keep-alive job")
|
| 53 |
+
except Exception as e:
|
| 54 |
+
logger.error(f"Failed to start scheduler: {e}")
|
| 55 |
+
|
| 56 |
+
return scheduler
|
requirements.txt
CHANGED
|
@@ -26,3 +26,4 @@ transformers>=4.38.0
|
|
| 26 |
|
| 27 |
# Production server
|
| 28 |
gunicorn>=21.2.0
|
|
|
|
|
|
| 26 |
|
| 27 |
# Production server
|
| 28 |
gunicorn>=21.2.0
|
| 29 |
+
APScheduler>=3.10.0
|