There are five triggers, also called incidents, that control the flow of data to BOS from each Data Proxy.
create <game> created
in_progress <game> started
finish <game> finished
result <game> score
canceled <game> canceled / postponed / abandoned
Where <game> represents any game in the context of BookiePro. It's worth calling this out because right now we only think of Data Proxies in the context of BookiePro, and therefore sports data, a Data Proxy could in theory send other types of data. For example, as long as BOS receives a 'winner' and a 'loser' that data could be anything from the outcome of a coin toss to the winner of a general election!
Each Data Feed Provider will send data to a Data Proxy according to it's own rules, and not necessarily a direct mapping to the four triggers BOS expects. For example, a DFP might send a single message for both a finished game and the result.
It would then be the job of the Data Proxy to re-format this data in to the two messages that BOS is expecting.
DFPs will also use their own status codes for the events that they send, and these status codes won't match the triggers that BOS uses. Once again it is the job of the Data Proxy to normalize this data. The following is an example of the status codes used by a DFP:
|1|Not yet started|The event hash not yet started||2|In progress|The event is live||3|Finished|The event is finished||4|Cancelled|The event hash been cancelled||5|Postponed|The event hash been postponed||6|Interrupted|The event has been interrupted||7|Abandoned|The event hash been abandoned||8|Coverage lost|The coverage for this event has been lost||9|About to start|The event has not started but is about to.
Using the triggers supported by BOS it then requires the Data Proxy to map these codes in a similar manner to the following:
|1| --> (not handled)|2| --> in_progress|3| --> finish|4| --> canceled|5| --> canceled|6| --> canceled|7| --> canceled|8| --> (not handled)|9| --> (not handled)
We can see from the above mappings that canceled events come in many forms, but are all pushed to BOS as a
canceled incident. However, depending on the circumstances a second incident needs to be sent as follows:
Game was abandoned - Typically this means the game will be re-scheduled. If it is then a new
create incident will be sent with the re-scheduled date.
Game was postponed - By definition this means the game will be re-scheduled so a new
create incident will also be sent with the re-scheduled date.
Game was interrupted - Usually means there is a delay and the game will re-start at some point. From a BOS perspective no additional incident is required; BOS will simply interpret the game as taking longer to finish so the next incident it expects is a
What we really mean by 'sending to subscribers' is 'sending to the BOS system for all Witnesses subscribed to Data Proxies'.
In essence this is Data Proxies' ultimate purpose. We've already discussed the fact that there is no common format in the data sent from the DFPs, but the data sent from each Data Proxy to each BOS instance has to be in the same format. This is what we'll discuss next.
The Data Proxy provides a HTTP endpoint for monitoring purposes. Assume that the Data Proxy is deployed on localhost:8010, then the URL is
The response has a json body that has three main contents:
status: String flag either "ok" or "nok", general state of the proxy
subscribers: List of dictionaries containing information of each subscriber. Contains a status flag as well
providers: List of dictionaries containing information of each provider. Contains a status flag as well
This isalive can be called from localhost and from anywhere.