Get status from the cage about dataservices

https://blueprints.launchpad.net/congress/+spec/dse-dataservices-status

Get metrics about the data services and have it available through the api. This information will include things so that the policy engine will know the status of the data services and when a data service is not able to do its job correctly.

Problem description

Currently each of the datasources implemented as nodes in the DSE have 2 fields for status: the time the datasource last refreshed its data and the last error that was generated when it tried to refresh its data. But there are additional metrics that would be nice to have as part of the status of a datasource/DSE node, e.g. outstanding messages, message rate, subscribers, subscriptions.

Proposed change

This change will add a status() method to each DSE node that returns a dictionary of useful information about that node. The node will also compute those metrics and will be configurable so that metrics that are expensive to compute can be turned off.

Alternatives

The status() information could be implemented on top of DSE instead of directly within DSE. But doing so would break the abstraction that DSE provides: a message bus that takes care of message queues, message delivery, queueing times, etc.

Policy

N/A

Policy Actions

N/A

Data Sources

N/A

Data model impact

N/A

REST API impact

None since the API already exposes a ‘status’ query for each datasource. But the implementation of that API will change to incorporate the additional status information provided by DSE.

Security impact

None

Notifications impact

None

Other end user impact

None

Performance impact

It will be possible to turn off high-cost status computation; thus, people can decide whether each status item is worth the cost of computing it.

Other deployer impact

None

Developer impact

None

Implementation

Assignee(s)

Primary assignee:

<launchpad-id or None>

Other contributors:

<launchpad-id or None>

Work items

  • Add implementations for metrics. The decision as to whether the metric is continually computed or computed on demand will be made on a metric-by-metric basis.

  • Add status() method to DeepSix class and return a dictionary of metrics.

Dependencies

None

Testing

Unit tests will suffice: simulate activity in the DSE and check that the status metrics are as expected. Ideally would also simulate metric computation under load.

Documentation impact

None

References

None