Spaces:
Runtime error
Runtime error
Replace temporary independent health check process with integrated health check endpoint
Browse files- Dockerfile +1 -6
- scripts/run.sh +0 -7
- src/ctp_slack_bot/app.py +25 -13
- temporary_health_check_server.py +0 -11
Dockerfile
CHANGED
@@ -28,10 +28,5 @@ USER appuser
|
|
28 |
# Expose a volume mount for logs ― Hugging Face Spaces requires specifically /data.
|
29 |
VOLUME /data
|
30 |
|
31 |
-
# Temporary block for the health server fix:
|
32 |
-
COPY scripts/run.sh ./scripts/
|
33 |
-
COPY temporary_health_check_server.py ./
|
34 |
-
CMD ["./scripts/run.sh"]
|
35 |
-
|
36 |
# Run the application.
|
37 |
-
|
|
|
28 |
# Expose a volume mount for logs ― Hugging Face Spaces requires specifically /data.
|
29 |
VOLUME /data
|
30 |
|
|
|
|
|
|
|
|
|
|
|
31 |
# Run the application.
|
32 |
+
CMD ["python", "-m", "ctp_slack_bot.app"]
|
scripts/run.sh
DELETED
@@ -1,7 +0,0 @@
|
|
1 |
-
#!/bin/bash
|
2 |
-
|
3 |
-
parent_path=$(cd "$(dirname "${BASH_SOURCE[0]}")"; pwd -P)
|
4 |
-
|
5 |
-
cd "${parent_path}/.."
|
6 |
-
|
7 |
-
python -m ctp_slack_bot.app & python "temporary_health_check_server.py"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/ctp_slack_bot/app.py
CHANGED
@@ -1,3 +1,4 @@
|
|
|
|
1 |
from asyncio import all_tasks, CancelledError, create_task, current_task, get_running_loop, run
|
2 |
from loguru import logger
|
3 |
from signal import SIGINT, SIGTERM
|
@@ -6,18 +7,6 @@ from typing import Any, Callable
|
|
6 |
from ctp_slack_bot.containers import Container
|
7 |
from ctp_slack_bot.core.logging import setup_logging
|
8 |
|
9 |
-
async def handle_shutdown_signal() -> None:
|
10 |
-
logger.info("Received shutdown signal.")
|
11 |
-
for task in all_tasks():
|
12 |
-
if task is not current_task() and not task.done():
|
13 |
-
task.cancel()
|
14 |
-
logger.trace("Cancelled task {}.", task.get_name())
|
15 |
-
logger.info("Cancelled all tasks.")
|
16 |
-
|
17 |
-
def create_shutdown_signal_handler() -> Callable[[], None]:
|
18 |
-
def shutdown_signal_handler() -> None:
|
19 |
-
create_task(handle_shutdown_signal())
|
20 |
-
return shutdown_signal_handler
|
21 |
|
22 |
async def main() -> None:
|
23 |
# Setup logging.
|
@@ -26,13 +15,36 @@ async def main() -> None:
|
|
26 |
|
27 |
# Set up dependency injection container.
|
28 |
container = Container()
|
29 |
-
container.wire(packages=[
|
30 |
|
31 |
# Kick off services which should be active from the start.
|
32 |
container.content_ingestion_service()
|
33 |
container.question_dispatch_service()
|
34 |
container.schedule_service()
|
35 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
36 |
# Start the Slack socket mode handler in the background.
|
37 |
socket_mode_handler = await container.socket_mode_handler()
|
38 |
slack_bolt_task = create_task(socket_mode_handler.start_async())
|
|
|
1 |
+
from aiohttp.web import Application as WebApplication, AppRunner as WebAppRunner, Response, TCPSite
|
2 |
from asyncio import all_tasks, CancelledError, create_task, current_task, get_running_loop, run
|
3 |
from loguru import logger
|
4 |
from signal import SIGINT, SIGTERM
|
|
|
7 |
from ctp_slack_bot.containers import Container
|
8 |
from ctp_slack_bot.core.logging import setup_logging
|
9 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
10 |
|
11 |
async def main() -> None:
|
12 |
# Setup logging.
|
|
|
15 |
|
16 |
# Set up dependency injection container.
|
17 |
container = Container()
|
18 |
+
container.wire(packages=["ctp_slack_bot"])
|
19 |
|
20 |
# Kick off services which should be active from the start.
|
21 |
container.content_ingestion_service()
|
22 |
container.question_dispatch_service()
|
23 |
container.schedule_service()
|
24 |
|
25 |
+
async def health(request):
|
26 |
+
return Response(text="lol")
|
27 |
+
http_server = WebApplication()
|
28 |
+
http_server.router.add_get("/health", health)
|
29 |
+
web_app_runner = WebAppRunner(http_server)
|
30 |
+
await web_app_runner.setup()
|
31 |
+
website = TCPSite(web_app_runner, "0.0.0.0", 8080)
|
32 |
+
await website.start()
|
33 |
+
|
34 |
+
async def handle_shutdown_signal() -> None:
|
35 |
+
logger.info("Received shutdown signal.")
|
36 |
+
await web_app_runner.cleanup()
|
37 |
+
for task in all_tasks():
|
38 |
+
if task is not current_task() and not task.done():
|
39 |
+
task.cancel()
|
40 |
+
logger.trace("Cancelled task {}.", task.get_name())
|
41 |
+
logger.info("Cancelled all tasks.")
|
42 |
+
|
43 |
+
def create_shutdown_signal_handler() -> Callable[[], None]:
|
44 |
+
def shutdown_signal_handler() -> None:
|
45 |
+
create_task(handle_shutdown_signal())
|
46 |
+
return shutdown_signal_handler
|
47 |
+
|
48 |
# Start the Slack socket mode handler in the background.
|
49 |
socket_mode_handler = await container.socket_mode_handler()
|
50 |
slack_bolt_task = create_task(socket_mode_handler.start_async())
|
temporary_health_check_server.py
DELETED
@@ -1,11 +0,0 @@
|
|
1 |
-
from aiohttp import web
|
2 |
-
|
3 |
-
async def aliveness_handler(request):
|
4 |
-
return web.Response(text="Server is alive and kicking!")
|
5 |
-
|
6 |
-
app = web.Application()
|
7 |
-
app.router.add_get('/', aliveness_handler)
|
8 |
-
app.router.add_get('/health', aliveness_handler)
|
9 |
-
|
10 |
-
if __name__ == "__main__":
|
11 |
-
web.run_app(app, host='0.0.0.0', port=8080)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|