Github user stoader commented on a diff in the pull request: https://github.com/apache/spark/pull/19775#discussion_r167359023 --- Diff: core/src/main/java/org/apache/spark/metrics/prometheus/client/exporter/TextFormatWithTimestamp.java --- @@ -0,0 +1,178 @@ +/* + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.spark.metrics.prometheus.client.exporter; + +import java.io.IOException; +import java.io.Writer; +import java.util.Enumeration; + +import io.prometheus.client.Collector; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class TextFormatWithTimestamp { + private static final Logger logger = LoggerFactory.getLogger(TextFormatWithTimestamp.class); + + /** + * Content-type for text version 0.0.4. + */ + public static final String CONTENT_TYPE_004 = "text/plain; version=0.0.4; charset=utf-8"; + + private static StringBuilder jsonMessageLogBuilder = new StringBuilder(); + + public static void write004(Writer writer, + Enumeration<Collector.MetricFamilySamples> mfs)throws IOException { + write004(writer, mfs, null); + } + + /** + * Write out the text version 0.0.4 of the given MetricFamilySamples. + */ + public static void write004(Writer writer,Enumeration<Collector.MetricFamilySamples> mfs, + String timestamp) throws IOException { + /* See http://prometheus.io/docs/instrumenting/exposition_formats/ + * for the output format specification. */ + while(mfs.hasMoreElements()) { + Collector.MetricFamilySamples metricFamilySamples = mfs.nextElement(); + + logger.debug("Metrics data"); + logger.debug(metricFamilySamples.toString()); + logger.debug("Logging metrics as a json format:"); + + + writer.write("# HELP "); + appendToJsonMessageLogBuilder("# HELP "); + writer.write(metricFamilySamples.name); + appendToJsonMessageLogBuilder(metricFamilySamples.name); + writer.write(' '); + appendToJsonMessageLogBuilder(' '); + writeEscapedHelp(writer, metricFamilySamples.help); + writer.write('\n'); + appendToJsonMessageLogBuilder('\n'); + + writer.write("# TYPE "); + appendToJsonMessageLogBuilder("# TYPE "); + writer.write(metricFamilySamples.name); + appendToJsonMessageLogBuilder(metricFamilySamples.name); + writer.write(' '); + appendToJsonMessageLogBuilder(' '); + writer.write(typeString(metricFamilySamples.type)); + appendToJsonMessageLogBuilder(typeString(metricFamilySamples.type)); + writer.write('\n'); + appendToJsonMessageLogBuilder('\n'); + + for (Collector.MetricFamilySamples.Sample sample: metricFamilySamples.samples) { + writer.write(sample.name); + appendToJsonMessageLogBuilder(sample.name); + if (sample.labelNames.size() > 0) { + writer.write('{'); + appendToJsonMessageLogBuilder('{'); + for (int i = 0; i < sample.labelNames.size(); ++i) { + writer.write(sample.labelNames.get(i)); + appendToJsonMessageLogBuilder(sample.labelNames.get(i)); + writer.write("=\""); + appendToJsonMessageLogBuilder("=\""); + writeEscapedLabelValue(writer, sample.labelValues.get(i)); + writer.write("\","); + appendToJsonMessageLogBuilder("\","); + } + writer.write('}'); + appendToJsonMessageLogBuilder('}'); + } + writer.write(' '); + appendToJsonMessageLogBuilder(' '); + writer.write(Collector.doubleToGoString(sample.value)); + appendToJsonMessageLogBuilder(Collector.doubleToGoString(sample.value)); + if(timestamp != null && !timestamp.isEmpty()) { + writer.write(" " + timestamp); + appendToJsonMessageLogBuilder(" " + timestamp); + } + writer.write('\n'); + appendToJsonMessageLogBuilder('\n'); + } + logger.debug("JSON: "+ jsonMessageLogBuilder); + } + } + + 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 '\\': + --- End diff -- Empty line removed.
--- --------------------------------------------------------------------- To unsubscribe, e-mail: reviews-unsubscr...@spark.apache.org For additional commands, e-mail: reviews-h...@spark.apache.org