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 static String codeTSMetricKey(long timestamp, String metricName, Map<String, String> tags) { return addTimestampToMetricKey(timestamp, codeMetricKey(metricName, tags)); }
private EagleMetric constructMetric(long timestamp, String partition, double value) { Map<String, String> dimensions = new HashMap<>(); dimensions.putAll(baseMetricDimension); dimensions.put("partition", partition); String metricName = "eagle.kafka.message.consumer.lag"; String metricKey = MetricKeyCodeDecoder.codeTSMetricKey(timestamp, metricName, dimensions); EagleGaugeMetric metric = new EagleGaugeMetric(timestamp, metricKey, value); return metric; }
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 } }
GCPausedEvent event = new GCPausedEvent(map); EagleCounterMetric metric = new EagleCounterMetric(event.getTimestamp(), gcPausedTimeMetricName, event.getPausedGCTimeSec(), GCConstants.GC_PAUSE_TIME_METRIC_GRANULARITY); registerMetricIfMissing(gcPausedTimeMetricName, metric); youngHeapUsageMetricName = MetricKeyCodeDecoder.codeTSMetricKey(event.getTimestamp(), GCConstants.GC_YOUNG_MEMORY_METRIC_NAME, dimensions); EagleGaugeMetric metric2 = new EagleGaugeMetric(event.getTimestamp(), youngHeapUsageMetricName, event.getYoungUsedHeapK()); metrics.add(metric2); tenuredHeapUsageMetricName = MetricKeyCodeDecoder.codeTSMetricKey(event.getTimestamp(), GCConstants.GC_TENURED_MEMORY_METRIC_NAME, dimensions); EagleGaugeMetric metric3 = new EagleGaugeMetric(event.getTimestamp(), tenuredHeapUsageMetricName, event.getTenuredUsedHeapK()); metrics.add(metric3); totalHeapUsageMetricName = MetricKeyCodeDecoder.codeTSMetricKey(event.getTimestamp(), GCConstants.GC_TOTAL_MEMORY_METRIC_NAME, dimensions); EagleGaugeMetric metric4 = new EagleGaugeMetric(event.getTimestamp(), totalHeapUsageMetricName, event.getUsedTotalHeapK()); metrics.add(metric4); listener.onMetricFlushed(metrics); metrics.clear(); collector.collect(new Tuple2(input.get(0), input.get(1)));
@Override public void prepare(Map stormConf, TopologyContext context, OutputCollector collector) { registry = new MetricRegistry(); String host = EagleConfigHelper.getServiceHost(config); int port = EagleConfigHelper.getServicePort(config); String username = EagleConfigHelper.getServiceUser(config); String password = EagleConfigHelper.getServicePassword(config); listener = new EagleServiceReporterMetricListener(host, port, username, password); dimensions = new HashMap<>(); dimensions.put(EagleConfigConstants.SITE, config.getString("siteId")); dimensions.put(EagleConfigConstants.APPLICATION, config.getString("appId")); gcPausedTimeMetricName = MetricKeyCodeDecoder.codeMetricKey(GCConstants.GC_PAUSE_TIME_METRIC_NAME, dimensions); this.collector = collector; }
public String generateMetricKey(String user) { Map<String, String> dimensions = new HashMap<>(); dimensions.putAll(baseMetricDimension); dimensions.put("user", user); String metricName = "eagle.kafka.message.count"; String encodedMetricName = MetricKeyCodeDecoder.codeMetricKey(metricName, dimensions); return encodedMetricName; }
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 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 registerMetricIfMissing(String metricName, EagleMetric metric) { if (registry.getMetrics().get(metricName) == null) { metric.registerListener(listener); registry.register(metricName, metric); } } @Override
public static EagleMetricKey decodeTSMetricKey(String name) { Integer index = name.indexOf(SEPERATOR); EagleMetricKey metricKey = decodeMetricKey(name.substring(index + 1)); metricKey.timestamp = Long.valueOf(name.substring(0, index)); return metricKey; } }
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 init() { registry = new MetricRegistry(); String host = EagleConfigHelper.getServiceHost(config); int port = EagleConfigHelper.getServicePort(config); String username = EagleConfigHelper.getServiceUser(config); String password = EagleConfigHelper.getServicePassword(config); listener = new EagleServiceReporterMetricListener(host, port, username, password); dimensions = new HashMap<>(); dimensions.put(EagleConfigConstants.SITE, EagleConfigHelper.getSite(config)); dimensions.put(EagleConfigConstants.APPLICATION, EagleConfigHelper.getApplication(config)); gcPausedTimeMetricName = MetricKeyCodeDecoder.codeMetricKey(GCConstants.GC_PAUSE_TIME_METRIC_NAME, dimensions); }
public static String codeTSMetricKey(long timestamp, String metricName, Map<String, String> tags) { return addTimestampToMetricKey(timestamp, codeMetricKey(metricName, tags)); }
private EagleMetric constructMetric(long timestamp, String partition, double value) { Map<String, String> dimensions = new HashMap<>(); dimensions.putAll(baseMetricDimension); dimensions.put("partition", partition); String metricName = "eagle.kafka.message.consumer.lag"; String metricKey = MetricKeyCodeDecoder.codeTSMetricKey(timestamp, metricName, dimensions); EagleGaugeMetric metric = new EagleGaugeMetric(timestamp, metricKey, value); return metric; }
public String generateMetricKey(String user) { Map<String, String> dimensions = new HashMap<>(); dimensions.putAll(baseMetricDimension); dimensions.put("user", user); String metricName = "eagle.kafka.message.count"; String encodedMetricName = MetricKeyCodeDecoder.codeMetricKey(metricName, dimensions); return encodedMetricName; }
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 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 registerMetricIfMissing(String metricName, EagleMetric metric) { if (registry.getMetrics().get(metricName) == null) { metric.registerListener(listener); registry.register(metricName, metric); } }
public static EagleMetricKey decodeTSMetricKey(String name) { Integer index = name.indexOf(SEPERATOR); EagleMetricKey metricKey = decodeMetricKey(name.substring(index + 1)); metricKey.timestamp = Long.valueOf(name.substring(0, index)); return metricKey; } }