IDL types do not have anything to manage the concurrency around reading and writing to their fields, so we will need a class that wraps ElectionMetrics, ElectionCandidateMetrics, and ElectionParticipantMetrics. For now this class should be a skeleton until we need to create functions to write to the underlying IDL types. To start with, it should have a member for each of the following IDL types: ElectionMetrics, ElectionCandidateMetrics, and ElectionParticipantMetrics and a mutex that will manage the concurrency around the variables in the class.
We will model our class similar to TrafficRecorder. The ReplicationMetrics class should be a decoration on the serviceContext. It should also include an inner class that inherits from ServerStatusSection, so that we can easily generate a section in serverStatus Metrics for the metrics stored in ElectionMetrics.