All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.alogic.metrics.stream.PrometheusMetricsCollector Maven / Gradle / Ivy

There is a newer version: 1.6.17
Show newest version
package com.alogic.metrics.stream;

import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang3.StringUtils;

import com.alogic.metrics.Dimensions;
import com.alogic.metrics.Fragment;
import com.alogic.metrics.Measures;
import com.alogic.metrics.Value;
import com.anysoft.util.Pair;

/**
 * Prometheus指标输出
 * 
 * @author duanyy
 * @since 1.6.12.29 [20190409] 
* * @version 1.6.12.30 [20190425 duanyy]
* - 指标输出增加转义
*/ public class PrometheusMetricsCollector implements MetricsCollector{ protected StringBuffer buffer = null; protected String staticLables = "a=a"; public PrometheusMetricsCollector(StringBuffer buf,String staticLabels){ this.buffer = buf; this.staticLables = StringUtils.isNotEmpty(staticLabels)?staticLabels:this.staticLables; } @Override public void metricsIncr(Fragment f) { Dimensions dims = f.getDimensions(); StringBuffer labels = new StringBuffer(); labels.append("{").append(staticLables); List> result = new ArrayList>(); dims.listEntries(result); if (!result.isEmpty()){ for (Pair pair:result){ labels.append(",").append(pair.key()).append("=\""); writeEscapedLabelValue(labels,pair.value()); labels.append("\""); } } labels.append("}"); Measures measures = f.getMeasures(); Value[] values = measures.values(); for (Value value:values){ String metricsName = getMetricsName(f.id(),value.key()); buffer.append(metricsName); buffer.append(labels); buffer.append(" "); switch (value.type()){ case D: buffer.append(value.asDouble(0.0d)); break; case L: buffer.append(value.asLong(0)); break; default: buffer.append(value.asString("NaN")); } buffer.append("\n"); } } public String getMetricsName(String id,String measureId){ String name = String.format("alogic_%s_%s", id,measureId); return name.replace(".", "_"); } private static void writeEscapedLabelValue(StringBuffer writer, String s) { for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); switch (c) { case '\\': writer.append("\\\\"); break; case '\"': writer.append("\\\""); break; case '\n': writer.append("\\n"); break; default: writer.append(c); } } } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy