Ryan Walters 51f8256e61 feat: implement comprehensive retry mechanism and improve observability
Add retry tracking to scrape jobs with configurable max retries (default 5), implement
automatic database migrations on startup, and significantly reduce logging noise from
infrastructure layers. Enhanced tracing with structured spans for better debugging while
keeping output readable by suppressing verbose trace logs from rate limiters and session
management. Improved error handling with detailed retry context and proper session cookie
validation.
2025-11-03 10:18:07 -06:00

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)

    • Primary interface for course monitoring and data queries
    • Built with Serenity and Poise frameworks for robust command handling
    • Uses slash commands with comprehensive error handling and logging
  • 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

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
No description provided
Readme 1.9 MiB
Languages
Rust 88.5%
TypeScript 8.4%
Dockerfile 1.1%
Just 0.8%
JavaScript 0.6%
Other 0.6%