[Hawkular-commits] [hawkular/hawkular-metrics] fba9ff: Implementation of statistics computation based on ...
jsanda
jsanda at redhat.com
Mon Aug 10 15:17:24 EDT 2015
Branch: refs/heads/master
Home: https://github.com/hawkular/hawkular-metrics
Commit: fba9fff2ff38eb79697410fbcf966f9ac2899d3c
https://github.com/hawkular/hawkular-metrics/commit/fba9fff2ff38eb79697410fbcf966f9ac2899d3c
Author: Thomas Segismont <tsegismo at redhat.com>
Date: 2015-08-07 (Fri, 07 Aug 2015)
Changed paths:
M api/metrics-api-jaxrs/src/main/java/org/hawkular/metrics/api/jaxrs/handler/AvailabilityHandler.java
M api/metrics-api-jaxrs/src/main/java/org/hawkular/metrics/api/jaxrs/handler/GaugeHandler.java
M api/metrics-api-jaxrs/src/main/java/org/hawkular/metrics/api/jaxrs/util/ApiUtils.java
R core/metrics-core-api/src/main/java/org/hawkular/metrics/core/api/AvailabilityBucketDataPoint.java
A core/metrics-core-api/src/main/java/org/hawkular/metrics/core/api/AvailabilityBucketPoint.java
A core/metrics-core-api/src/main/java/org/hawkular/metrics/core/api/BucketPoint.java
R core/metrics-core-api/src/main/java/org/hawkular/metrics/core/api/BucketedOutput.java
M core/metrics-core-api/src/main/java/org/hawkular/metrics/core/api/Buckets.java
R core/metrics-core-api/src/main/java/org/hawkular/metrics/core/api/GaugeBucketDataPoint.java
A core/metrics-core-api/src/main/java/org/hawkular/metrics/core/api/GaugeBucketPoint.java
M core/metrics-core-api/src/main/java/org/hawkular/metrics/core/api/MetricsService.java
R core/metrics-core-impl/src/main/java/org/hawkular/metrics/core/impl/AvailabilityBucketedOutputMapper.java
A core/metrics-core-impl/src/main/java/org/hawkular/metrics/core/impl/AvailabilityDataPointCollector.java
R core/metrics-core-impl/src/main/java/org/hawkular/metrics/core/impl/BucketedOutputMapper.java
R core/metrics-core-impl/src/main/java/org/hawkular/metrics/core/impl/GaugeBucketedOutputMapper.java
A core/metrics-core-impl/src/main/java/org/hawkular/metrics/core/impl/GaugeDataPointCollector.java
M core/metrics-core-impl/src/main/java/org/hawkular/metrics/core/impl/MetricsServiceImpl.java
R core/metrics-core-impl/src/test/java/org/hawkular/metrics/core/impl/AvailabilityBucketDataPointMatcher.java
A core/metrics-core-impl/src/test/java/org/hawkular/metrics/core/impl/AvailabilityBucketPointMatcher.java
R core/metrics-core-impl/src/test/java/org/hawkular/metrics/core/impl/AvailabilityBucketedOutputMapperTest.java
A core/metrics-core-impl/src/test/java/org/hawkular/metrics/core/impl/AvailabilityDataPointCollectorTest.java
M rest-tests/src/test/groovy/org/hawkular/metrics/rest/GaugeMetricStatisticsITest.groovy
M rest-tests/src/test/groovy/org/hawkular/metrics/rest/RESTTest.groovy
Log Message:
-----------
Implementation of statistics computation based on RxJava
This is a combination of 8 commits.
The first commit's message is:
Introduce BucketedOutputOperator and children
This is the 2nd commit message:
Update MetricsServiceImpl to use BucketedOutputOperator
This is the 3rd commit message:
Gauges buckets computation without custom operator
This is to show what the process could look like, code for avail has not
been updated, and code for counters not implemented.
In this attempt, no custom operator is used. Instead, N(=number of
buckets) requests for data are sent in parallel. Then the resulting
observables are flat mapped to form an observable of bucket points.
The bucket point observable emits just one value. The value is created
by processing data points as they arrive, instead of buffering
all the points for the bucket in an array.
This has a huge implication on stats computation. Some stats algos are
"storeless", which means you can get the exact result without buffering
the data. Examples are min, max, avg. But some are not, like percentile.
As a consequence, for median and 95th percentile, we need to use
an approximative algorithm, provided by
org.apache.commons.math3.stat.descriptive.rank.PSquarePercentile.
See http://www.cse.wustl.edu/~jain/papers/psqr.htm for a description of
the algorithm.
On the upside, this algorithm allows to compute stats when the number of
data points in the bucket is VERY large, with low memory consumption.
On the downside, the result might look a bit inaccurate when there VERY
few points in the buckets. It's also sensible to order of value
submission.
Note that the observable of bucket points will often be incorrectly
ordered, as there's no guarantee in the order the responses will be processed.
Side work:
- log throwable at TRACE level for 500 responses
- overloaded assertDoubleEquals so that caller can pass a failure
message
This is the 4th commit message:
Refactor to use #collect for readability
This is the 5th commit message:
Refactor to use as single request to C*
Sending N requests to C* might be bad wrt performance, especially if N(=number of buckets) is high
This implementation uses #groupBy. Not sure how to make that work with #window
This is the 6th commit message:
Remove unused code
This is the 7th commit message:
Apply logic to avail metrics
This is the 8th commit message:
Final step, refactoring for better readability
Commit: c0299235d137ee950971e1feeb055ff2cc5a8968
https://github.com/hawkular/hawkular-metrics/commit/c0299235d137ee950971e1feeb055ff2cc5a8968
Author: jsanda <jsanda at redhat.com>
Date: 2015-08-10 (Mon, 10 Aug 2015)
Changed paths:
M api/metrics-api-jaxrs/src/main/java/org/hawkular/metrics/api/jaxrs/handler/AvailabilityHandler.java
M api/metrics-api-jaxrs/src/main/java/org/hawkular/metrics/api/jaxrs/handler/GaugeHandler.java
M api/metrics-api-jaxrs/src/main/java/org/hawkular/metrics/api/jaxrs/util/ApiUtils.java
R core/metrics-core-api/src/main/java/org/hawkular/metrics/core/api/AvailabilityBucketDataPoint.java
A core/metrics-core-api/src/main/java/org/hawkular/metrics/core/api/AvailabilityBucketPoint.java
A core/metrics-core-api/src/main/java/org/hawkular/metrics/core/api/BucketPoint.java
R core/metrics-core-api/src/main/java/org/hawkular/metrics/core/api/BucketedOutput.java
M core/metrics-core-api/src/main/java/org/hawkular/metrics/core/api/Buckets.java
R core/metrics-core-api/src/main/java/org/hawkular/metrics/core/api/GaugeBucketDataPoint.java
A core/metrics-core-api/src/main/java/org/hawkular/metrics/core/api/GaugeBucketPoint.java
M core/metrics-core-api/src/main/java/org/hawkular/metrics/core/api/MetricsService.java
R core/metrics-core-impl/src/main/java/org/hawkular/metrics/core/impl/AvailabilityBucketedOutputMapper.java
A core/metrics-core-impl/src/main/java/org/hawkular/metrics/core/impl/AvailabilityDataPointCollector.java
R core/metrics-core-impl/src/main/java/org/hawkular/metrics/core/impl/BucketedOutputMapper.java
R core/metrics-core-impl/src/main/java/org/hawkular/metrics/core/impl/GaugeBucketedOutputMapper.java
A core/metrics-core-impl/src/main/java/org/hawkular/metrics/core/impl/GaugeDataPointCollector.java
M core/metrics-core-impl/src/main/java/org/hawkular/metrics/core/impl/MetricsServiceImpl.java
R core/metrics-core-impl/src/test/java/org/hawkular/metrics/core/impl/AvailabilityBucketDataPointMatcher.java
A core/metrics-core-impl/src/test/java/org/hawkular/metrics/core/impl/AvailabilityBucketPointMatcher.java
R core/metrics-core-impl/src/test/java/org/hawkular/metrics/core/impl/AvailabilityBucketedOutputMapperTest.java
A core/metrics-core-impl/src/test/java/org/hawkular/metrics/core/impl/AvailabilityDataPointCollectorTest.java
M rest-tests/src/test/groovy/org/hawkular/metrics/rest/GaugeMetricStatisticsITest.groovy
M rest-tests/src/test/groovy/org/hawkular/metrics/rest/RESTTest.groovy
Log Message:
-----------
Merge pull request #302 from tsegismont/jira/HWKMETRICS-206
HWKMETRICS-206 Implementation of statistics computation based on RxJava
Compare: https://github.com/hawkular/hawkular-metrics/compare/38ff28cd565b...c0299235d137
More information about the hawkular-commits
mailing list