mirror of
https://github.com/Xevion/banner.git
synced 2025-12-06 05:14:26 -06:00
47c23459f13922dc82eb350414f7751af7df3c85
Implements graceful shutdown with broadcast channels and proper timeout handling for scraper workers, scheduler, bot service, and status update tasks. Introduces centralized shutdown utilities and improves service manager to handle parallel shutdown with per-service timeouts instead of shared timeout budgets. Key changes: - Add utils module with shutdown helper functions - Update ScraperService to return errors on shutdown failures - Refactor scheduler with cancellable work tasks and 5s grace period - Extract worker shutdown logic into helper methods for clarity - Add broadcast channel shutdown support to BotService and status task - Improve ServiceManager to shutdown services in parallel with individual timeouts
fix: pass RAILWAY_GIT_COMMIT_SHA through Docker, provide Cargo.toml for frontend (version retrieval)
banner
A complex multi-service system providing a Discord bot and browser-based interface to UTSA's course data.
Services
The application consists of three modular services that can be run independently or together:
-
Discord Bot (
bot) -
Web Server (
web)- Axum-based server with Vite/React-based frontend
- Embeds static assets at compile time with E-Tags & Cache-Control headers
-
Scraper (
scraper)- Intelligent data collection system with priority-based queuing inside PostgreSQL via
sqlx - Rate-limited scraping with burst handling to respect UTSA's systems
- Handles course data updates, availability changes, and metadata synchronization
- Intelligent data collection system with priority-based queuing inside PostgreSQL via
Quick Start
pnpm install -C web # Install frontend dependencies
cargo build # Build the backend
just dev # Runs auto-reloading dev build
just dev --services bot,web # Runs auto-reloading dev build, running only the bot and web services
just dev-build # Development build with release characteristics (frontend is embedded, non-auto-reloading)
just build # Production build that embeds assets
Documentation
Comprehensive documentation is available in the docs/ folder.
Description
Languages
Rust
88.5%
TypeScript
8.4%
Dockerfile
1.1%
Just
0.8%
JavaScript
0.6%
Other
0.6%