Improve the telemetry service LCM granularity
Change-Id: I3d1b43b360883b0644af2341bdc21aeb4f603414
diff --git a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/PrometheusTelemetryManager.java b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/PrometheusTelemetryManager.java
index 7111fc0..3ccc02e 100644
--- a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/PrometheusTelemetryManager.java
+++ b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/PrometheusTelemetryManager.java
@@ -15,7 +15,7 @@
*/
package org.onosproject.openstacktelemetry.impl;
-import com.google.common.collect.Sets;
+import com.google.common.collect.Maps;
import io.prometheus.client.Counter;
import io.prometheus.client.Gauge;
import io.prometheus.client.exporter.MetricsServlet;
@@ -28,6 +28,7 @@
import org.onosproject.openstacktelemetry.api.PrometheusTelemetryAdminService;
import org.onosproject.openstacktelemetry.api.TelemetryConfigService;
import org.onosproject.openstacktelemetry.api.config.PrometheusTelemetryConfig;
+import org.onosproject.openstacktelemetry.api.config.TelemetryConfig;
import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Deactivate;
@@ -37,6 +38,7 @@
import org.slf4j.LoggerFactory;
import java.util.Arrays;
+import java.util.Map;
import java.util.Set;
import static org.onosproject.openstacktelemetry.api.Constants.PROMETHEUS_SCHEME;
@@ -51,7 +53,7 @@
private final Logger log = LoggerFactory.getLogger(getClass());
- private Set<Server> prometheusExporters = Sets.newConcurrentHashSet();
+ private Map<String, Server> prometheusExporters = Maps.newConcurrentMap();
private static final String FLOW_TYPE = "flowType";
private static final String DEVICE_ID = "deviceId";
@@ -149,44 +151,21 @@
@Deactivate
protected void deactivate() {
- stop();
+ stopAll();
openstackTelemetryService.removeTelemetryService(this);
log.info("Stopped");
}
@Override
- public void start() {
+ public void startAll() {
log.info("Prometheus exporter starts.");
- telemetryConfigService.getConfigsByType(PROMETHEUS).forEach(c -> {
- PrometheusTelemetryConfig prometheusConfig = fromTelemetryConfig(c);
-
- if (prometheusConfig != null &&
- !c.name().equals(PROMETHEUS_SCHEME) && c.enabled()) {
- try {
- // TODO Offer a 'Authentication'
- Server prometheusExporter = new Server(prometheusConfig.port());
- ServletContextHandler context = new ServletContextHandler();
- context.setContextPath("/");
- prometheusExporter.setHandler(context);
- context.addServlet(new ServletHolder(new MetricsServlet()), "/metrics");
-
- log.info("Prometheus server start");
-
- prometheusExporter.start();
-
- prometheusExporters.add(prometheusExporter);
-
- } catch (Exception ex) {
- log.warn("Exception: {}", ex);
- }
- }
- });
+ telemetryConfigService.getConfigsByType(PROMETHEUS).forEach(c -> start(c.name()));
}
@Override
- public void stop() {
- prometheusExporters.forEach(pe -> {
+ public void stopAll() {
+ prometheusExporters.values().forEach(pe -> {
try {
pe.stop();
} catch (Exception e) {
@@ -197,9 +176,9 @@
}
@Override
- public void restart() {
- stop();
- start();
+ public void restartAll() {
+ stopAll();
+ startAll();
}
@Override
@@ -269,4 +248,50 @@
public boolean isRunning() {
return !prometheusExporters.isEmpty();
}
+
+ @Override
+ public void start(String name) {
+ TelemetryConfig config = telemetryConfigService.getConfig(name);
+ PrometheusTelemetryConfig prometheusConfig = fromTelemetryConfig(config);
+
+ if (prometheusConfig != null &&
+ !config.name().equals(PROMETHEUS_SCHEME) && config.enabled()) {
+ try {
+ // TODO Offer a 'Authentication'
+ Server prometheusExporter = new Server(prometheusConfig.port());
+ ServletContextHandler context = new ServletContextHandler();
+ context.setContextPath("/");
+ prometheusExporter.setHandler(context);
+ context.addServlet(new ServletHolder(new MetricsServlet()), "/metrics");
+
+ log.info("Prometheus server start");
+
+ prometheusExporter.start();
+
+ prometheusExporters.put(name, prometheusExporter);
+
+ } catch (Exception ex) {
+ log.warn("Exception: {}", ex);
+ }
+ }
+ }
+
+ @Override
+ public void stop(String name) {
+ try {
+ Server pe = prometheusExporters.get(name);
+ if (pe != null) {
+ pe.stop();
+ prometheusExporters.remove(name);
+ }
+ } catch (Exception e) {
+ log.warn("Failed to stop prometheus server due to {}", e);
+ }
+ }
+
+ @Override
+ public void restart(String name) {
+ stop(name);
+ start(name);
+ }
}