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 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); } } } }