diff --git a/bundles/org.openhab.core.io.monitor/bnd.bnd b/bundles/org.openhab.core.io.monitor/bnd.bnd index e5016fefe..185b8d95c 100644 --- a/bundles/org.openhab.core.io.monitor/bnd.bnd +++ b/bundles/org.openhab.core.io.monitor/bnd.bnd @@ -7,6 +7,8 @@ Import-Package: \ org.osgi.service.*,\ org.slf4j.*,\ com.google.gson.*;version="[2.8,3)" -Export-Package: io.micrometer.core.*;-split-package:=merge-first,\ +Export-Package: \ + com.codahale.metrics.*;-split-package:=merge-first,\ + io.micrometer.core.*;-split-package:=merge-first,\ org.HdrHistogram.*;-split-package:=merge-first,\ org.LatencyUtils.*;-split-package:=merge-first diff --git a/bundles/org.openhab.core.io.monitor/pom.xml b/bundles/org.openhab.core.io.monitor/pom.xml index 21961b4ab..456ac2d30 100644 --- a/bundles/org.openhab.core.io.monitor/pom.xml +++ b/bundles/org.openhab.core.io.monitor/pom.xml @@ -25,6 +25,12 @@ org.openhab.core.automation ${project.version} + + io.dropwizard.metrics + metrics-core + 4.0.7 + compile + io.micrometer micrometer-core diff --git a/bundles/org.openhab.core.io.monitor/src/main/java/org/openhab/core/io/monitor/internal/metrics/BundleStateMetric.java b/bundles/org.openhab.core.io.monitor/src/main/java/org/openhab/core/io/monitor/internal/metrics/BundleStateMetric.java index 7028cf8e2..6245a23a6 100644 --- a/bundles/org.openhab.core.io.monitor/src/main/java/org/openhab/core/io/monitor/internal/metrics/BundleStateMetric.java +++ b/bundles/org.openhab.core.io.monitor/src/main/java/org/openhab/core/io/monitor/internal/metrics/BundleStateMetric.java @@ -42,8 +42,7 @@ public class BundleStateMetric implements OpenhabCoreMeterBinder, BundleListener private static final String BUNDLE_TAG_NAME = "bundle"; private final Meter.Id commonMeterId; private final Map registeredMeters = new HashMap<>(); - @Nullable - private MeterRegistry meterRegistry = null; + private @Nullable MeterRegistry meterRegistry; private final BundleContext bundleContext; public BundleStateMetric(BundleContext bundleContext, Collection tags) { @@ -87,12 +86,13 @@ public class BundleStateMetric implements OpenhabCoreMeterBinder, BundleListener @Override public void unbind() { + MeterRegistry meterRegistry = this.meterRegistry; if (meterRegistry == null) { return; } bundleContext.removeBundleListener(this); registeredMeters.keySet().forEach(meterRegistry::remove); registeredMeters.clear(); - meterRegistry = null; + this.meterRegistry = null; } } diff --git a/bundles/org.openhab.core.io.monitor/src/main/java/org/openhab/core/io/monitor/internal/metrics/EventCountMetric.java b/bundles/org.openhab.core.io.monitor/src/main/java/org/openhab/core/io/monitor/internal/metrics/EventCountMetric.java index 3df6644a3..fc12163b8 100644 --- a/bundles/org.openhab.core.io.monitor/src/main/java/org/openhab/core/io/monitor/internal/metrics/EventCountMetric.java +++ b/bundles/org.openhab.core.io.monitor/src/main/java/org/openhab/core/io/monitor/internal/metrics/EventCountMetric.java @@ -45,8 +45,7 @@ public class EventCountMetric implements OpenhabCoreMeterBinder, EventSubscriber private final Logger logger = LoggerFactory.getLogger(EventCountMetric.class); private static final Tag CORE_EVENT_COUNT_METRIC_TAG = Tag.of("metric", "openhab.core.metric.eventcount"); private static final String TOPIC_TAG_NAME = "topic"; - @Nullable - private MeterRegistry meterRegistry; + private @Nullable MeterRegistry meterRegistry; private final Set tags = new HashSet<>(); private ServiceRegistration eventSubscriberRegistration; private BundleContext bundleContext; @@ -70,6 +69,7 @@ public class EventCountMetric implements OpenhabCoreMeterBinder, EventSubscriber @Override public void unbind() { + MeterRegistry meterRegistry = this.meterRegistry; if (meterRegistry == null) { return; } @@ -78,19 +78,18 @@ public class EventCountMetric implements OpenhabCoreMeterBinder, EventSubscriber meterRegistry.remove(meter); } } - meterRegistry = null; - if (this.eventSubscriberRegistration != null) { - this.eventSubscriberRegistration.unregister(); + this.meterRegistry = null; + + ServiceRegistration eventSubscriberRegistration = this.eventSubscriberRegistration; + if (eventSubscriberRegistration != null) { + eventSubscriberRegistration.unregister(); this.eventSubscriberRegistration = null; } } @Override public Set getSubscribedEventTypes() { - HashSet subscribedEvents = new HashSet<>(); - subscribedEvents.add(ItemCommandEvent.TYPE); - subscribedEvents.add(ItemStateEvent.TYPE); - return subscribedEvents; + return Set.of(ItemCommandEvent.TYPE, ItemStateEvent.TYPE); } @Override @@ -100,6 +99,7 @@ public class EventCountMetric implements OpenhabCoreMeterBinder, EventSubscriber @Override public void receive(Event event) { + MeterRegistry meterRegistry = this.meterRegistry; if (meterRegistry == null) { logger.trace("Measurement not started. Skipping event processing"); return; diff --git a/bundles/org.openhab.core.io.monitor/src/main/java/org/openhab/core/io/monitor/internal/metrics/JVMMetric.java b/bundles/org.openhab.core.io.monitor/src/main/java/org/openhab/core/io/monitor/internal/metrics/JVMMetric.java index b8db225a4..c0c44f96a 100644 --- a/bundles/org.openhab.core.io.monitor/src/main/java/org/openhab/core/io/monitor/internal/metrics/JVMMetric.java +++ b/bundles/org.openhab.core.io.monitor/src/main/java/org/openhab/core/io/monitor/internal/metrics/JVMMetric.java @@ -39,8 +39,7 @@ public class JVMMetric implements OpenhabCoreMeterBinder { private final Logger logger = LoggerFactory.getLogger(JVMMetric.class); private static final Tag CORE_JVM_METRIC_TAG = Tag.of("metric", "openhab.core.metric.jvm"); private final Set tags = new HashSet<>(); - @Nullable - private MeterRegistry meterRegistry; + private @Nullable MeterRegistry meterRegistry; public JVMMetric(Collection tags) { this.tags.addAll(tags); @@ -61,6 +60,7 @@ public class JVMMetric implements OpenhabCoreMeterBinder { @Override public void unbind() { + MeterRegistry meterRegistry = this.meterRegistry; if (meterRegistry == null) { return; } @@ -69,6 +69,6 @@ public class JVMMetric implements OpenhabCoreMeterBinder { meterRegistry.remove(meter); } } - meterRegistry = null; + this.meterRegistry = null; } } diff --git a/bundles/org.openhab.core.io.monitor/src/main/java/org/openhab/core/io/monitor/internal/metrics/RuleMetric.java b/bundles/org.openhab.core.io.monitor/src/main/java/org/openhab/core/io/monitor/internal/metrics/RuleMetric.java index 3605eb1e8..1ae219256 100644 --- a/bundles/org.openhab.core.io.monitor/src/main/java/org/openhab/core/io/monitor/internal/metrics/RuleMetric.java +++ b/bundles/org.openhab.core.io.monitor/src/main/java/org/openhab/core/io/monitor/internal/metrics/RuleMetric.java @@ -71,34 +71,33 @@ public class RuleMetric implements OpenhabCoreMeterBinder, EventSubscriber { this.meterRegistry = meterRegistry; Dictionary properties = new Hashtable<>(); properties.put(SUBSCRIPTION_PROPERTY_TOPIC, RULES_TOPIC_FILTER); - this.eventSubscriberRegistration = this.bundleContext.registerService(EventSubscriber.class.getName(), this, + eventSubscriberRegistration = this.bundleContext.registerService(EventSubscriber.class.getName(), this, properties); } @Override public void unbind() { - MeterRegistry mReg = meterRegistry; - if (mReg == null) { + MeterRegistry meterRegistry = this.meterRegistry; + if (meterRegistry == null) { return; - } else { - for (Meter meter : mReg.getMeters()) { - if (meter.getId().getTags().contains(CORE_RULE_METRIC_TAG)) { - mReg.remove(meter); - } - } - meterRegistry = null; - if (this.eventSubscriberRegistration != null) { - this.eventSubscriberRegistration.unregister(); - this.eventSubscriberRegistration = null; + } + for (Meter meter : meterRegistry.getMeters()) { + if (meter.getId().getTags().contains(CORE_RULE_METRIC_TAG)) { + meterRegistry.remove(meter); } } + this.meterRegistry = null; + + ServiceRegistration eventSubscriberRegistration = this.eventSubscriberRegistration; + if (eventSubscriberRegistration != null) { + eventSubscriberRegistration.unregister(); + this.eventSubscriberRegistration = null; + } } @Override public Set getSubscribedEventTypes() { - HashSet subscribedEvents = new HashSet<>(); - subscribedEvents.add(RuleStatusInfoEvent.TYPE); - return subscribedEvents; + return Set.of(RuleStatusInfoEvent.TYPE); } @Override @@ -108,34 +107,31 @@ public class RuleMetric implements OpenhabCoreMeterBinder, EventSubscriber { @Override public void receive(Event event) { - MeterRegistry mReg = meterRegistry; - if (mReg == null) { + MeterRegistry meterRegistry = this.meterRegistry; + if (meterRegistry == null) { logger.trace("Measurement not started. Skipping rule event processing"); return; - } else { - String topic = event.getTopic(); - String ruleId = topic.substring(RULES_TOPIC_PREFIX.length(), topic.indexOf(RULES_TOPIC_SUFFIX)); - if (!event.getPayload().contains(RuleStatus.RUNNING.name())) { - logger.trace("Skipping rule status info with status other than RUNNING {}", event.getPayload()); - return; - } - - logger.debug("Rule {} RUNNING - updating metric.", ruleId); - Set tagsWithRule = new HashSet<>(tags); - tagsWithRule.add(Tag.of(RULE_ID_TAG_NAME, ruleId)); - String ruleName = getRuleName(ruleId); - if (ruleName != null) { - tagsWithRule.add(Tag.of(RULE_NAME_TAG_NAME, ruleName)); - } - mReg.counter(METRIC_NAME, tagsWithRule).increment(); } + + String topic = event.getTopic(); + String ruleId = topic.substring(RULES_TOPIC_PREFIX.length(), topic.lastIndexOf(RULES_TOPIC_SUFFIX)); + if (!event.getPayload().contains(RuleStatus.RUNNING.name())) { + logger.trace("Skipping rule status info with status other than RUNNING {}", event.getPayload()); + return; + } + + logger.debug("Rule {} RUNNING - updating metric.", ruleId); + Set tagsWithRule = new HashSet<>(tags); + tagsWithRule.add(Tag.of(RULE_ID_TAG_NAME, ruleId)); + String ruleName = getRuleName(ruleId); + if (ruleName != null) { + tagsWithRule.add(Tag.of(RULE_NAME_TAG_NAME, ruleName)); + } + meterRegistry.counter(METRIC_NAME, tagsWithRule).increment(); } private String getRuleName(String ruleId) { Rule rule = ruleRegistry.get(ruleId); - if (rule != null) { - return rule.getName(); - } - return null; + return rule == null ? null : rule.getName(); } } diff --git a/bundles/org.openhab.core.io.monitor/src/main/java/org/openhab/core/io/monitor/internal/metrics/ThingStateMetric.java b/bundles/org.openhab.core.io.monitor/src/main/java/org/openhab/core/io/monitor/internal/metrics/ThingStateMetric.java index d8b9c32c5..dfd32747b 100644 --- a/bundles/org.openhab.core.io.monitor/src/main/java/org/openhab/core/io/monitor/internal/metrics/ThingStateMetric.java +++ b/bundles/org.openhab.core.io.monitor/src/main/java/org/openhab/core/io/monitor/internal/metrics/ThingStateMetric.java @@ -74,7 +74,7 @@ public class ThingStateMetric implements OpenhabCoreMeterBinder, EventSubscriber thing -> createOrUpdateMetricForBundleState(thing.getUID().getId(), thing.getStatus().ordinal())); Dictionary properties = new Hashtable<>(); properties.put("event.topics", "openhab/things/*"); - this.eventSubscriberRegistration = this.bundleContext.registerService(EventSubscriber.class.getName(), this, + eventSubscriberRegistration = this.bundleContext.registerService(EventSubscriber.class.getName(), this, properties); } @@ -92,16 +92,20 @@ public class ThingStateMetric implements OpenhabCoreMeterBinder, EventSubscriber @Override public void unbind() { + MeterRegistry meterRegistry = this.meterRegistry; if (meterRegistry == null) { return; } + + ServiceRegistration eventSubscriberRegistration = this.eventSubscriberRegistration; if (eventSubscriberRegistration != null) { eventSubscriberRegistration.unregister(); - eventSubscriberRegistration = null; + this.eventSubscriberRegistration = null; } registeredMeters.keySet().forEach(meterRegistry::remove); registeredMeters.clear(); - meterRegistry = null; + + this.meterRegistry = null; } @Override diff --git a/bundles/org.openhab.core.io.monitor/src/main/java/org/openhab/core/io/monitor/internal/metrics/ThreadPoolMetric.java b/bundles/org.openhab.core.io.monitor/src/main/java/org/openhab/core/io/monitor/internal/metrics/ThreadPoolMetric.java index 4a8dc5841..930523b8d 100644 --- a/bundles/org.openhab.core.io.monitor/src/main/java/org/openhab/core/io/monitor/internal/metrics/ThreadPoolMetric.java +++ b/bundles/org.openhab.core.io.monitor/src/main/java/org/openhab/core/io/monitor/internal/metrics/ThreadPoolMetric.java @@ -38,8 +38,7 @@ public class ThreadPoolMetric implements OpenhabCoreMeterBinder { public static final Tag CORE_THREADPOOL_METRIC_TAG = Tag.of("metric", "openhab.core.metric.threadpools"); private static final String POOLNAME_TAG_NAME = "pool"; private final Set tags = new HashSet<>(); - @Nullable - private MeterRegistry meterRegistry; + private @Nullable MeterRegistry meterRegistry; public ThreadPoolMetric(Collection tags) { this.tags.addAll(tags); @@ -70,6 +69,7 @@ public class ThreadPoolMetric implements OpenhabCoreMeterBinder { @Override public void unbind() { + MeterRegistry meterRegistry = this.meterRegistry; if (meterRegistry == null) { return; } @@ -78,6 +78,6 @@ public class ThreadPoolMetric implements OpenhabCoreMeterBinder { meterRegistry.remove(meter); } } - meterRegistry = null; + this.meterRegistry = null; } } diff --git a/bundles/org.openhab.core/src/main/java/org/openhab/core/common/ThreadPoolManager.java b/bundles/org.openhab.core/src/main/java/org/openhab/core/common/ThreadPoolManager.java index 66e9a0d0b..84a905246 100644 --- a/bundles/org.openhab.core/src/main/java/org/openhab/core/common/ThreadPoolManager.java +++ b/bundles/org.openhab.core/src/main/java/org/openhab/core/common/ThreadPoolManager.java @@ -12,6 +12,7 @@ */ package org.openhab.core.common; +import java.util.HashSet; import java.util.Map; import java.util.Map.Entry; import java.util.Set; @@ -166,10 +167,10 @@ public class ThreadPoolManager { protected static int getConfig(String poolName) { Integer cfg = configs.get(poolName); - return (cfg != null) ? cfg : DEFAULT_THREAD_POOL_SIZE; + return cfg != null ? cfg : DEFAULT_THREAD_POOL_SIZE; } public static Set getPoolNames() { - return pools.keySet(); + return new HashSet<>(pools.keySet()); } }