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