001package io.prometheus.cloudwatch;
002
003import io.prometheus.client.Collector;
004import java.io.IOException;
005import java.util.ArrayList;
006import java.util.List;
007import java.util.Properties;
008import java.util.logging.Level;
009import java.util.logging.Logger;
010
011public class BuildInfoCollector extends Collector {
012  private static final Logger LOGGER = Logger.getLogger(CloudWatchCollector.class.getName());
013
014  public List<MetricFamilySamples> collect() {
015    List<MetricFamilySamples> mfs = new ArrayList<>();
016    List<MetricFamilySamples.Sample> samples;
017    List<String> labelNames = new ArrayList<>();
018    List<String> labelValues = new ArrayList<>();
019
020    String buildVersion = "";
021    String releaseDate = "";
022    try {
023      final Properties properties = new Properties();
024      properties.load(
025          CloudWatchCollector.class.getClassLoader().getResourceAsStream(".properties"));
026      buildVersion = properties.getProperty("BuildVersion");
027      releaseDate = properties.getProperty("ReleaseDate");
028
029    } catch (IOException e) {
030      buildVersion = "unknown";
031      releaseDate = "unknown";
032      LOGGER.log(Level.WARNING, "CloudWatch build info scrape failed", e);
033    }
034
035    labelNames.add("build_version");
036    labelValues.add(buildVersion);
037    labelNames.add("release_date");
038    labelValues.add(releaseDate);
039
040    samples = new ArrayList<>();
041    samples.add(
042        new MetricFamilySamples.Sample(
043            "cloudwatch_exporter_build_info", labelNames, labelValues, 1));
044    mfs.add(
045        new MetricFamilySamples(
046            "cloudwatch_exporter_build_info",
047            Type.GAUGE,
048            "Non-zero if build info scrape failed.",
049            samples));
050
051    return mfs;
052  }
053}