About DGLeague and UDisc

This page is for anyone at UDisc who followed the link in the User-Agent that DGLeague sends: DGLeague/1.0 (+https://dgleague.app/guides/udisc). It says what DGLeague is, exactly what it reads from UDisc, how often, what it keeps, and how to reach a person.

What DGLeague is

DGLeague is a web app that disc golf league managers use to run a league: rosters, sign-ups, pay-ins, payouts, and a history of past events. It is the league's back office. UDisc stays the scorecard: players keep scoring in UDisc, and DGLeague can read the public results afterwards so a manager does not retype them. DGLeague does not require UDisc.

What it reads

DGLeague reads three kinds of public UDisc page, and only when a league manager asks:

  • The past schedule of the league: the list of past events, one or more pages.
  • An event leaderboard: the results page of one event.
  • The upcoming schedule of the league: the list of events that are today or coming up.

Every request is a GET for a public page. DGLeague does not sign in to UDisc, does not fetch anything behind a sign-in, and does not send a POST, a form or any other write.

Every request starts with a click by a league manager in DGLeague. Importing past events requests the schedule pages and then one leaderboard per event. Syncing one event requests that event's leaderboard, and only while the event is being scored. Refreshing upcoming events requests two schedule pages. Reading a league's past divisions requests the schedule page and up to five recent leaderboards. No part of the running service requests UDisc on a timer, so nothing is requested unless a manager just asked for it.

DGLeague does not fetch course caddie book pages.

How often and how politely

  • DGLeague waits at least one second between the starts of two requests to UDisc, shared by every request one running copy of the service makes, so two leagues importing at once share that one pace.
  • When UDisc answers 429 (too many requests), DGLeague waits and tries again, up to three more times. It waits as long as UDisc's Retry-After says (at most 60 seconds), or a few seconds that grow with each try if UDisc gives no time. All the waiting for one request is capped at 60 seconds in total.
  • When UDisc answers 403 (refused), DGLeague does not retry.
  • After a 403, or a 429 that outlasts those tries, DGLeague makes no further request in that import. When a manager is importing past events, they are told that UDisc paused the import and which events are still waiting; trying again later brings in the rest, and events already imported are updated in place, not copied.
  • Every request carries the User-Agent above, so it can be told apart from browsers and from other tools, and it leads back to this page.

For example, importing a league with 126 past events is about 133 requests (7 schedule pages and 126 leaderboards), roughly two minutes.

What it stores

For a league that connected UDisc, DGLeague keeps what it read from the public pages so the league has its own history:

  • the event: its UDisc event id, name, date and page address;
  • each player's result: score, relative score, DNF, round rating and hole-by-hole scores;
  • the identifiers UDisc shows next to a player (UDisc user id and username, and PDGA number where the page shows one), used only to match a result to the right player in that league;
  • the cards (groups) and the course and layout details that appear on the leaderboard.

This is kept in that league's own records in DGLeague.

What it never does

  • It never writes anything to UDisc.
  • It never signs in to UDisc or reads a page behind a sign-in.
  • It never fetches a caddie book page.
  • It never requests UDisc on a schedule or without a manager's click.
  • It never retries after a 403.
  • It never sends a browser's User-Agent; it always says it is DGLeague.

Contact

If DGLeague's traffic is a problem, or you want it to change, write to support@dgleague.app.