private void updateCounter(String name, Map<String, String> dimensions, double value) { long current = System.currentTimeMillis(); String metricName = MetricKeyCodeDecoder.codeMetricKey(name, dimensions); if (registry.getMetrics().get(metricName) == null) { EagleCounterMetric metric = new EagleCounterMetric(current, metricName, value, MERITE_GRANULARITY); metric.registerListener(listener); registry.register(metricName, metric); } else { EagleCounterMetric metric = (EagleCounterMetric) registry.getMetrics().get(metricName); metric.update(value, current); // TODO: need remove unused metric from registry } }
public boolean update(double d, long currentUserTimeClock) { Boolean readyToFlushed = checkIfNeedFlush(currentUserTimeClock); if (!readyToFlushed) { if (currentUserTimeClock < latestUserTimeClock) { LOG.warn("Something must be wrong, event should come in order of userTimeClock"); } value.addAndGet(d); } else { flush(latestUserTimeClock); value.getAndSet(1); latestUserTimeClock = currentUserTimeClock; } return readyToFlushed; } }
public void flush(long latestUserTimeClock) { for (EagleMetricListener listener : metricListeners) { EagleCounterMetric newEagleMetric = new EagleCounterMetric(this); newEagleMetric.name = MetricKeyCodeDecoder.addTimestampToMetricKey(trim(latestUserTimeClock), newEagleMetric.name); listener.onMetricFlushed(Arrays.asList((EagleMetric) newEagleMetric)); } }
@Override public void flatMap(List<Object> input, Collector<Tuple1<String>> collector) { try { String user = (String) input.get(0); Long timestamp = (Long) input.get(1); String metricKey = generateMetricKey(user); if (registry.getMetrics().get(metricKey) == null) { EagleCounterMetric metric = new EagleCounterMetric(timestamp, metricKey, 1.0, granularity); metric.registerListener(listener); registry.register(metricKey, metric); } else { EagleMetric metric = (EagleMetric)registry.getMetrics().get(metricKey); metric.update(1, timestamp); //TODO: if we need to remove metric from registry } } catch (Exception ex) { LOG.error("Got an exception, ex: ", ex); } } }
GCPausedEvent event = new GCPausedEvent(map); EagleCounterMetric metric = new EagleCounterMetric(event.getTimestamp(), gcPausedTimeMetricName, event.getPausedGCTimeSec(), GCConstants.GC_PAUSE_TIME_METRIC_GRANULARITY); registerMetricIfMissing(gcPausedTimeMetricName, metric);
public static GenericMetricEntity convert(String name, Metric metric) { //TODO: add other type metric support EagleMetricKey metricName = MetricKeyCodeDecoder.decodeTSMetricKey(name); if (metric instanceof EagleCounterMetric) { EagleCounterMetric counter = (EagleCounterMetric) metric; GenericMetricEntity entity = new GenericMetricEntity(); entity.setPrefix(metricName.metricName); entity.setValue(new double[] {counter.getValue()}); entity.setTags(metricName.tags); entity.setTimestamp(metricName.timestamp); return entity; } else if (metric instanceof EagleGaugeMetric) { EagleGaugeMetric gauge = (EagleGaugeMetric) metric; GenericMetricEntity entity = new GenericMetricEntity(); entity.setPrefix(metricName.metricName); entity.setValue(new double[] {gauge.getValue()}); entity.setTags(metricName.tags); entity.setTimestamp(metricName.timestamp); return entity; } throw new RuntimeException("Not support this metric type for now!"); } }
@Override public void execute(Tuple input) { try { String user = input.getString(0); Long timestamp = input.getLong(1); String metricKey = generateMetricKey(user); if (registry.getMetrics().get(metricKey) == null) { EagleCounterMetric metric = new EagleCounterMetric(timestamp, metricKey, 1.0, granularity); metric.registerListener(listener); registry.register(metricKey, metric); } else { EagleMetric metric = (EagleMetric)registry.getMetrics().get(metricKey); metric.update(1, timestamp); //TODO: if we need to remove metric from registry } } catch (Exception ex) { LOG.error("Got an exception, ex: ", ex); }finally { collector.ack(input); } } }
GCPausedEvent event = new GCPausedEvent(map); EagleCounterMetric metric = new EagleCounterMetric(event.getTimestamp(), gcPausedTimeMetricName, event.getPausedGCTimeSec(), GCConstants.GC_PAUSE_TIME_METRIC_GRANULARITY); registerMetricIfMissing(gcPausedTimeMetricName, metric);
public static GenericMetricEntity convert(String name, Metric metric) { //TODO: add other type metric support EagleMetricKey metricName = MetricKeyCodeDecoder.decodeTSMetricKey(name); if (metric instanceof EagleCounterMetric) { EagleCounterMetric counter = (EagleCounterMetric)metric; GenericMetricEntity entity = new GenericMetricEntity(); entity.setPrefix(metricName.metricName); entity.setValue(new double[]{counter.getValue()}); entity.setTags(metricName.tags); entity.setTimestamp(metricName.timestamp); return entity; } else if (metric instanceof EagleGaugeMetric) { EagleGaugeMetric gauge = (EagleGaugeMetric)metric; GenericMetricEntity entity = new GenericMetricEntity(); entity.setPrefix(metricName.metricName); entity.setValue(new double[]{gauge.getValue()}); entity.setTags(metricName.tags); entity.setTimestamp(metricName.timestamp); return entity; } throw new RuntimeException("Not support this metric type for now!"); } }
public void flush(long latestUserTimeClock) { for (EagleMetricListener listener : metricListeners) { EagleCounterMetric newEagleMetric = new EagleCounterMetric(this); newEagleMetric.name = MetricKeyCodeDecoder.addTimestampToMetricKey(trim(latestUserTimeClock), newEagleMetric.name); listener.onMetricFlushed(Arrays.asList((EagleMetric)newEagleMetric)); } }
public boolean update(double d, long currentUserTimeClock) { Boolean readyToFlushed = checkIfNeedFlush(currentUserTimeClock); if (!readyToFlushed) { if (currentUserTimeClock < latestUserTimeClock) { LOG.warn("Something must be wrong, event should come in order of userTimeClock"); } value.addAndGet(d); } else { flush(latestUserTimeClock); value.getAndSet(1); latestUserTimeClock = currentUserTimeClock; } return readyToFlushed; } }