2 * Copyright (c) 2010-2023 Contributors to the openHAB project
4 * See the NOTICE file(s) distributed with this work for additional
7 * This program and the accompanying materials are made available under the
8 * terms of the Eclipse Public License 2.0 which is available at
9 * http://www.eclipse.org/legal/epl-2.0
11 * SPDX-License-Identifier: EPL-2.0
13 package org.openhab.io.metrics.exporters;
15 import java.time.Duration;
17 import org.eclipse.jdt.annotation.NonNullByDefault;
18 import org.eclipse.jdt.annotation.Nullable;
19 import org.openhab.io.metrics.MetricsConfiguration;
20 import org.openhab.io.metrics.MetricsExporter;
22 import io.micrometer.core.instrument.Clock;
23 import io.micrometer.core.instrument.composite.CompositeMeterRegistry;
24 import io.micrometer.influx.InfluxConfig;
25 import io.micrometer.influx.InfluxMeterRegistry;
28 * The {@link InfluxMetricsExporter} class implements a MetricsExporter for InfluxDB.
30 * @author Robert Bach - Initial contribution
33 public class InfluxMetricsExporter extends MetricsExporter {
35 private @Nullable InfluxMeterRegistry influxMeterRegistry;
36 private @Nullable CompositeMeterRegistry meterRegistry;
39 public void start(CompositeMeterRegistry meterRegistry, MetricsConfiguration metricsConfiguration) {
40 influxMeterRegistry = new InfluxMeterRegistry(getInfluxConfig(metricsConfiguration), Clock.SYSTEM);
41 meterRegistry.add(influxMeterRegistry);
45 public void shutdown() {
46 InfluxMeterRegistry influxMeterRegistry = this.influxMeterRegistry;
47 if (influxMeterRegistry != null) {
48 influxMeterRegistry.stop();
49 this.influxMeterRegistry = null;
52 CompositeMeterRegistry meterRegistry = this.meterRegistry;
53 if (meterRegistry != null) {
54 meterRegistry.remove(influxMeterRegistry);
55 this.meterRegistry = null;
59 private InfluxConfig getInfluxConfig(MetricsConfiguration metricsConfiguration) {
60 return new InfluxConfig() {
62 public Duration step() {
63 return Duration.ofSeconds(metricsConfiguration.influxUpdateIntervalInSeconds);
68 return metricsConfiguration.influxURL;
73 return metricsConfiguration.influxDB;
78 public String userName() {
79 return metricsConfiguration.influxUsername;
84 public String password() {
85 return metricsConfiguration.influxPassword;
89 @io.micrometer.core.lang.Nullable
91 public String get(@Nullable String k) {
92 return null; // accept the rest of the defaults
98 protected boolean isEnabled(MetricsConfiguration config) {
99 return config.influxMetricsEnabled;