Overview
TheOrchestrator class is the main backend entry point for the CS2 Market Tracker. It coordinates all schedulers with shared rate limiting, ensuring all components work in harmony without exceeding Steam’s API rate limits.
Think of it as a choir conductor - it ensures all parts (schedulers) work together while respecting API constraints.
Class Definition
Constructor
Path to YAML configuration file
Attributes
Loaded configuration from YAML file
Shared rate limiter instance used by all schedulers
High-frequency scheduler for live market data
Fixed-interval scheduler for historical price data
Event for coordinating graceful shutdown
Methods
load_and_validate_config()
Loads configuration from YAML file and validates feasibility.- Configuration loading from YAML
- Required field validation
- Rate limit feasibility calculation
SystemExit: If configuration is invalid or infeasible
validate_required_fields()
Validates that each tracking item has all required fields.List of tracking items to validate
- All items:
market_hash_name,apiid,polling-interval-in-seconds,appid - histogram/activity:
item_nameid(additional)
priceoverviewitemordershistogramitemordersactivitypricehistory
SystemExit: If any required fields are missing or invalid
validate_config_feasibility()
Validates that configuration is feasible given rate limits.Maximum requests per window
Time window in seconds
List of tracking items with their configurations
SystemExit: If calculated requests exceed rate limit
setup_schedulers()
Creates scheduler instances with shared rate limiter.- Creates a single shared
RateLimiterinstance (critical for API compliance) - Filters items by type (live vs. history)
- Initializes
snoozerSchedulerfor live items (priceoverview, histogram, activity) - Initializes
ClockworkSchedulerfor pricehistory items
setup_signal_handlers()
Sets up signal handlers for graceful shutdown.SIGINT(Ctrl+C)SIGTERM(kill command)
shutdown()
Handles graceful shutdown of all schedulers.run()
Main orchestrator loop. Runs all schedulers concurrently until shutdown signal.- Load and validate configuration
- Setup schedulers with shared rate limiter
- Setup signal handlers for graceful shutdown
- Run all schedulers concurrently
- Wait for shutdown event or task failure
- Cancel remaining tasks and exit gracefully
Usage Example
Configuration Structure
The orchestrator expects a YAML configuration with the following structure:Popular App IDs
Counter-Strike 2 (CS2)
Dota 2
Team Fortress 2
Rust
Steam (trading cards, backgrounds, emoticons)