tannuiscoding commited on
Commit
3782d65
Β·
1 Parent(s): 5a264f5

updated readme

Browse files
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