Some of the specific functionality is needed from the APIMeter and
APITimer.
The MetricsRegistry now return the specific objects so they can be used
in their adapted form.
Signed-off-by: Amnon Heiman <amnon@scylladb.com>
The yammer Timer object calculate rate based on a timer, which causes
periodic calls to the API.
This replaces the implementation so that a timer would get all its
values from the API.
For object registration the APITimer still inherit from Timer but
override all its functionality.
Signed-off-by: Amnon Heiman <amnon@scylladb.com>
With the move to APITimer, in many occasion a histogram will not update
itself, instead it will be updated by the APITimer.
This breaks the update values functionality so that a histogram that is
included in an APITimer will not try to update it self.
Signed-off-by: Amnon Heiman <amnon@scylladb.com>
This replaces the APIMeter implementation so it will not pull the API
regularly.
To by complient with the yammer object registration mechanism, it still
inherit from Meter, but all the functionalities are overriden.
Now all the data is taken from the API including the rate statistics.
Signed-off-by: Amnon Heiman <amnon@scylladb.com>
Sometimes it is required that a meter will not handle its own data, like
the APIMeter does.
This patch break the added functionality of APIMeter into two classes,
APISettableMeter is a Meter with a set value method and APIMeter adds
the functionality that reads from the API.
Signed-off-by: Amnon Heiman <amnon@scylladb.com>
The use of mean and variance as histogram parameter names makes more
sense.
This also make it safe to use an empty histogram that holds no samples.
Signed-off-by: Amnon Heiman <amnon@cloudius-systems.com>
This adds a Timer creation methods to the APIMetricsRegistry, the
newTimer method would create an APITimer and would pass it the url for
quering.
Signed-off-by: Amnon Heiman <amnon@cloudius-systems.com>
This is a clean up in the APIMetricsRegistry. It replaces snake case to
camel case, and perform a better formatting of the code.
Signed-off-by: Amnon Heiman <amnon@cloudius-systems.com>
The Timer object in the yammer library is used to regularly check a
histogram.
The APITimer is a Timer that uses the APIHistogram instead that in it
self calls the API to get its values.
Signed-off-by: Amnon Heiman <amnon@cloudius-systems.com>
This patch replace the Histogram data and statistic calculation from the
JMX proxy to the API.
This way the count, sum, min, max variance and square sum are calculated
always on the server.
When an update is perform, the API would return the statistic with a
sample of the last n elements as a sample.
This implementation insure that the counters are correct. The
implementation also allows to set the minimal update interval.
The implementation adds a mutable getter for each of the parameters so
they could be set to their new value.
Signed-off-by: Amnon Heiman <amnon@cloudius-systems.com>
The HistogramValue object is used by the APIClient to returns a
histogram object from the API.
It contains the values that are defined in utils.json
Signed-off-by: Amnon Heiman <amnon@cloudius-systems.com>
This change update the internal value on each time click, after this
change the rate calculation will be done on the proxy at the price of
continuesly query the server. It is yet to be determine if this is a
problem, if so, it is possible to do and store those calculation on the
server and just pull them on demend.
Signed-off-by: Amnon Heiman <amnon@cloudius-systems.com>
The MetricsRegistry in yammer used to create metrics and register them
in the JMX.
The APIMetricsRegistry extends the functionality by accepting a URL
that the API will perform to retrieve the relevant data, it also creates
the API version of each of the requested Metric (i.e. APIMeter,
APICounter or APIHistogram)
Signed-off-by: Amnon Heiman <amnon@cloudius-systems.com>
Three of the Metric in the yammer library are based on data that is
pushed to them: Counter, Histogram and Meter.
This patch modify the specific functionality by inherit the original
Meter, keeping its functionality and API, and modify the way the data is
collected.
For Counter: A call to count will be implementing by calling the API to
retreive a value.
For Meter: A call to count will be implementing by calling the API to
retreive a value, similiar to count, but the timer aspect of the Meter
remains the same.
For histogram: Histogram uses an internal sample container. To mimic the
behaviour, a call to any of the historgram get functionality will update
the sample container first. A timestamp of the last update limits the
number of updates that will be done by the histogram.
Signed-off-by: Amnon Heiman <amnon@cloudius-systems.com>