001package nl.nlighten.prometheus.wildfly;
002
003import io.prometheus.client.Collector;
004import io.prometheus.client.GaugeMetricFamily;
005
006import javax.management.MBeanServer;
007import javax.management.ObjectInstance;
008import javax.management.ObjectName;
009import java.lang.management.ManagementFactory;
010import java.util.ArrayList;
011import java.util.Arrays;
012import java.util.List;
013import java.util.Set;
014
015/**
016 * Exports wildfly product name and version.
017 * <p>
018 * Example usage:
019 * <pre>
020 * {@code
021 *   new WildflyVersionExports().register();
022 * }
023 * </pre>
024 *
025 * Example metrics being exported:
026 * <pre>
027 *   wildfly_info{name="WildFly Full",version="10.1.0.Final",} 1.0
028 * </pre>
029 */
030public class WildflyVersionExports extends Collector {
031
032    public List<MetricFamilySamples> collect() {
033        List<MetricFamilySamples> mfs = new ArrayList<>();
034        try {
035            final MBeanServer server = ManagementFactory.getPlatformMBeanServer();
036            final ObjectName filterName = new ObjectName("jboss.as:management-root=server");
037            Set<ObjectInstance> mBeans = server.queryMBeans(filterName, null);
038            if (mBeans.size() > 0 ) {
039
040                GaugeMetricFamily wildflyInfo = new GaugeMetricFamily(
041                        "wildfly_info",
042                        "Wildfly version info",
043                        Arrays.asList("name", "version"));
044
045                for (final ObjectInstance mBean : mBeans) {
046                    wildflyInfo.addMetric(Arrays.asList((String) server.getAttribute(mBean.getObjectName(), "productName"), (String) server.getAttribute(mBean.getObjectName(), "productVersion")), 1);
047                }
048                mfs.add(wildflyInfo);
049            }
050        } catch (Exception e) {
051            e.printStackTrace();
052        }
053        return mfs;
054    }
055}
056