Event History¶
Event history allows a WAMP client to retrieve a set of past events for a subscription. Retrieval is by subscription ID, and for a set number of events.
Configuration in Crossbar.io¶
Crossbar.io does not normally store PubSub events. To enable event history for a topic, you need to configure an event store as part of the Crossbar.io config.
An example for this is
{
"name": "realm1",
"roles": [
],
"store": {
"type": "memory",
"event-history": [
{
"uri": "com.example.oncounter",
"limit": 10000
}
]
}
}
The above configures a store on the realm realm1
which resides in
memory, and which stores the last 1000 events for the topic
com.example.oncounter
.
For the time being, memory
is the only valid argument for where the
store is kept, so there is no event history across restarts of
Crossbar.io. We are going to implement an LMDB database which will allow
persistence across program restarts.
For the time being, event history can only be stored for a specific topic URI. Use of pattern-based subscriptions is not supported.
Required Client Permissions¶
To be able to retrieve event history, a client needs to have two permissions:
It must be allowed to call the retrieval procedure (‘wamp.subscription.get_events’).
It must be allowed to subscribe to the subscription (as identified by the subscription ID given in the call). This requirement is necessary to prevent clients for circumeventing the subscription permissions by simply periodically retrieving events for a subscription.
For the time being, the only way to get that subscription ID locally is to actually subscribe to to the topic. (We are thinking about implementing a call to retrieve the subscription ID without subscribing, or an extra argument for the subscribe request to allow this.)
Calling to Get the Events¶
The actual call to retrieve events is
session.call('wamp.subscription.get_events', [subcriptionID, 20]).then(
function (history) {
console.log("got history for " + history.length + " events");
for (var i = 0; i < history.length; ++i) {
console.log(history[i].timestamp, history[i].publication, history[i].args[0]);
}
},
function (err) {
console.log("could not retrieve event history", err);
}
);
where the arguments are the subscription ID to retrieve events for and the number of past events to be retrieved.
The event history is returned as an array of event objects.