@Override public void run() { while (!Thread.currentThread().isInterrupted()) { aggregateMetrics.addAndGet(p.getMean() + p.getPercentile(10) + p.getPercentile(50) + p.getPercentile(90)); //System.out.println("AGGREGATE : " + p.getPercentile(10) + " : " + p.getPercentile(50) + " : " + p.getPercentile(90)); } } });
@Test public void testSampleDataOverTime2() { System.out.println("\n\n***************************** testSampleDataOverTime2 \n"); MockedTime time = new MockedTime(); int previousTime = 0; HystrixRollingPercentile p = new HystrixRollingPercentile(time, timeInMilliseconds, numberOfBuckets, bucketDataLength, enabled); for (int i = 0; i < SampleDataHolder2.data.length; i++) { int timeInMillisecondsSinceStart = SampleDataHolder2.data[i][0]; int latency = SampleDataHolder2.data[i][1]; time.increment(timeInMillisecondsSinceStart - previousTime); previousTime = timeInMillisecondsSinceStart; p.addValue(latency); } System.out.println("0.01: " + p.getPercentile(0.01)); System.out.println("Median: " + p.getPercentile(50)); System.out.println("90th: " + p.getPercentile(90)); System.out.println("99th: " + p.getPercentile(99)); System.out.println("99.5th: " + p.getPercentile(99.5)); System.out.println("99.99: " + p.getPercentile(99.99)); if (p.getPercentile(50) > 90 || p.getPercentile(50) < 50) { fail("We expect around 60-70 but got: " + p.getPercentile(50)); } if (p.getPercentile(99) < 400) { fail("We expect to see some high values over 400 but got: " + p.getPercentile(99)); } }
System.out.println("0.01: " + p.getPercentile(0.01)); System.out.println("Median: " + p.getPercentile(50)); System.out.println("90th: " + p.getPercentile(90)); System.out.println("99th: " + p.getPercentile(99)); System.out.println("99.5th: " + p.getPercentile(99.5)); System.out.println("99.99: " + p.getPercentile(99.99)); System.out.println("Median: " + p.getPercentile(50)); System.out.println("Median: " + p.getPercentile(50)); System.out.println("Median: " + p.getPercentile(50)); if (p.getPercentile(50) > 5) { fail("We expect around 2 but got: " + p.getPercentile(50)); if (p.getPercentile(99.5) < 20) { fail("We expect to see some high values over 20 but got: " + p.getPercentile(99.5));
aggregateMetrics.addAndGet(p.getMean() + p.getPercentile(10) + p.getPercentile(50) + p.getPercentile(90)); System.out.println(p.getMean() + " : " + p.getPercentile(50) + " : " + p.getPercentile(75) + " : " + p.getPercentile(90) + " : " + p.getPercentile(95) + " : " + p.getPercentile(99));
assertEquals(0, p.getPercentile(50)); assertEquals(1000, p.getPercentile(50)); assertEquals(1000, p.getPercentile(50)); assertEquals(ps.getPercentile(0.15), p.getPercentile(0.15)); assertEquals(ps.getPercentile(0.50), p.getPercentile(0.50)); assertEquals(ps.getPercentile(0.90), p.getPercentile(0.90)); assertEquals(ps.getPercentile(0.995), p.getPercentile(0.995)); System.out.println("100th: " + ps.getPercentile(100) + " " + p.getPercentile(100)); System.out.println("99.5th: " + ps.getPercentile(99.5) + " " + p.getPercentile(99.5)); System.out.println("99th: " + ps.getPercentile(99) + " " + p.getPercentile(99)); System.out.println("90th: " + ps.getPercentile(90) + " " + p.getPercentile(90)); System.out.println("50th: " + ps.getPercentile(50) + " " + p.getPercentile(50)); System.out.println("10th: " + ps.getPercentile(10) + " " + p.getPercentile(10));
/** * This code should work without throwing exceptions but the data returned will all be -1 since the rolling percentile is disabled. */ @Test public void testDoesNothingWhenDisabled() { MockedTime time = new MockedTime(); int previousTime = 0; HystrixRollingPercentile p = new HystrixRollingPercentile(time, timeInMilliseconds, numberOfBuckets, bucketDataLength, HystrixProperty.Factory.asProperty(false)); for (int i = 0; i < SampleDataHolder2.data.length; i++) { int timeInMillisecondsSinceStart = SampleDataHolder2.data[i][0]; int latency = SampleDataHolder2.data[i][1]; time.increment(timeInMillisecondsSinceStart - previousTime); previousTime = timeInMillisecondsSinceStart; p.addValue(latency); } assertEquals(-1, p.getPercentile(50)); assertEquals(-1, p.getPercentile(75)); assertEquals(-1, p.getMean()); }
@Test public void testValueIsZeroAfterRollingWindowPassesAndNoTraffic() { MockedTime time = new MockedTime(); HystrixRollingPercentile p = new HystrixRollingPercentile(time, timeInMilliseconds, numberOfBuckets, bucketDataLength, enabled); p.addValue(1000); p.addValue(1000); p.addValue(1000); p.addValue(2000); p.addValue(4000); assertEquals(1, p.buckets.size()); // no bucket turnover yet so percentile not yet generated assertEquals(0, p.getPercentile(50)); time.increment(6000); // still only 1 bucket until we touch it again assertEquals(1, p.buckets.size()); // a bucket has been created so we have a new percentile assertEquals(1500, p.getPercentile(50)); // let 1 minute pass time.increment(60000); // no data in a minute should mean all buckets are empty (or reset) so we should not have any percentiles assertEquals(0, p.getPercentile(50)); }