Refactor: move telemetry config from componentCfg to configs.xml
1. Support to export the metrics to multiple targets
2. Add a set of properties to kafka config (key, topic, etc.)
3. Add distributedStore to manage telemetry configs
4. Add CLI to query stored telemetry configs
5. Add a set of telemetry loaders to import xml definitions
6. Add unit tests for telemetry cfg, xml cfg loader and dist store
7. Add missing javadoc for a set of implementation classes
Change-Id: I39480c9a6ac07357184d2e1094b9c9f4d36fd8b1
diff --git a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/config/GrpcTelemetryConfig.java b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/config/GrpcTelemetryConfig.java
index d7c8f62..7b4589d 100644
--- a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/config/GrpcTelemetryConfig.java
+++ b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/config/GrpcTelemetryConfig.java
@@ -20,7 +20,7 @@
/**
* Configuration API of gRPC for publishing openstack telemetry.
*/
-public interface GrpcTelemetryConfig extends TelemetryConfig {
+public interface GrpcTelemetryConfig extends TelemetryConfigProperties {
/**
* Obtains gRPC server IP address.
@@ -60,7 +60,7 @@
/**
* Builder class of GrpcTelemetryConfig.
*/
- interface Builder extends TelemetryConfig.Builder {
+ interface Builder extends TelemetryConfigProperties.Builder {
/**
* Sets gRPC server IP address.
@@ -109,4 +109,4 @@
*/
GrpcTelemetryConfig build();
}
-}
+}
\ No newline at end of file
diff --git a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/config/InfluxDbTelemetryConfig.java b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/config/InfluxDbTelemetryConfig.java
index 32c150f..38017d3 100644
--- a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/config/InfluxDbTelemetryConfig.java
+++ b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/config/InfluxDbTelemetryConfig.java
@@ -20,7 +20,7 @@
/**
* Configuration API of InfluxDB for publishing openstack telemetry.
*/
-public interface InfluxDbTelemetryConfig extends TelemetryConfig {
+public interface InfluxDbTelemetryConfig extends TelemetryConfigProperties {
/**
* Obtains InfluxDB server IP address.
@@ -81,7 +81,7 @@
/**
* Builder class of InfluxDbTelemetryConfig.
*/
- interface Builder extends TelemetryConfig.Builder {
+ interface Builder extends TelemetryConfigProperties.Builder {
/**
* Sets InfluxDB server IP address.
@@ -115,7 +115,7 @@
*/
Builder withPassword(String password);
- /**
+ /**
* Sets InfluxDB measurement.
*
* @param measurement InfluxDB measurement
@@ -154,4 +154,4 @@
*/
InfluxDbTelemetryConfig build();
}
-}
+}
\ No newline at end of file
diff --git a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/config/KafkaTelemetryConfig.java b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/config/KafkaTelemetryConfig.java
index 078433f..80c7737 100644
--- a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/config/KafkaTelemetryConfig.java
+++ b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/config/KafkaTelemetryConfig.java
@@ -20,7 +20,7 @@
/**
* Configuration API of Kafka for publishing openstack telemetry.
*/
-public interface KafkaTelemetryConfig extends TelemetryConfig {
+public interface KafkaTelemetryConfig extends TelemetryConfigProperties {
/**
* Obtains kafka IP address.
@@ -86,6 +86,27 @@
String valueSerializer();
/**
+ * Obtains kafka key.
+ *
+ * @return kafka key
+ */
+ String key();
+
+ /**
+ * Obtains kafka topic.
+ *
+ * @return kafka topic
+ */
+ String topic();
+
+ /**
+ * Obtains kafka message codec.
+ *
+ * @return kafka message codec
+ */
+ String codec();
+
+ /**
* Obtains kafka config maps.
*
* @return kafka config map
@@ -95,7 +116,7 @@
/**
* Builder class of KafkaTelemetryConfig.
*/
- interface Builder extends TelemetryConfig.Builder {
+ interface Builder extends TelemetryConfigProperties.Builder {
/**
* Sets kafka IP address.
@@ -170,6 +191,30 @@
Builder withValueSerializer(String valueSerializer);
/**
+ * Sets kafka key.
+ *
+ * @param key kafka key
+ * @return builder instance
+ */
+ Builder withKey(String key);
+
+ /**
+ * Sets kafka topic.
+ *
+ * @param topic kafka topic
+ * @return builder instance
+ */
+ Builder withTopic(String topic);
+
+ /**
+ * Sets kafka message codec.
+ *
+ * @param codec kafka message codec
+ * @return builder instance
+ */
+ Builder withCodec(String codec);
+
+ /**
* Sets other kafka configuration map.
*
* @param configMap kafka configuration map
@@ -184,4 +229,4 @@
*/
KafkaTelemetryConfig build();
}
-}
+}
\ No newline at end of file
diff --git a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/config/PrometheusTelemetryConfig.java b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/config/PrometheusTelemetryConfig.java
index 8a74929..de47a7e 100644
--- a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/config/PrometheusTelemetryConfig.java
+++ b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/config/PrometheusTelemetryConfig.java
@@ -17,7 +17,7 @@
import java.util.Map;
-public interface PrometheusTelemetryConfig extends TelemetryConfig {
+public interface PrometheusTelemetryConfig extends TelemetryConfigProperties {
/**
* Obtains prometheus exporter IP address.
@@ -44,7 +44,7 @@
/**
* Builder class of PrometheusTelemetryConfig.
*/
- interface Builder extends TelemetryConfig.Builder {
+ interface Builder extends TelemetryConfigProperties.Builder {
/**
* Sets prometheus exporter IP address.
@@ -77,4 +77,4 @@
*/
PrometheusTelemetryConfig build();
}
-}
+}
\ No newline at end of file
diff --git a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/config/RestTelemetryConfig.java b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/config/RestTelemetryConfig.java
index 0e9add5..781b0c9 100644
--- a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/config/RestTelemetryConfig.java
+++ b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/config/RestTelemetryConfig.java
@@ -20,7 +20,7 @@
/**
* Configuration API of REST for publishing openstack telemetry.
*/
-public interface RestTelemetryConfig extends TelemetryConfig {
+public interface RestTelemetryConfig extends TelemetryConfigProperties {
/**
* Obtains REST IP address.
@@ -74,7 +74,7 @@
/**
* Builder class for RestTelemetryConfig.
*/
- interface Builder extends TelemetryConfig.Builder {
+ interface Builder extends TelemetryConfigProperties.Builder {
/**
* Sets REST server IP address.
@@ -139,4 +139,4 @@
*/
RestTelemetryConfig build();
}
-}
+}
\ No newline at end of file
diff --git a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/config/TelemetryConfig.java b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/config/TelemetryConfig.java
index 1d31c86..a5d20cb 100644
--- a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/config/TelemetryConfig.java
+++ b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/config/TelemetryConfig.java
@@ -15,13 +15,132 @@
*/
package org.onosproject.openstacktelemetry.api.config;
+import org.onosproject.net.Annotations;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+
/**
- * An interface for telemetryconfig.
+ * An interface for telemetry config.
*/
-public interface TelemetryConfig {
+public interface TelemetryConfig extends Annotations {
- Builder createBuilder();
+ /**
+ * Telemetry configuration type.
+ */
+ enum ConfigType {
+ /**
+ * Indicates KAFKA telemetry config.
+ */
+ KAFKA,
- interface Builder {
+ /**
+ * Indicates GRPC telemetry config.
+ */
+ GRPC,
+
+ /**
+ * Indicates REST telemetry config.
+ */
+ REST,
+
+ /**
+ * Indicates InfluxDB telemetry config.
+ */
+ INFLUXDB,
+
+ /**
+ * Indicates prometheus telemetry config.
+ */
+ PROMETHEUS,
+
+ /**
+ * Indicates unknown telemetry config.
+ */
+ UNKNOWN
}
+
+ /**
+ * Returns the telemetry configuration name.
+ *
+ * @return configuration name
+ */
+ String name();
+
+ /**
+ * Returns the telemetry configuration type.
+ *
+ * @return configuration type
+ */
+ ConfigType type();
+
+ /**
+ * Returns all the parent configurations from which this configuration inherits
+ * properties.
+ *
+ * @return list of parent configurations
+ */
+ List<TelemetryConfig> parents();
+
+ /**
+ * Returns the off-platform application manufacturer name.
+ *
+ * @return manufacturer name
+ */
+ String manufacturer();
+
+ /**
+ * Returns the off-platform application software version.
+ *
+ * @return software version
+ */
+ String swVersion();
+
+ /**
+ * Returns the service enable flag.
+ *
+ * @return enable flag
+ */
+ boolean enabled();
+
+ /**
+ * Returns the set of annotations as map of key/value properties.
+ *
+ * @return map of properties
+ */
+ Map<String, String> properties();
+
+ /**
+ * Gets the value of the given property name.
+ *
+ * @param name property name
+ * @return the value of the property,
+ * or null if the property is not defined in this configuration nor
+ * in any of its ancestors
+ */
+ String getProperty(String name);
+
+ /**
+ * Get the value of the given property name.
+ *
+ * @param name property name
+ * @param defaultValue to use if the property is not defined in this configuration
+ * nor in any of its ancestors
+ * @return the value of the property,
+ * or null if the property is not defined in this configuration nor
+ * in any of its ancestors
+ */
+ default String getProperty(String name, String defaultValue) {
+ return Optional.ofNullable(getProperty(name)).orElse(defaultValue);
+ }
+
+ /**
+ * Merges the specified config properties into this one, giving preference to
+ * the other config when dealing with conflicts.
+ *
+ * @param other other configuration
+ * @return merged configuration
+ */
+ TelemetryConfig merge(TelemetryConfig other);
}
diff --git a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/config/TelemetryConfigProperties.java b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/config/TelemetryConfigProperties.java
new file mode 100644
index 0000000..d3ca479
--- /dev/null
+++ b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/config/TelemetryConfigProperties.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2018-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.openstacktelemetry.api.config;
+
+/**
+ * An interface for telemetry config properties.
+ */
+public interface TelemetryConfigProperties {
+
+ /**
+ * Creates a telemetry config properties builder.
+ *
+ * @return builder
+ */
+ Builder createBuilder();
+
+ /**
+ * Builder interface.
+ */
+ interface Builder {
+ }
+}