private Bucket updateBuffer() { List<Bucket> buckets = metricsCollection.fetch(); final long toMillis = System.currentTimeMillis(); final int bucketIndex = generation++ % buffer.length; Bucket bucketToDelete = buffer[bucketIndex]; Bucket latest = new Bucket(fromMillis, toMillis); for (Bucket b : buckets) { latest.merge(b, true); } buffer[bucketIndex] = latest; this.fromMillis = toMillis; return bucketToDelete; }
/** gathers all data since last snapshot */ public Bucket getSnapshot() { final Bucket merged = new Bucket(); for (Bucket b : collection.fetch()) { merged.merge(b, true); } return merged; } /** utility method for testing */
@Override public void run(Handle h, boolean firstRun) { List<Deque<QueryRatePerSecond>> data = directory.fetch(); List<QueryRatePerSecond> chewed = merge(data); for (QueryRatePerSecond qps : chewed) { qpsStatistics.put((double) qps.howMany); } } }
@Override public Result search(Query query, Execution execution) { Result r; long when = query.getStartTime() / 1000L; Hit meta = null; directory.update(when); if (useMetaHit) { if (query.properties().getBoolean(propertyName, false)) { List<QueryRatePerSecond> l = merge(directory.fetch()); Tuple2<Integer, Double> maxAndMean = maxAndMean(l); meta = new QpsHit(maxAndMean.first, maxAndMean.second); } } r = execution.search(query); if (meta != null) { r.hits().add(meta); } return r; }