111 lines
3.4 KiB
Java
111 lines
3.4 KiB
Java
package net.geedge.util;
|
|
|
|
import java.io.IOException;
|
|
import java.io.Writer;
|
|
import java.util.List;
|
|
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
import io.prometheus.client.Collector;
|
|
import io.prometheus.client.Collector.MetricFamilySamples;
|
|
|
|
public class TextFormatUtils {
|
|
|
|
private static final Logger logger = LoggerFactory.getLogger(TextFormatUtils.class);
|
|
|
|
public static void write004(Writer writer, List<MetricFamilySamples> mfs) {
|
|
try {
|
|
String enter = "\n";
|
|
for(MetricFamilySamples mfSample:mfs) {
|
|
Collector.MetricFamilySamples metricFamilySamples = mfSample;
|
|
writer.write("# HELP ");
|
|
writer.write(metricFamilySamples.name);
|
|
writer.write(' ');
|
|
writeEscapedHelp(writer, metricFamilySamples.help);
|
|
writer.write(enter);
|
|
|
|
writer.write("# TYPE ");
|
|
writer.write(metricFamilySamples.name);
|
|
writer.write(' ');
|
|
writer.write(typeString(metricFamilySamples.type));
|
|
writer.write(enter);
|
|
|
|
for (Collector.MetricFamilySamples.Sample sample: metricFamilySamples.samples) {
|
|
writer.write(sample.name);
|
|
if (sample.labelNames.size() > 0) {
|
|
writer.write('{');
|
|
for (int i = 0; i < sample.labelNames.size(); ++i) {
|
|
writer.write(sample.labelNames.get(i));
|
|
writer.write("=\"");
|
|
writeEscapedLabelValue(writer, sample.labelValues.get(i));
|
|
writer.write("\",");
|
|
}
|
|
writer.write('}');
|
|
}
|
|
writer.write(' ');
|
|
writer.write(Collector.doubleToGoString(sample.value));
|
|
if (sample.timestampMs != null){
|
|
writer.write(' ');
|
|
writer.write(sample.timestampMs.toString());
|
|
}
|
|
writer.write(enter);
|
|
}
|
|
}
|
|
}catch (Exception e) {
|
|
logger.error(e.getMessage());
|
|
}
|
|
}
|
|
|
|
private static void writeEscapedHelp(Writer writer, String s) throws IOException {
|
|
for (int i = 0; i < s.length(); i++) {
|
|
char c = s.charAt(i);
|
|
switch (c) {
|
|
case '\\':
|
|
writer.append("\\\\");
|
|
break;
|
|
case '\n':
|
|
writer.append("\\n");
|
|
break;
|
|
default:
|
|
writer.append(c);
|
|
}
|
|
}
|
|
}
|
|
|
|
private static String typeString(Collector.Type t) {
|
|
switch (t) {
|
|
case GAUGE:
|
|
return "gauge";
|
|
case COUNTER:
|
|
return "counter";
|
|
case SUMMARY:
|
|
return "summary";
|
|
case HISTOGRAM:
|
|
return "histogram";
|
|
default:
|
|
return "untyped";
|
|
}
|
|
}
|
|
|
|
private static void writeEscapedLabelValue(Writer writer, String s) throws IOException {
|
|
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);
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|