private static MetricObserver rateTransform(MetricObserver observer) { final long heartbeat = 2 * Config.getPollInterval(); return new CounterToRateMetricTransform(observer, heartbeat, TimeUnit.SECONDS); }
/** * {@inheritDoc} */ public void update(List<Metric> metrics) { Preconditions.checkNotNull(metrics, "metrics"); LOGGER.debug("received {} metrics", metrics.size()); final List<Metric> newMetrics = new ArrayList<>(metrics.size()); for (Metric m : metrics) { if (isCounter(m)) { final MonitorConfig rateConfig = toRateConfig(m.getConfig()); final CounterValue prev = cache.get(rateConfig); if (prev != null) { final double rate = prev.computeRate(m); newMetrics.add(new Metric(rateConfig, m.getTimestamp(), rate)); } else { CounterValue current = new CounterValue(m); cache.put(rateConfig, current); if (intervalMillis > 0L) { final double delta = m.getNumberValue().doubleValue(); final double rate = current.computeRate(intervalMillis, delta); newMetrics.add(new Metric(rateConfig, m.getTimestamp(), rate)); } } } else { newMetrics.add(m); } } LOGGER.debug("writing {} metrics to downstream observer", newMetrics.size()); observer.update(newMetrics); }
120, TimeUnit.SECONDS, manualClock); CounterToRateMetricTransform toRateMetricTransform = new CounterToRateMetricTransform(normalizationTransform, 60, 120, TimeUnit.SECONDS, manualClock); gauge.set((long) i); List<Metric> metrics = getValue(monitors, manualClock); toRateMetricTransform.update(metrics); manualClock.set(i * 60000L + 20000L); List<Metric> metrics = getValue(monitors, manualClock); toRateMetricTransform.update(metrics); List<Metric> o = observer.getObservations().get(0); assertEquals(o.size(), 3);
120, TimeUnit.SECONDS, manualClock); CounterToRateMetricTransform toRateMetricTransform = new CounterToRateMetricTransform(normalizationTransform, 60, 120, TimeUnit.SECONDS, manualClock); Metric m1 = new Metric(c1.getConfig(), manualClock.now(), c1.getValue(0)); toRateMetricTransform.update(UnmodifiableList.of(m1)); assertEquals(NormalizationTransform.HEARTBEAT_EXCEEDED.getValue(0).longValue(), 0); List<Metric> o = observer.getObservations().get(0); toRateMetricTransform.update(UnmodifiableList.of(m2)); assertEquals(NormalizationTransform.HEARTBEAT_EXCEEDED.getValue(0).longValue(), 0); toRateMetricTransform.update(UnmodifiableList.of(m3)); assertEquals(NormalizationTransform.HEARTBEAT_EXCEEDED.getValue(0).longValue(), 1);
public static void startPoller(){ scheduler.start(); final int heartbeatInterval = 1200; final File metricsDir; try { metricsDir = File.createTempFile("zuul-servo-metrics-", ""); metricsDir.delete(); metricsDir.mkdir(); } catch (IOException e) { throw new RuntimeException(e); } LOG.debug("created metrics dir " + metricsDir.getAbsolutePath()); MetricObserver transform = new CounterToRateMetricTransform( new FileMetricObserver("ZuulMetrics", metricsDir), heartbeatInterval, TimeUnit.SECONDS); PollRunnable task = new PollRunnable( new MonitorRegistryMetricPoller(), BasicMetricFilter.MATCH_ALL, transform); final int samplingInterval = 10; scheduler.addPoller(task, samplingInterval, TimeUnit.SECONDS); }
/** * {@inheritDoc} */ public void update(List<Metric> metrics) { Preconditions.checkNotNull(metrics, "metrics"); LOGGER.debug("received {} metrics", metrics.size()); final List<Metric> newMetrics = new ArrayList<>(metrics.size()); for (Metric m : metrics) { if (isCounter(m)) { final MonitorConfig rateConfig = toRateConfig(m.getConfig()); final CounterValue prev = cache.get(rateConfig); if (prev != null) { final double rate = prev.computeRate(m); newMetrics.add(new Metric(rateConfig, m.getTimestamp(), rate)); } else { CounterValue current = new CounterValue(m); cache.put(rateConfig, current); if (intervalMillis > 0L) { final double delta = m.getNumberValue().doubleValue(); final double rate = current.computeRate(intervalMillis, delta); newMetrics.add(new Metric(rateConfig, m.getTimestamp(), rate)); } } } else { newMetrics.add(m); } } LOGGER.debug("writing {} metrics to downstream observer", newMetrics.size()); observer.update(newMetrics); }
public static void startPoller(){ scheduler.start(); final int heartbeatInterval = 1200; final File metricsDir; try { metricsDir = File.createTempFile("zuul-servo-metrics-", ""); metricsDir.delete(); metricsDir.mkdir(); } catch (IOException e) { throw new RuntimeException(e); } LOG.debug("created metrics dir " + metricsDir.getAbsolutePath()); MetricObserver transform = new CounterToRateMetricTransform( new FileMetricObserver("ZuulMetrics", metricsDir), heartbeatInterval, TimeUnit.SECONDS); PollRunnable task = new PollRunnable( new MonitorRegistryMetricPoller(), BasicMetricFilter.MATCH_ALL, transform); final int samplingInterval = 10; scheduler.addPoller(task, samplingInterval, TimeUnit.SECONDS); }
@Test public void testResultingType() throws Exception { MemoryMetricObserver mmo = new MemoryMetricObserver("m", 1); MetricObserver transform = new CounterToRateMetricTransform(mmo, 120, TimeUnit.SECONDS); Map<String, String> metrics; // Make time look like the future to avoid expirations long baseTime = System.currentTimeMillis() + 100000L; // First sample transform.update(mkList(baseTime + 0, 0)); metrics = mkTypeMap(mmo.getObservations()); assertEquals(metrics.size(), 2); assertEquals(metrics.get("m3"), null); assertEquals(metrics.get("m2"), "GAUGE"); assertEquals(metrics.get("m1"), null); transform.update(mkList(baseTime + 5000, 5)); metrics = mkTypeMap(mmo.getObservations()); assertEquals(metrics.size(), 3); assertEquals(metrics.get("m3"), "RATE"); assertEquals(metrics.get("m2"), "GAUGE"); assertEquals(metrics.get("m1"), null); }
@Test public void testFirstSample() throws Exception { MemoryMetricObserver mmo = new MemoryMetricObserver("m", 1); MetricObserver transform = new CounterToRateMetricTransform(mmo, 120, 5, TimeUnit.SECONDS); Map<String, Double> metrics; // Make time look like the future to avoid expirations long baseTime = System.currentTimeMillis() + 100000L; // First sample transform.update(mkList(baseTime + 0, 10)); metrics = mkMap(mmo.getObservations()); assertEquals(metrics.size(), 3); assertEquals(metrics.get("m3"), 2.0, 0.00001); // Delta of 5 in 5 seconds transform.update(mkList(baseTime + 5000, 15)); metrics = mkMap(mmo.getObservations()); assertEquals(metrics.size(), 3); assertEquals(metrics.get("m3"), 1.0, 0.00001); } }
@Test public void testSimpleRate() throws Exception { MemoryMetricObserver mmo = new MemoryMetricObserver("m", 1); MetricObserver transform = new CounterToRateMetricTransform(mmo, 120, TimeUnit.SECONDS); Map<String, Double> metrics;
MetricObserver createCounterToRateMetricTransform( MetricObserver observer, long heartbeat, TimeUnit timeUnit) { return new CounterToRateMetricTransform(observer, heartbeat, timeUnit); }
protected MetricObserver createRateTransformObserver(final MetricObserver observer, final long pollInterval, final TimeUnit timeUnit) { return new CounterToRateMetricTransform(observer, getHeartBeatPeriodForInterval(pollInterval), timeUnit); }
public static void startPoller(){ scheduler.start(); final int heartbeatInterval = 1200; final File metricsDir; try { metricsDir = File.createTempFile("zuul-servo-metrics-", ""); metricsDir.delete(); metricsDir.mkdir(); } catch (IOException e) { throw new RuntimeException(e); } LOG.debug("created metrics dir " + metricsDir.getAbsolutePath()); MetricObserver transform = new CounterToRateMetricTransform( new FileMetricObserver("ZuulMetrics", metricsDir), heartbeatInterval, TimeUnit.SECONDS); PollRunnable task = new PollRunnable( new MonitorRegistryMetricPoller(), BasicMetricFilter.MATCH_ALL, transform); final int samplingInterval = 10; scheduler.addPoller(task, samplingInterval, TimeUnit.SECONDS); }
public static void startPoller(){ scheduler.start(); final int heartbeatInterval = 1200; final File metricsDir; try { metricsDir = File.createTempFile("zuul-servo-metrics-", ""); metricsDir.delete(); metricsDir.mkdir(); } catch (IOException e) { throw new RuntimeException(e); } LOG.debug("created metrics dir " + metricsDir.getAbsolutePath()); MetricObserver transform = new CounterToRateMetricTransform( new FileMetricObserver("ZuulMetrics", metricsDir), heartbeatInterval, TimeUnit.SECONDS); PollRunnable task = new PollRunnable( new MonitorRegistryMetricPoller(), BasicMetricFilter.MATCH_ALL, transform); final int samplingInterval = 10; scheduler.addPoller(task, samplingInterval, TimeUnit.SECONDS); }
@Override protected void initializePlatform() { if (initalized) return; try { PollScheduler scheduler = PollScheduler.getInstance(); scheduler.start(); MetricObserver fileObserver = new FileMetricObserver("stats", new File(".")); MetricObserver transform = new CounterToRateMetricTransform(fileObserver, 2, TimeUnit.MINUTES); PollRunnable task = new PollRunnable(new MonitorRegistryMetricPoller(), BasicMetricFilter.MATCH_ALL, transform); scheduler.addPoller(task, 1, TimeUnit.MINUTES); } catch (Throwable e) { // dont do anything... just eat. logger.error("Epic Plugin was not intialized: ", e); } initalized = true; }
public void init() { PollScheduler scheduler = PollScheduler.getInstance(); if (!scheduler.isStarted()) { scheduler.start(); } if (isRollingFileEnabled()) { MetricObserver fileObserver = new FileOutputMetricObserver(fileOutput, convertor, formatter); MetricObserver fileTransform = new CounterToRateMetricTransform(fileObserver, metricPoll, TimeUnit.SECONDS); PollRunnable fileTask = new PollRunnable(new MonitorRegistryMetricPoller(), BasicMetricFilter.MATCH_ALL, fileTransform); scheduler.addPoller(fileTask, metricPoll, TimeUnit.SECONDS); } }