]> git.basschouten.com Git - openhab-addons.git/blob
210859c4481c15c0963ac1abd1a901d6fe423595
[openhab-addons.git] /
1 /**
2  * Copyright (c) 2010-2024 Contributors to the openHAB project
3  *
4  * See the NOTICE file(s) distributed with this work for additional
5  * information.
6  *
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
10  *
11  * SPDX-License-Identifier: EPL-2.0
12  */
13 package org.openhab.persistence.influxdb.internal;
14
15 import java.util.Map;
16 import java.util.Optional;
17 import java.util.StringJoiner;
18
19 import org.eclipse.jdt.annotation.NonNullByDefault;
20 import org.eclipse.jdt.annotation.Nullable;
21 import org.openhab.core.config.core.ConfigParser;
22 import org.slf4j.Logger;
23 import org.slf4j.LoggerFactory;
24
25 /**
26  * Contains this addon configurable parameters
27  *
28  * @author Joan Pujol Espinar - Initial contribution
29  */
30 @NonNullByDefault
31 public class InfluxDBConfiguration {
32     public static final String URL_PARAM = "url";
33     public static final String TOKEN_PARAM = "token";
34     public static final String USER_PARAM = "user";
35     public static final String PASSWORD_PARAM = "password";
36     public static final String DATABASE_PARAM = "db";
37     public static final String RETENTION_POLICY_PARAM = "retentionPolicy";
38     public static final String VERSION_PARAM = "version";
39     public static final String REPLACE_UNDERSCORE_PARAM = "replaceUnderscore";
40     public static final String ADD_CATEGORY_TAG_PARAM = "addCategoryTag";
41     public static final String ADD_LABEL_TAG_PARAM = "addLabelTag";
42     public static final String ADD_TYPE_TAG_PARAM = "addTypeTag";
43     private final Logger logger = LoggerFactory.getLogger(InfluxDBConfiguration.class);
44     private final String url;
45     private final String user;
46     private final String password;
47     private final String token;
48     private final String databaseName;
49     private final String retentionPolicy;
50     private final InfluxDBVersion version;
51     private final boolean replaceUnderscore;
52     private final boolean addCategoryTag;
53     private final boolean addTypeTag;
54     private final boolean addLabelTag;
55
56     public InfluxDBConfiguration(Map<String, Object> config) {
57         url = ConfigParser.valueAsOrElse(config.get(URL_PARAM), String.class, "http://127.0.0.1:8086");
58         user = ConfigParser.valueAsOrElse(config.get(USER_PARAM), String.class, "openhab");
59         password = ConfigParser.valueAsOrElse(config.get(PASSWORD_PARAM), String.class, "");
60         token = ConfigParser.valueAsOrElse(config.get(TOKEN_PARAM), String.class, "");
61         databaseName = ConfigParser.valueAsOrElse(config.get(DATABASE_PARAM), String.class, "openhab");
62         retentionPolicy = ConfigParser.valueAsOrElse(config.get(RETENTION_POLICY_PARAM), String.class, "autogen");
63         version = parseInfluxVersion((String) config.getOrDefault(VERSION_PARAM, InfluxDBVersion.V1.name()));
64         replaceUnderscore = ConfigParser.valueAsOrElse(config.get(REPLACE_UNDERSCORE_PARAM), Boolean.class, false);
65         addCategoryTag = ConfigParser.valueAsOrElse(config.get(ADD_CATEGORY_TAG_PARAM), Boolean.class, false);
66         addLabelTag = ConfigParser.valueAsOrElse(config.get(ADD_LABEL_TAG_PARAM), Boolean.class, false);
67         addTypeTag = ConfigParser.valueAsOrElse(config.get(ADD_TYPE_TAG_PARAM), Boolean.class, false);
68     }
69
70     private InfluxDBVersion parseInfluxVersion(@Nullable String value) {
71         try {
72             return Optional.ofNullable(value).map(InfluxDBVersion::valueOf).orElse(InfluxDBVersion.UNKNOWN);
73         } catch (RuntimeException e) {
74             logger.warn("Invalid version {}", value);
75             return InfluxDBVersion.UNKNOWN;
76         }
77     }
78
79     public boolean isValid() {
80         boolean hasVersion = version != InfluxDBVersion.UNKNOWN;
81         boolean hasCredentials = false;
82         if (version == InfluxDBVersion.V1) {
83             hasCredentials = !user.isBlank() && !password.isBlank();
84         } else if (version == InfluxDBVersion.V2) {
85             hasCredentials = !token.isBlank() || (!user.isBlank() && !password.isBlank());
86         }
87         boolean hasDatabase = !databaseName.isBlank();
88         boolean hasRetentionPolicy = !retentionPolicy.isBlank();
89
90         boolean valid = hasVersion && hasCredentials && hasDatabase && hasRetentionPolicy;
91         if (valid) {
92             return true;
93         } else {
94             String msg = "InfluxDB configuration isn't valid. Addon won't work: ";
95             StringJoiner reason = new StringJoiner(",");
96             if (!hasVersion) {
97                 reason.add("Unknown version");
98             } else {
99                 if (!hasCredentials) {
100                     reason.add("No credentials");
101                 }
102                 if (!hasDatabase) {
103                     reason.add("No database name / organization defined");
104                 }
105                 if (!hasRetentionPolicy) {
106                     reason.add("No retention policy / bucket defined");
107                 }
108             }
109             logger.warn("{} {}", msg, reason);
110             return false;
111         }
112     }
113
114     public String getUrl() {
115         return url;
116     }
117
118     public String getToken() {
119         return token;
120     }
121
122     public String getDatabaseName() {
123         return databaseName;
124     }
125
126     public String getRetentionPolicy() {
127         return retentionPolicy;
128     }
129
130     public boolean isReplaceUnderscore() {
131         return replaceUnderscore;
132     }
133
134     public boolean isAddCategoryTag() {
135         return addCategoryTag;
136     }
137
138     public boolean isAddTypeTag() {
139         return addTypeTag;
140     }
141
142     public boolean isAddLabelTag() {
143         return addLabelTag;
144     }
145
146     public String getUser() {
147         return user;
148     }
149
150     public String getPassword() {
151         return password;
152     }
153
154     public InfluxDBVersion getVersion() {
155         return version;
156     }
157
158     @Override
159     public String toString() {
160         return "InfluxDBConfiguration{url='" + url + "', user='" + user + "', password='" + password.length()
161                 + " chars', token='" + token.length() + " chars', databaseName='" + databaseName
162                 + "', retentionPolicy='" + retentionPolicy + "', version=" + version + ", replaceUnderscore="
163                 + replaceUnderscore + ", addCategoryTag=" + addCategoryTag + ", addTypeTag=" + addTypeTag
164                 + ", addLabelTag=" + addLabelTag + '}';
165     }
166 }