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/Constants.java b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/Constants.java
index bf0e013..3ebf105 100644
--- a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/Constants.java
+++ b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/Constants.java
@@ -32,6 +32,12 @@
public static final String VLAN = "VLAN";
public static final String FLAT = "FLAT";
+ public static final String GRPC_SCHEME = "grpc";
+ public static final String KAFKA_SCHEME = "kafka";
+ public static final String INFLUXDB_SCHEME = "influxdb";
+ public static final String PROMETHEUS_SCHEME = "prometheus";
+ public static final String REST_SCHEME = "rest";
+
// default configuration variables for ONOS GUI
public static final int DEFAULT_DATA_POINT_SIZE = 17280;
}
diff --git a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/GrpcTelemetryConfigService.java b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/GrpcTelemetryConfigService.java
deleted file mode 100644
index d95d752..0000000
--- a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/GrpcTelemetryConfigService.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * 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;
-
-/**
- * Configuration service API for publishing openstack telemetry through gRPC producer.
- */
-public interface GrpcTelemetryConfigService extends TelemetryConfigService {
-}
diff --git a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/GrpcTelemetryService.java b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/GrpcTelemetryService.java
index e885b7e..fd4e08b 100644
--- a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/GrpcTelemetryService.java
+++ b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/GrpcTelemetryService.java
@@ -27,4 +27,14 @@
* @return a response from gRPC server
*/
Object publish(Object record);
+
+ /**
+ * Returns GRPC telemetry service type.
+ *
+ * @return GRPC telemetry service type
+ */
+ @Override
+ default ServiceType type() {
+ return ServiceType.GRPC;
+ }
}
diff --git a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/InfluxDbTelemetryConfigService.java b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/InfluxDbTelemetryConfigService.java
deleted file mode 100644
index f525d01..0000000
--- a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/InfluxDbTelemetryConfigService.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * 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;
-
-/**
- * Configuration service API for publishing openstack telemetry through InfluxDB producer.
- */
-public interface InfluxDbTelemetryConfigService extends TelemetryConfigService {
-}
diff --git a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/InfluxDbTelemetryService.java b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/InfluxDbTelemetryService.java
index 4a1bd5c..868c3e4 100644
--- a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/InfluxDbTelemetryService.java
+++ b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/InfluxDbTelemetryService.java
@@ -28,4 +28,14 @@
* @param record a network metric to be published
*/
void publish(InfluxRecord<String, Set<FlowInfo>> record);
+
+ /**
+ * Returns influxDB telemetry service type.
+ *
+ * @return influxDB telemetry service type
+ */
+ @Override
+ default ServiceType type() {
+ return ServiceType.INFLUXDB;
+ }
}
diff --git a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/KafkaTelemetryConfigService.java b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/KafkaTelemetryConfigService.java
deleted file mode 100644
index 9b8e827..0000000
--- a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/KafkaTelemetryConfigService.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * 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;
-
-/**
- * Configuration service API for publishing openstack telemetry through Kafka producer.
- */
-public interface KafkaTelemetryConfigService extends TelemetryConfigService {
-}
diff --git a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/KafkaTelemetryService.java b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/KafkaTelemetryService.java
index caa1f28..8135221 100644
--- a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/KafkaTelemetryService.java
+++ b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/KafkaTelemetryService.java
@@ -15,9 +15,9 @@
*/
package org.onosproject.openstacktelemetry.api;
-import org.apache.kafka.clients.producer.ProducerRecord;
import org.apache.kafka.clients.producer.RecordMetadata;
+import java.util.Set;
import java.util.concurrent.Future;
/**
@@ -28,8 +28,18 @@
/**
* Publishes openstack telemetry to Kafka server.
*
- * @param record a network metric to be published
+ * @param flowInfos network metrics to be published
* @return metadata for a record that has been acknowledged
*/
- Future<RecordMetadata> publish(ProducerRecord<String, byte[]> record);
+ Set<Future<RecordMetadata>> publish(Set<FlowInfo> flowInfos);
+
+ /**
+ * Returns kafka telemetry service type.
+ *
+ * @return kafka telemetry service type
+ */
+ @Override
+ default ServiceType type() {
+ return ServiceType.KAFKA;
+ }
}
diff --git a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/OpenstackTelemetryService.java b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/OpenstackTelemetryService.java
index 8d5df0b..850e2e7 100644
--- a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/OpenstackTelemetryService.java
+++ b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/OpenstackTelemetryService.java
@@ -27,14 +27,14 @@
*
* @param telemetryService telemetry service
*/
- void addTelemetryService(TelemetryService telemetryService);
+ void addTelemetryService(TelemetryAdminService telemetryService);
/**
* Unregisters an existing northbound telemetry service.
*
* @param telemetryService telemetry service
*/
- void removeTelemetryService(TelemetryService telemetryService);
+ void removeTelemetryService(TelemetryAdminService telemetryService);
/**
* Publishes new flow information to off-platform application through
@@ -49,5 +49,13 @@
*
* @return telemetry services
*/
- Set<TelemetryService> telemetryServices();
+ Set<TelemetryAdminService> telemetryServices();
+
+ /**
+ * Obtains a specific openstack telemetry service.
+ *
+ * @param type telemetry type
+ * @return telemetry service instance
+ */
+ TelemetryAdminService telemetryService(String type);
}
diff --git a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/PrometheusTelemetryService.java b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/PrometheusTelemetryService.java
index 2680ab1..23c2192 100644
--- a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/PrometheusTelemetryService.java
+++ b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/PrometheusTelemetryService.java
@@ -27,4 +27,14 @@
* @param flowInfos a network metric to be published
*/
void publish(Set<FlowInfo> flowInfos);
+
+ /**
+ * Returns prometheus telemetry service type.
+ *
+ * @return prometheus telemetry service type
+ */
+ @Override
+ default ServiceType type() {
+ return ServiceType.PROMETHEUS;
+ }
}
diff --git a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/RestTelemetryConfigService.java b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/RestTelemetryConfigService.java
deleted file mode 100644
index f3b60ee..0000000
--- a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/RestTelemetryConfigService.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * 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;
-
-/**
- * Configuration service API for publishing openstack telemetry through REST producer.
- */
-public interface RestTelemetryConfigService extends TelemetryConfigService {
-}
diff --git a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/RestTelemetryService.java b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/RestTelemetryService.java
index ab3755e..e0fca83 100644
--- a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/RestTelemetryService.java
+++ b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/RestTelemetryService.java
@@ -16,6 +16,7 @@
package org.onosproject.openstacktelemetry.api;
import javax.ws.rs.core.Response;
+import java.util.Set;
/**
* Service API for publishing openstack telemetry through REST producer.
@@ -24,30 +25,21 @@
/**
* Publishes openstack telemetry to REST server.
- *
- * @param endpoint an endpoint URL
- * @param method HTTP method
- * @param record network metrics
- * @return response from REST server
- */
- Response publish(String endpoint, String method, String record);
-
- /**
- * Publishes openstack telemetry to REST server.
- *
- * @param method HTTP method
- * @param record network metrics
- * @return response from REST server
- */
- Response publish(String method, String record);
-
- /**
- * Publishes openstack telemetry to REST server.
* By default, the client sends record using the HTTP method configured in
* RestTelemetryConfig.
*
* @param record network metrics
* @return response from REST server
*/
- Response publish(String record);
+ Set<Response> publish(String record);
+
+ /**
+ * Returns REST telemetry service type.
+ *
+ * @return REST telemetry service type
+ */
+ @Override
+ default ServiceType type() {
+ return ServiceType.REST;
+ }
}
diff --git a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/TelemetryAdminService.java b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/TelemetryAdminService.java
index d5ee6ad..62398db 100644
--- a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/TelemetryAdminService.java
+++ b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/TelemetryAdminService.java
@@ -15,8 +15,6 @@
*/
package org.onosproject.openstacktelemetry.api;
-import org.onosproject.openstacktelemetry.api.config.TelemetryConfig;
-
/**
* Admin service API for publishing openstack telemetry.
*/
@@ -24,10 +22,8 @@
/**
* Prepares and launches the telemetry producer.
- *
- * @param config telemetry server config
*/
- void start(TelemetryConfig config);
+ void start();
/**
* Terminates the telemetry producer.
@@ -36,8 +32,6 @@
/**
* Restarts the telemetry producer.
- *
- * @param config telemetry server config
*/
- void restart(TelemetryConfig config);
+ void restart();
}
diff --git a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/PrometheusTelemetryConfigService.java b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/TelemetryCodec.java
similarity index 67%
copy from apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/PrometheusTelemetryConfigService.java
copy to apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/TelemetryCodec.java
index 4e115de..1f0f737 100644
--- a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/PrometheusTelemetryConfigService.java
+++ b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/TelemetryCodec.java
@@ -15,8 +15,19 @@
*/
package org.onosproject.openstacktelemetry.api;
+import java.nio.ByteBuffer;
+import java.util.Set;
+
/**
- * Configuration service API for publishing openstack telemetry through Prometheus producer.
+ * Telemetry codec interface.
*/
-public interface PrometheusTelemetryConfigService extends TelemetryConfigService {
+public interface TelemetryCodec {
+
+ /**
+ * Encodes a collection flow infos into byte buffer.
+ *
+ * @param flowInfos a collection of flow info
+ * @return encoded byte buffer
+ */
+ ByteBuffer encode(Set<FlowInfo> flowInfos);
}
diff --git a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/TelemetryConfigAdminService.java b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/TelemetryConfigAdminService.java
new file mode 100644
index 0000000..18ee89b
--- /dev/null
+++ b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/TelemetryConfigAdminService.java
@@ -0,0 +1,54 @@
+/*
+ * 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;
+
+import org.onosproject.openstacktelemetry.api.config.TelemetryConfig;
+
+import java.util.Set;
+
+/**
+ * Service for mapping telemetry configurations implementations.
+ */
+public interface TelemetryConfigAdminService extends TelemetryConfigService {
+
+ /**
+ * Returns the set of telemetry configurations currently registered.
+ *
+ * @return registered telemetry configurations
+ */
+ Set<TelemetryConfigProvider> getProviders();
+
+ /**
+ * Registers the specified telemetry configuration provider.
+ *
+ * @param provider configuration provider to register
+ */
+ void registerProvider(TelemetryConfigProvider provider);
+
+ /**
+ * Unregisters the specified telemetry configuration provider.
+ *
+ * @param provider configuration provider to unregister
+ */
+ void unregisterProvider(TelemetryConfigProvider provider);
+
+ /**
+ * Updates an existing telemetry configuration.
+ *
+ * @param config telemetry configuration
+ */
+ void updateTelemetryConfig(TelemetryConfig config);
+}
diff --git a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/TelemetryConfigEvent.java b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/TelemetryConfigEvent.java
new file mode 100644
index 0000000..a0c2714
--- /dev/null
+++ b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/TelemetryConfigEvent.java
@@ -0,0 +1,53 @@
+/*
+ * 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;
+
+import org.onosproject.event.AbstractEvent;
+import org.onosproject.openstacktelemetry.api.config.TelemetryConfig;
+
+/**
+ * Describes telemetry config event.
+ */
+public class TelemetryConfigEvent extends AbstractEvent<TelemetryConfigEvent.Type, TelemetryConfig> {
+
+ /**
+ * Telemetry config event type.
+ */
+ public enum Type {
+ /**
+ * Signifies that a new telemetry config is added.
+ */
+ CONFIG_ADDED,
+ /**
+ * Signifies that an existing telemetry config is updated.
+ */
+ CONFIG_UPDATED,
+ /**
+ * Signifies that an existing telemetry config is removed.
+ */
+ CONFIG_DELETED
+ }
+
+ /**
+ * Creates an event of a given type for the specified telemetry config.
+ *
+ * @param type telemetry config type
+ * @param config telemetry config
+ */
+ public TelemetryConfigEvent(Type type, TelemetryConfig config) {
+ super(type, config);
+ }
+}
diff --git a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/PrometheusTelemetryConfigService.java b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/TelemetryConfigListener.java
similarity index 79%
rename from apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/PrometheusTelemetryConfigService.java
rename to apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/TelemetryConfigListener.java
index 4e115de..cef78af 100644
--- a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/PrometheusTelemetryConfigService.java
+++ b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/TelemetryConfigListener.java
@@ -15,8 +15,10 @@
*/
package org.onosproject.openstacktelemetry.api;
+import org.onosproject.event.EventListener;
+
/**
- * Configuration service API for publishing openstack telemetry through Prometheus producer.
+ * Listener for telemetry config event.
*/
-public interface PrometheusTelemetryConfigService extends TelemetryConfigService {
+public interface TelemetryConfigListener extends EventListener<TelemetryConfigEvent> {
}
diff --git a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/PrometheusTelemetryConfigService.java b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/TelemetryConfigProvider.java
similarity index 62%
copy from apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/PrometheusTelemetryConfigService.java
copy to apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/TelemetryConfigProvider.java
index 4e115de..57b148e 100644
--- a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/PrometheusTelemetryConfigService.java
+++ b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/TelemetryConfigProvider.java
@@ -15,8 +15,19 @@
*/
package org.onosproject.openstacktelemetry.api;
+import org.onosproject.openstacktelemetry.api.config.TelemetryConfig;
+
+import java.util.Set;
+
/**
- * Configuration service API for publishing openstack telemetry through Prometheus producer.
+ * Represents entity capable of providing telemetry configurations.
*/
-public interface PrometheusTelemetryConfigService extends TelemetryConfigService {
+public interface TelemetryConfigProvider {
+
+ /**
+ * Returns the set of telemetry configuration to be made available by this provider.
+ *
+ * @return set of telemetry configurations
+ */
+ Set<TelemetryConfig> getTelemetryConfigs();
}
diff --git a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/TelemetryConfigService.java b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/TelemetryConfigService.java
index 51e4cea..76076d2 100644
--- a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/TelemetryConfigService.java
+++ b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/TelemetryConfigService.java
@@ -15,17 +15,39 @@
*/
package org.onosproject.openstacktelemetry.api;
+import org.onosproject.event.ListenerService;
import org.onosproject.openstacktelemetry.api.config.TelemetryConfig;
+import org.onosproject.openstacktelemetry.api.config.TelemetryConfig.ConfigType;
+
+import java.util.Set;
/**
* Telemetry configuration service interface.
*/
-public interface TelemetryConfigService {
+public interface TelemetryConfigService
+ extends ListenerService<TelemetryConfigEvent, TelemetryConfigListener> {
/**
- * Obtains the telemetry configuration.
+ * Obtains the telemetry configuration with the given telemetry
+ * configuration name.
*
- * @return telemetry configuration
+ * @param name telemetry configuration name
+ * @return provided telemetry configuration
*/
- TelemetryConfig getConfig();
+ TelemetryConfig getConfig(String name);
+
+ /**
+ * Obtains the telemetry configuration with the given telemetry config type.
+ *
+ * @param type telemetry configuration type
+ * @return provided telemetry configurations
+ */
+ Set<TelemetryConfig> getConfigsByType(ConfigType type);
+
+ /**
+ * Returns the overall set of telemetry configurations being provided.
+ *
+ * @return provided telemetry configurations
+ */
+ Set<TelemetryConfig> getConfigs();
}
diff --git a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/TelemetryConfigStore.java b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/TelemetryConfigStore.java
new file mode 100644
index 0000000..42148f6
--- /dev/null
+++ b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/TelemetryConfigStore.java
@@ -0,0 +1,79 @@
+/*
+ * 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;
+
+import org.onosproject.openstacktelemetry.api.config.TelemetryConfig;
+import org.onosproject.openstacktelemetry.api.config.TelemetryConfig.ConfigType;
+import org.onosproject.store.Store;
+
+import java.util.Set;
+
+/**
+ * Manages inventory of telemetry config; not intended for direct use.
+ */
+public interface TelemetryConfigStore
+ extends Store<TelemetryConfigEvent, TelemetryConfigStoreDelegate> {
+
+ /**
+ * Creates a new telemetry config.
+ *
+ * @param config a telemetry config
+ */
+ void createTelemetryConfig(TelemetryConfig config);
+
+ /**
+ * Updates the existing telemetry config.
+ *
+ * @param config the existing telemetry config
+ */
+ void updateTelemetryConfig(TelemetryConfig config);
+
+ /**
+ * Removes the existing telemetry config.
+ *
+ * @param name telemetry config name
+ * @return the removed telemetry config
+ */
+ TelemetryConfig removeTelemetryConfig(String name);
+
+ /**
+ * Obtains the existing telemetry config.
+ *
+ * @param name telemetry config name
+ * @return queried telemetry config
+ */
+ TelemetryConfig telemetryConfig(String name);
+
+ /**
+ * Obtains a collection of all of telemetry configs.
+ *
+ * @return a collection of all of telemetry configs
+ */
+ Set<TelemetryConfig> telemetryConfigs();
+
+ /**
+ * Obtains a collection of telemetry configs by config type.
+ *
+ * @param type config type
+ * @return a collection of telemetry configs by config type
+ */
+ Set<TelemetryConfig> telemetryConfigsByType(ConfigType type);
+
+ /**
+ * Removes all telemetry configs.
+ */
+ void clear();
+}
diff --git a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/PrometheusTelemetryConfigService.java b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/TelemetryConfigStoreDelegate.java
similarity index 78%
copy from apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/PrometheusTelemetryConfigService.java
copy to apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/TelemetryConfigStoreDelegate.java
index 4e115de..8fa7720 100644
--- a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/PrometheusTelemetryConfigService.java
+++ b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/TelemetryConfigStoreDelegate.java
@@ -15,8 +15,10 @@
*/
package org.onosproject.openstacktelemetry.api;
+import org.onosproject.store.StoreDelegate;
+
/**
- * Configuration service API for publishing openstack telemetry through Prometheus producer.
+ * Telemetry config store delegate abstraction.
*/
-public interface PrometheusTelemetryConfigService extends TelemetryConfigService {
+public interface TelemetryConfigStoreDelegate extends StoreDelegate<TelemetryConfigEvent> {
}
diff --git a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/TelemetryService.java b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/TelemetryService.java
index 86ebb65..7806ff7 100644
--- a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/TelemetryService.java
+++ b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/TelemetryService.java
@@ -21,9 +21,51 @@
public interface TelemetryService {
/**
+ * Telemetry service type.
+ */
+ enum ServiceType {
+ /**
+ * Indicates KAFKA telemetry service.
+ */
+ KAFKA,
+
+ /**
+ * Indicates GRPC telemetry service.
+ */
+ GRPC,
+
+ /**
+ * Indicates REST telemetry service.
+ */
+ REST,
+
+ /**
+ * Indicates InfluxDB telemetry service.
+ */
+ INFLUXDB,
+
+ /**
+ * Indicates prometheus telemetry service.
+ */
+ PROMETHEUS,
+
+ /**
+ * Indicates unknown telemetry service.
+ */
+ UNKNOWN
+ }
+
+ /**
* Checks whether the telemetry service is running or not.
*
* @return telemetry service running status
*/
boolean isRunning();
+
+ /**
+ * Obtains the service type.
+ *
+ * @return service type
+ */
+ ServiceType type();
}
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/PrometheusTelemetryConfigService.java b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/config/TelemetryConfigProperties.java
similarity index 63%
copy from apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/PrometheusTelemetryConfigService.java
copy to apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/config/TelemetryConfigProperties.java
index 4e115de..d3ca479 100644
--- a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/PrometheusTelemetryConfigService.java
+++ b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/config/TelemetryConfigProperties.java
@@ -13,10 +13,23 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.onosproject.openstacktelemetry.api;
+package org.onosproject.openstacktelemetry.api.config;
/**
- * Configuration service API for publishing openstack telemetry through Prometheus producer.
+ * An interface for telemetry config properties.
*/
-public interface PrometheusTelemetryConfigService extends TelemetryConfigService {
+public interface TelemetryConfigProperties {
+
+ /**
+ * Creates a telemetry config properties builder.
+ *
+ * @return builder
+ */
+ Builder createBuilder();
+
+ /**
+ * Builder interface.
+ */
+ interface Builder {
+ }
}