2 * Copyright (c) 2010-2021 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;
16 import java.util.Objects;
18 import org.eclipse.jdt.annotation.NonNullByDefault;
19 import org.eclipse.jdt.annotation.Nullable;
20 import org.openhab.io.metrics.MetricsConfiguration;
21 import org.openhab.io.metrics.MetricsExporter;
23 import io.micrometer.core.instrument.Clock;
24 import io.micrometer.core.instrument.composite.CompositeMeterRegistry;
25 import io.micrometer.influx.InfluxConfig;
26 import io.micrometer.influx.InfluxMeterRegistry;
29 * The {@link InfluxMetricsExporter} class implements a MetricsExporter for InfluxDB
31 * @author Robert Bach - Initial contribution
34 public class InfluxMetricsExporter extends MetricsExporter {
36 private @Nullable InfluxMeterRegistry influxMeterRegistry = null;
37 private @Nullable CompositeMeterRegistry meterRegistry = null;
40 public void start(CompositeMeterRegistry meterRegistry, MetricsConfiguration metricsConfiguration) {
41 influxMeterRegistry = new InfluxMeterRegistry(getInfluxConfig(metricsConfiguration), Clock.SYSTEM);
42 meterRegistry.add(influxMeterRegistry);
46 public void shutdown() {
47 if (influxMeterRegistry != null) {
48 Objects.requireNonNull(influxMeterRegistry).stop();
50 if (meterRegistry != null) {
51 Objects.requireNonNull(meterRegistry).remove(influxMeterRegistry);
54 influxMeterRegistry = null;
57 private InfluxConfig getInfluxConfig(MetricsConfiguration metricsConfiguration) {
58 return new InfluxConfig() {
60 public Duration step() {
61 return Duration.ofSeconds(metricsConfiguration.influxUpdateIntervalInSeconds);
66 return metricsConfiguration.influxURL;
71 return metricsConfiguration.influxDB;
76 public String userName() {
77 return metricsConfiguration.influxUsername;
82 public String password() {
83 return metricsConfiguration.influxPassword;
87 @io.micrometer.core.lang.Nullable
89 public String get(@Nullable String k) {
90 return null; // accept the rest of the defaults
96 protected boolean isEnabled(MetricsConfiguration config) {
97 return config.influxMetricsEnabled;