Skip to content

Conversation

@KristjanESPERANTO
Copy link
Collaborator

@KristjanESPERANTO KristjanESPERANTO commented Nov 13, 2025

  1. Convert CalendarFetcher from legacy constructor function pattern to ES6 class (which simplifies future migration from CommonJS to ES modules).
  2. Implement targeted HTTP error handling with smart retry strategies for common calendar feed issues:
    • 401/403: Extended retry delay (5× interval, min 30 min)
    • 429: Retry-After header parsing with 15 min fallback
    • 5xx: Exponential backoff (2^count, max 3 retries)
    • 4xx: Extended retry (2× interval, min 15 min)
    • Add serverErrorCount tracking for exponential backoff
    • Error messages now include specific HTTP status codes and calculated retry delays for better debugging and user feedback

Previously, CalendarFetcher did not respond appropriately to HTTP errors, continuing to hammer endpoints without backoff, potentially overloading servers and triggering rate limits. This refactoring implements respectful retry strategies that adapt to server responses and reduce unnecessary load.

Maybe we could later centralize the HTTP error handling and use it for weather and newsfeed as well.

The PR was inspired by having worked on the calendar fetcher for MMM-CalendarExt2, where there was already better error handling.

… error handling

1. Convert CalendarFetcher from legacy constructor function pattern to ES6 class,
   which simplifies future migration to ES modules.
2. Implement targeted HTTP error handling with smart retry strategies for common
   calendar feed issues:
   - 401/403: Extended retry delay (5× interval, min 30 min)
   - 429: Retry-After header parsing with 15 min fallback
   - 5xx: Exponential backoff (2^count, max 3 retries)
   - 4xx: Extended retry (2× interval, min 15 min)
   - Add serverErrorCount tracking for exponential backoff
   - Error messages now include specific HTTP status codes and calculated retry delays
     for better debugging and user feedback

Previously, CalendarFetcher did not respond appropriately to HTTP errors, continuing
to hammer endpoints without backoff, potentially overloading servers and triggering
rate limits. This refactoring implements respectful retry strategies that adapt to
server responses and reduce unnecessary load.
@khassel khassel merged commit 3c4d69e into MagicMirrorOrg:develop Nov 14, 2025
9 checks passed
@rejas
Copy link
Collaborator

rejas commented Nov 14, 2025

Awesome work, thank you!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants