diff --git a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/DefaultTelemetryConfig.java b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/DefaultTelemetryConfig.java
index 02c1e84..cbad8a0 100644
--- a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/DefaultTelemetryConfig.java
+++ b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/DefaultTelemetryConfig.java
@@ -41,7 +41,7 @@
 
     private final String manufacturer;
     private final String swVersion;
-    private final boolean enabled;
+    private final Status status;
 
     private final Map<String, String> properties;
 
@@ -53,20 +53,20 @@
      * @param parents       optional parent configurations
      * @param manufacturer  off-platform application manufacturer
      * @param swVersion     off-platform application software version
-     * @param enabled       service enable flag
+     * @param status        service status
      * @param properties    properties for telemetry configuration
      */
     public DefaultTelemetryConfig(String name, ConfigType type,
                                   List<TelemetryConfig> parents,
                                   String manufacturer, String swVersion,
-                                  boolean enabled, Map<String, String> properties) {
+                                  Status status, Map<String, String> properties) {
         this.name = checkNotNull(name, "Name cannot be null");
         this.type = checkNotNull(type, "type cannot be null");
         this.parents = parents == null ? ImmutableList.of() : ImmutableList.copyOf(parents);
         this.manufacturer = checkNotNull(manufacturer, "Manufacturer cannot be null");
         this.swVersion = checkNotNull(swVersion, "SW version cannot be null");
         this.properties = copyOf(checkNotNull(properties, "Properties cannot be null"));
-        this.enabled = enabled;
+        this.status = checkNotNull(status, "status cannot be null");
     }
 
     @Override
@@ -99,8 +99,8 @@
     }
 
     @Override
-    public boolean enabled() {
-        return enabled;
+    public Status status() {
+        return status;
     }
 
     @Override
@@ -155,20 +155,20 @@
 
         return new DefaultTelemetryConfig(name, type,
                 !completeParents.isEmpty() ? completeParents : other.parents(),
-                manufacturer, swVersion, enabled, properties.build());
+                manufacturer, swVersion, status, properties.build());
     }
 
     @Override
     public TelemetryConfig updateProperties(Map<String, String> properties) {
 
         return new DefaultTelemetryConfig(name, type, parents, manufacturer,
-                swVersion, enabled, properties);
+                swVersion, status, properties);
     }
 
     @Override
-    public TelemetryConfig updateEnabled(boolean enabled) {
+    public TelemetryConfig updateStatus(Status status) {
         return new DefaultTelemetryConfig(name, type, parents, manufacturer,
-                swVersion, enabled, properties);
+                swVersion, status, properties);
     }
 
     @Override
@@ -189,7 +189,7 @@
                 .add("parents", parents)
                 .add("manufacturer", manufacturer)
                 .add("swVersion", swVersion)
-                .add("enabled", enabled)
+                .add("status", status)
                 .add("properties", properties)
                 .toString();
     }
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 63e0c3f..98b580d 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
@@ -24,8 +24,9 @@
      * Prepares and launches the telemetry producer.
      *
      * @param name telemetry service name
+     * @return true if the service is successfully started, false otherwise
      */
-    void start(String name);
+    boolean start(String name);
 
     /**
      * Terminates the telemetry producer.
@@ -38,8 +39,9 @@
      * Restarts the telemetry producer.
      *
      * @param name telemetry service name
+     * @return true if the service is successfully restarted, false otherwise
      */
-    void restart(String name);
+    boolean restart(String name);
 
     /**
      * Launches all telemetry services.
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
index 3f22437..f482026 100644
--- 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
@@ -47,7 +47,11 @@
         /**
          * Signifies that a telemetry service is disabled.
          */
-        SERVICE_DISABLED
+        SERVICE_DISABLED,
+        /**
+         * Signifies that a telemetry service in a pending status due to previous error.
+         */
+        SERVICE_PENDING
     }
 
     /**
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 0e0b4b4..b760820 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
@@ -61,6 +61,28 @@
         UNKNOWN
     }
 
+    enum Status {
+        /**
+         * Signifies that the service is in enable status.
+         */
+        ENABLED,
+
+        /**
+         * Signifies that the service is in disable status.
+         */
+        DISABLED,
+
+        /**
+         * Signifies that the service is in pending status.
+         */
+        PENDING,
+
+        /**
+         * Signifies that the service is in unknown status.
+         */
+        UNKNOWN,
+    }
+
     /**
      * Returns the telemetry configuration name.
      *
@@ -98,11 +120,11 @@
     String swVersion();
 
     /**
-     * Returns the service enable flag.
+     * Returns the service status.
      *
-     * @return enable flag
+     * @return service status
      */
-    boolean enabled();
+    Status status();
 
     /**
      * Returns the set of annotations as map of key/value properties.
@@ -153,10 +175,10 @@
     TelemetryConfig updateProperties(Map<String, String> properties);
 
     /**
-     * Obtains the cloned instance with updated enabled value.
+     * Obtains the cloned instance with updated status.
      *
-     * @param enabled service flag
+     * @param status service status
      * @return a cloned instance
      */
-    TelemetryConfig updateEnabled(boolean enabled);
+    TelemetryConfig updateStatus(Status status);
 }
diff --git a/apps/openstacktelemetry/api/src/test/java/org/onosproject/openstacktelemetry/api/DefaultTelemetryConfigTest.java b/apps/openstacktelemetry/api/src/test/java/org/onosproject/openstacktelemetry/api/DefaultTelemetryConfigTest.java
index 6734cfa..8318edd 100644
--- a/apps/openstacktelemetry/api/src/test/java/org/onosproject/openstacktelemetry/api/DefaultTelemetryConfigTest.java
+++ b/apps/openstacktelemetry/api/src/test/java/org/onosproject/openstacktelemetry/api/DefaultTelemetryConfigTest.java
@@ -26,6 +26,8 @@
 
 import static org.junit.Assert.assertEquals;
 import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutable;
+import static org.onosproject.openstacktelemetry.api.config.TelemetryConfig.Status.DISABLED;
+import static org.onosproject.openstacktelemetry.api.config.TelemetryConfig.Status.ENABLED;
 
 /**
  * Unit tests for DefaultTelemetryConfig class.
@@ -56,8 +58,8 @@
     private static final String PROP_2_VALUE_1 = "value21";
     private static final String PROP_2_VALUE_2 = "value22";
 
-    private static final boolean ENABLED_1 = true;
-    private static final boolean ENABLED_2 = false;
+    private static final TelemetryConfig.Status STATUS_1 = ENABLED;
+    private static final TelemetryConfig.Status STATUS_2 = DISABLED;
 
     private TelemetryConfig config1;
     private TelemetryConfig sameAsConfig1;
@@ -74,11 +76,11 @@
         PROP_2.put(PROP_2_KEY_2, PROP_2_VALUE_2);
 
         config1 = new DefaultTelemetryConfig(NAME_1, TYPE_1, null,
-                MANUFACTURER_1, SW_VERSION_1, ENABLED_1, PROP_1);
+                MANUFACTURER_1, SW_VERSION_1, STATUS_1, PROP_1);
         sameAsConfig1 = new DefaultTelemetryConfig(NAME_1, TYPE_1, null,
-                MANUFACTURER_1, SW_VERSION_1, ENABLED_1, PROP_1);
+                MANUFACTURER_1, SW_VERSION_1, STATUS_1, PROP_1);
         config2 = new DefaultTelemetryConfig(NAME_2, TYPE_2, null,
-                MANUFACTURER_2, SW_VERSION_2, ENABLED_2, PROP_2);
+                MANUFACTURER_2, SW_VERSION_2, STATUS_2, PROP_2);
     }
 
     /**
@@ -111,6 +113,6 @@
         assertEquals(config.manufacturer(), MANUFACTURER_1);
         assertEquals(config.swVersion(), SW_VERSION_1);
         assertEquals(config.properties(), PROP_1);
-        assertEquals(config.enabled(), ENABLED_1);
+        assertEquals(config.status(), STATUS_1);
     }
 }
diff --git a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/cli/TelemetryConfigListCommand.java b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/cli/TelemetryConfigListCommand.java
index 992c93a..58da487 100644
--- a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/cli/TelemetryConfigListCommand.java
+++ b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/cli/TelemetryConfigListCommand.java
@@ -48,7 +48,7 @@
         for (TelemetryConfig config : configs) {
             print(FORMAT, config.name(),
                     config.type(),
-                    config.enabled() ? "ENABLED" : "DISABLED",
+                    config.status().name(),
                     config.manufacturer(),
                     config.swVersion());
         }
diff --git a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/cli/TelemetryServiceDisableCommand.java b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/cli/TelemetryServiceDisableCommand.java
index 13524d6..17ba3f3 100644
--- a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/cli/TelemetryServiceDisableCommand.java
+++ b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/cli/TelemetryServiceDisableCommand.java
@@ -23,6 +23,9 @@
 import org.onosproject.openstacktelemetry.api.TelemetryConfigAdminService;
 import org.onosproject.openstacktelemetry.api.config.TelemetryConfig;
 
+import static java.lang.Thread.sleep;
+import static org.onosproject.openstacktelemetry.api.config.TelemetryConfig.Status.DISABLED;
+
 /**
  * Disables a telemetry service.
  */
@@ -36,7 +39,9 @@
     @Completion(TelemetryConfigNameCompleter.class)
     private String configName = null;
 
-    private static final String FORMAT = "Successfully disabled telemetry service %s!";
+    private static final long SLEEP_MS = 2000; // wait 2s for checking status
+    private static final String SUCCESS_FORMAT = "Successfully disabled telemetry service %s!";
+    private static final String FAIL_FORMAT = "Failed to disable telemetry service %s!";
     private static final String NO_ELEMENT =
             "No telemetry config is found with the given name";
 
@@ -50,9 +55,22 @@
             return;
         }
 
-        TelemetryConfig updatedConfig = config.updateEnabled(false);
+        TelemetryConfig updatedConfig = config.updateStatus(DISABLED);
 
         service.updateTelemetryConfig(updatedConfig);
-        print(FORMAT, config.name());
+
+        try {
+            sleep(SLEEP_MS);
+        } catch (InterruptedException e) {
+            error("Exception caused during status checking...");
+        }
+
+        TelemetryConfig finalConfig = service.getConfig(configName);
+
+        if (finalConfig.status() == DISABLED) {
+            print(SUCCESS_FORMAT, config.name());
+        } else {
+            print(FAIL_FORMAT, config.name());
+        }
     }
 }
diff --git a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/cli/TelemetryServiceEnableCommand.java b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/cli/TelemetryServiceEnableCommand.java
index e484b48..7f5eb6b 100644
--- a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/cli/TelemetryServiceEnableCommand.java
+++ b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/cli/TelemetryServiceEnableCommand.java
@@ -23,6 +23,9 @@
 import org.onosproject.openstacktelemetry.api.TelemetryConfigAdminService;
 import org.onosproject.openstacktelemetry.api.config.TelemetryConfig;
 
+import static java.lang.Thread.sleep;
+import static org.onosproject.openstacktelemetry.api.config.TelemetryConfig.Status.ENABLED;
+
 /**
  * Enables a telemetry service.
  */
@@ -36,7 +39,9 @@
     @Completion(TelemetryConfigNameCompleter.class)
     private String configName = null;
 
-    private static final String FORMAT = "Successfully enabled telemetry service %s!";
+    private static final long SLEEP_MS = 2000; // wait 2s for checking status
+    private static final String SUCCESS_FORMAT = "Successfully enabled telemetry service %s!";
+    private static final String FAIL_FORMAT = "Failed to enable telemetry service %s!";
     private static final String NO_ELEMENT =
             "No telemetry config is found with the given name";
 
@@ -50,9 +55,22 @@
             return;
         }
 
-        TelemetryConfig updatedConfig = config.updateEnabled(true);
+        TelemetryConfig updatedConfig = config.updateStatus(ENABLED);
 
         service.updateTelemetryConfig(updatedConfig);
-        print(FORMAT, config.name());
+
+        try {
+            sleep(SLEEP_MS);
+        } catch (InterruptedException e) {
+            error("Exception caused during status checking...");
+        }
+
+        TelemetryConfig finalConfig = service.getConfig(configName);
+
+        if (finalConfig.status() == ENABLED) {
+            print(SUCCESS_FORMAT, config.name());
+        } else {
+            print(FAIL_FORMAT, config.name());
+        }
     }
 }
diff --git a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/DistributedTelemetryConfigStore.java b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/DistributedTelemetryConfigStore.java
index d066d85..c35cfdf 100644
--- a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/DistributedTelemetryConfigStore.java
+++ b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/DistributedTelemetryConfigStore.java
@@ -54,6 +54,10 @@
 import static org.onosproject.openstacktelemetry.api.TelemetryConfigEvent.Type.CONFIG_UPDATED;
 import static org.onosproject.openstacktelemetry.api.TelemetryConfigEvent.Type.SERVICE_DISABLED;
 import static org.onosproject.openstacktelemetry.api.TelemetryConfigEvent.Type.SERVICE_ENABLED;
+import static org.onosproject.openstacktelemetry.api.TelemetryConfigEvent.Type.SERVICE_PENDING;
+import static org.onosproject.openstacktelemetry.api.config.TelemetryConfig.Status.DISABLED;
+import static org.onosproject.openstacktelemetry.api.config.TelemetryConfig.Status.ENABLED;
+import static org.onosproject.openstacktelemetry.api.config.TelemetryConfig.Status.PENDING;
 import static org.slf4j.LoggerFactory.getLogger;
 
 /**
@@ -76,6 +80,7 @@
                     .register(DefaultTelemetryConfigProvider.class)
                     .register(TelemetryConfig.class)
                     .register(TelemetryConfig.ConfigType.class)
+                    .register(TelemetryConfig.Status.class)
                     .register(DefaultTelemetryConfig.class)
                     .build();
 
@@ -210,15 +215,20 @@
             TelemetryConfig oldValue = event.oldValue().value();
             TelemetryConfig newValue = event.newValue().value();
 
-            if (oldValue.enabled() && !newValue.enabled()) {
+            if (oldValue.status() != DISABLED && newValue.status() == DISABLED) {
                 log.debug("Telemetry service {} has been disabled!", newValue.name());
                 notifyDelegate(new TelemetryConfigEvent(SERVICE_DISABLED, newValue));
             }
 
-            if (!oldValue.enabled() && newValue.enabled()) {
+            if (oldValue.status() != ENABLED && newValue.status() == ENABLED) {
                 log.debug("Telemetry service {} has been enabled!", newValue.name());
                 notifyDelegate(new TelemetryConfigEvent(SERVICE_ENABLED, newValue));
             }
+
+            if (oldValue.status() != PENDING && newValue.status() == PENDING) {
+                log.debug("Telemetry service {} was pended!", newValue.name());
+                notifyDelegate(new TelemetryConfigEvent(SERVICE_PENDING, newValue));
+            }
         }
     }
 }
diff --git a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/GrpcTelemetryManager.java b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/GrpcTelemetryManager.java
index 92e9aef..f508649 100644
--- a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/GrpcTelemetryManager.java
+++ b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/GrpcTelemetryManager.java
@@ -35,7 +35,9 @@
 
 import static org.onosproject.openstacktelemetry.api.Constants.GRPC_SCHEME;
 import static org.onosproject.openstacktelemetry.api.config.TelemetryConfig.ConfigType.GRPC;
+import static org.onosproject.openstacktelemetry.api.config.TelemetryConfig.Status.ENABLED;
 import static org.onosproject.openstacktelemetry.config.DefaultGrpcTelemetryConfig.fromTelemetryConfig;
+import static org.onosproject.openstacktelemetry.util.OpenstackTelemetryUtil.testConnectivity;
 
 /**
  * gRPC telemetry manager.
@@ -71,19 +73,29 @@
     }
 
     @Override
-    public void start(String name) {
+    public boolean start(String name) {
+        boolean success = false;
         TelemetryConfig config = telemetryConfigService.getConfig(name);
         GrpcTelemetryConfig grpcConfig = fromTelemetryConfig(config);
 
-        if (grpcConfig != null && !config.name().equals(GRPC_SCHEME) && config.enabled()) {
+        if (grpcConfig != null && !config.name().equals(GRPC_SCHEME) &&
+                config.status() == ENABLED) {
             ManagedChannel channel = ManagedChannelBuilder
                     .forAddress(grpcConfig.address(), grpcConfig.port())
                     .maxInboundMessageSize(grpcConfig.maxInboundMsgSize())
                     .usePlaintext(grpcConfig.usePlaintext())
                     .build();
 
-            channels.put(name, channel);
+            if (testConnectivity(grpcConfig.address(), grpcConfig.port())) {
+                channels.put(name, channel);
+                success = true;
+            } else {
+                log.warn("Unable to connect to {}:{}, " +
+                                "please check the connectivity manually",
+                                grpcConfig.address(), grpcConfig.port());
+            }
         }
+        return success;
     }
 
     @Override
@@ -97,9 +109,9 @@
     }
 
     @Override
-    public void restart(String name) {
+    public boolean restart(String name) {
         stop(name);
-        start(name);
+        return start(name);
     }
 
     @Override
diff --git a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/InfluxDbTelemetryManager.java b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/InfluxDbTelemetryManager.java
index 38dd2b8..b7c3985 100644
--- a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/InfluxDbTelemetryManager.java
+++ b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/InfluxDbTelemetryManager.java
@@ -41,7 +41,9 @@
 
 import static org.onosproject.openstacktelemetry.api.Constants.INFLUXDB_SCHEME;
 import static org.onosproject.openstacktelemetry.api.config.TelemetryConfig.ConfigType.INFLUXDB;
+import static org.onosproject.openstacktelemetry.api.config.TelemetryConfig.Status.ENABLED;
 import static org.onosproject.openstacktelemetry.config.DefaultInfluxDbTelemetryConfig.fromTelemetryConfig;
+import static org.onosproject.openstacktelemetry.util.OpenstackTelemetryUtil.testConnectivity;
 
 /**
  * InfluxDB telemetry manager.
@@ -168,29 +170,14 @@
         return !producers.isEmpty();
     }
 
-    private void createDB(InfluxDB producer, String database) {
-        if (producer.databaseExists(database)) {
-            log.debug("Database {} is already created", database);
-        } else {
-            producer.createDatabase(database);
-            log.debug("Database {} is created", database);
-        }
-    }
-
-    private String getTpPort(TpPort tpPort) {
-        if (tpPort == null) {
-            return "";
-        }
-        return tpPort.toString();
-    }
-
     @Override
-    public void start(String name) {
+    public boolean start(String name) {
+        boolean success = false;
         TelemetryConfig config = telemetryConfigService.getConfig(name);
         InfluxDbTelemetryConfig influxDbConfig = fromTelemetryConfig(config);
 
-        if (influxDbConfig != null &&
-                !config.name().equals(INFLUXDB_SCHEME) && config.enabled()) {
+        if (influxDbConfig != null && !config.name().equals(INFLUXDB_SCHEME) &&
+                config.status() == ENABLED) {
             StringBuilder influxDbServerBuilder = new StringBuilder();
             influxDbServerBuilder.append(INFLUX_PROTOCOL);
             influxDbServerBuilder.append(":");
@@ -199,12 +186,20 @@
             influxDbServerBuilder.append(":");
             influxDbServerBuilder.append(influxDbConfig.port());
 
-            InfluxDB producer = InfluxDBFactory.connect(influxDbServerBuilder.toString(),
-                    influxDbConfig.username(), influxDbConfig.password());
-            producers.put(name, producer);
-
-            createDB(producer, influxDbConfig.database());
+            if (testConnectivity(influxDbConfig.address(), influxDbConfig.port())) {
+                InfluxDB producer = InfluxDBFactory.connect(influxDbServerBuilder.toString(),
+                        influxDbConfig.username(), influxDbConfig.password());
+                producers.put(name, producer);
+                createDB(producer, influxDbConfig.database());
+                success = true;
+            } else {
+                log.warn("Unable to connect to {}:{}, " +
+                                "please check the connectivity manually",
+                                influxDbConfig.address(), influxDbConfig.port());
+            }
         }
+
+        return success;
     }
 
     @Override
@@ -218,15 +213,16 @@
     }
 
     @Override
-    public void restart(String name) {
+    public boolean restart(String name) {
         stop(name);
-        start(name);
+        return start(name);
     }
 
     @Override
     public void startAll() {
         telemetryConfigService.getConfigsByType(INFLUXDB).forEach(c -> start(c.name()));
-        log.info("InfluxDB producer has Started");    }
+        log.info("InfluxDB producer has Started");
+    }
 
     @Override
     public void stopAll() {
@@ -242,4 +238,21 @@
         stopAll();
         startAll();
     }
+
+
+    private void createDB(InfluxDB producer, String database) {
+        if (producer.databaseExists(database)) {
+            log.debug("Database {} is already created", database);
+        } else {
+            producer.createDatabase(database);
+            log.debug("Database {} is created", database);
+        }
+    }
+
+    private String getTpPort(TpPort tpPort) {
+        if (tpPort == null) {
+            return "";
+        }
+        return tpPort.toString();
+    }
 }
diff --git a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/KafkaTelemetryManager.java b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/KafkaTelemetryManager.java
index 06936ca..bbd8527 100644
--- a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/KafkaTelemetryManager.java
+++ b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/KafkaTelemetryManager.java
@@ -44,7 +44,9 @@
 
 import static org.onosproject.openstacktelemetry.api.Constants.KAFKA_SCHEME;
 import static org.onosproject.openstacktelemetry.api.config.TelemetryConfig.ConfigType.KAFKA;
+import static org.onosproject.openstacktelemetry.api.config.TelemetryConfig.Status.ENABLED;
 import static org.onosproject.openstacktelemetry.config.DefaultKafkaTelemetryConfig.fromTelemetryConfig;
+import static org.onosproject.openstacktelemetry.util.OpenstackTelemetryUtil.testConnectivity;
 
 /**
  * Kafka telemetry manager.
@@ -123,12 +125,13 @@
     }
 
     @Override
-    public void start(String name) {
+    public boolean start(String name) {
+        boolean success = false;
         TelemetryConfig config = telemetryConfigService.getConfig(name);
         KafkaTelemetryConfig kafkaConfig = fromTelemetryConfig(config);
 
-        if (kafkaConfig != null &&
-                !config.name().equals(KAFKA_SCHEME) && config.enabled()) {
+        if (kafkaConfig != null && !config.name().equals(KAFKA_SCHEME) &&
+                config.status() == ENABLED) {
             StringBuilder kafkaServerBuilder = new StringBuilder();
             kafkaServerBuilder.append(kafkaConfig.address());
             kafkaServerBuilder.append(":");
@@ -145,8 +148,17 @@
             prop.put(KEY_SERIALIZER, kafkaConfig.keySerializer());
             prop.put(VALUE_SERIALIZER, kafkaConfig.valueSerializer());
 
-            producers.put(name, new KafkaProducer<>(prop));
+            if (testConnectivity(kafkaConfig.address(), kafkaConfig.port())) {
+                producers.put(name, new KafkaProducer<>(prop));
+                success = true;
+            } else {
+                log.warn("Unable to connect to {}:{}, " +
+                            "please check the connectivity manually",
+                            kafkaConfig.address(), kafkaConfig.port());
+            }
         }
+
+        return success;
     }
 
     @Override
@@ -160,9 +172,9 @@
     }
 
     @Override
-    public void restart(String name) {
+    public boolean restart(String name) {
         stop(name);
-        start(name);
+        return start(name);
     }
 
     @Override
diff --git a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/OpenstackTelemetryManager.java b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/OpenstackTelemetryManager.java
index d49cdc0..3096eb9 100644
--- a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/OpenstackTelemetryManager.java
+++ b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/OpenstackTelemetryManager.java
@@ -25,9 +25,9 @@
 import org.onosproject.openstacktelemetry.api.PrometheusTelemetryService;
 import org.onosproject.openstacktelemetry.api.RestTelemetryService;
 import org.onosproject.openstacktelemetry.api.TelemetryAdminService;
+import org.onosproject.openstacktelemetry.api.TelemetryConfigAdminService;
 import org.onosproject.openstacktelemetry.api.TelemetryConfigEvent;
 import org.onosproject.openstacktelemetry.api.TelemetryConfigListener;
-import org.onosproject.openstacktelemetry.api.TelemetryConfigService;
 import org.osgi.service.component.annotations.Activate;
 import org.osgi.service.component.annotations.Component;
 import org.osgi.service.component.annotations.Deactivate;
@@ -40,6 +40,7 @@
 import java.util.Set;
 
 import static org.onosproject.openstacktelemetry.api.Constants.DEFAULT_INFLUXDB_MEASUREMENT;
+import static org.onosproject.openstacktelemetry.api.config.TelemetryConfig.Status.PENDING;
 
 /**
  * Openstack telemetry manager.
@@ -50,7 +51,7 @@
     private final Logger log = LoggerFactory.getLogger(getClass());
 
     @Reference(cardinality = ReferenceCardinality.MANDATORY)
-    protected TelemetryConfigService telemetryConfigService;
+    protected TelemetryConfigAdminService telemetryConfigService;
 
     private List<TelemetryAdminService> telemetryServices = Lists.newArrayList();
     private InternalTelemetryConfigListener
@@ -156,7 +157,12 @@
 
             switch (event.type()) {
                 case SERVICE_ENABLED:
-                    service.start(event.subject().name());
+                    if (!service.start(event.subject().name())) {
+                        // we enforce to make the service in PENDING status,
+                        // if we encountered a failure during service start
+                        telemetryConfigService.updateTelemetryConfig(
+                                event.subject().updateStatus(PENDING));
+                    }
                     break;
                 case SERVICE_DISABLED:
                     service.stop(event.subject().name());
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 3ccc02e..9f63b1d 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
@@ -43,6 +43,7 @@
 
 import static org.onosproject.openstacktelemetry.api.Constants.PROMETHEUS_SCHEME;
 import static org.onosproject.openstacktelemetry.api.config.TelemetryConfig.ConfigType.PROMETHEUS;
+import static org.onosproject.openstacktelemetry.api.config.TelemetryConfig.Status.ENABLED;
 import static org.onosproject.openstacktelemetry.config.DefaultPrometheusTelemetryConfig.fromTelemetryConfig;
 
 /**
@@ -207,55 +208,19 @@
         }
     }
 
-    private String[] getLabelValues(FlowInfo flowInfo) {
-        String[] labelValues = new String[LABEL_TAGS.length];
-
-        labelValues[Arrays.asList(LABEL_TAGS).indexOf(FLOW_TYPE)]
-                    = String.valueOf(flowInfo.flowType());
-        labelValues[Arrays.asList(LABEL_TAGS).indexOf(DEVICE_ID)]
-                    = flowInfo.deviceId().toString();
-        labelValues[Arrays.asList(LABEL_TAGS).indexOf(INPUT_INTERFACE_ID)]
-                    = String.valueOf(flowInfo.inputInterfaceId());
-        labelValues[Arrays.asList(LABEL_TAGS).indexOf(OUTPUT_INTERFACE_ID)]
-                    = String.valueOf(flowInfo.outputInterfaceId());
-        labelValues[Arrays.asList(LABEL_TAGS).indexOf(VXLAN_ID)]
-                    = String.valueOf(flowInfo.vxlanId());
-        labelValues[Arrays.asList(LABEL_TAGS).indexOf(SRC_IP)]
-                    = flowInfo.srcIp().toString();
-        labelValues[Arrays.asList(LABEL_TAGS).indexOf(DST_IP)]
-                    = flowInfo.dstIp().toString();
-        labelValues[Arrays.asList(LABEL_TAGS).indexOf(SRC_PORT)]
-                    = getTpPort(flowInfo.srcPort());
-        labelValues[Arrays.asList(LABEL_TAGS).indexOf(DST_PORT)]
-                    = getTpPort(flowInfo.dstPort());
-        labelValues[Arrays.asList(LABEL_TAGS).indexOf(PROTOCOL)]
-                    = String.valueOf(flowInfo.protocol());
-        if (flowInfo.vlanId() != null) {
-            labelValues[Arrays.asList(LABEL_TAGS).indexOf(VLAN_ID)]
-                    = flowInfo.vlanId().toString();
-        }
-        return labelValues;
-    }
-
-    private String getTpPort(TpPort tpPort) {
-        if (tpPort == null) {
-            return "";
-        }
-        return tpPort.toString();
-    }
-
     @Override
     public boolean isRunning() {
         return !prometheusExporters.isEmpty();
     }
 
     @Override
-    public void start(String name) {
+    public boolean start(String name) {
+        boolean success = false;
         TelemetryConfig config = telemetryConfigService.getConfig(name);
         PrometheusTelemetryConfig prometheusConfig = fromTelemetryConfig(config);
 
-        if (prometheusConfig != null &&
-                !config.name().equals(PROMETHEUS_SCHEME) && config.enabled()) {
+        if (prometheusConfig != null && !config.name().equals(PROMETHEUS_SCHEME) &&
+                config.status() == ENABLED) {
             try {
                 // TODO  Offer a 'Authentication'
                 Server prometheusExporter = new Server(prometheusConfig.port());
@@ -270,10 +235,14 @@
 
                 prometheusExporters.put(name, prometheusExporter);
 
+                success = true;
+
             } catch (Exception ex) {
-                log.warn("Exception: {}", ex);
+                log.warn("Failed to start prometheus server due to {}", ex);
             }
         }
+
+        return success;
     }
 
     @Override
@@ -290,8 +259,45 @@
     }
 
     @Override
-    public void restart(String name) {
+    public boolean restart(String name) {
         stop(name);
-        start(name);
+        return start(name);
+    }
+
+    private String[] getLabelValues(FlowInfo flowInfo) {
+        String[] labelValues = new String[LABEL_TAGS.length];
+
+        labelValues[Arrays.asList(LABEL_TAGS).indexOf(FLOW_TYPE)]
+                = String.valueOf(flowInfo.flowType());
+        labelValues[Arrays.asList(LABEL_TAGS).indexOf(DEVICE_ID)]
+                = flowInfo.deviceId().toString();
+        labelValues[Arrays.asList(LABEL_TAGS).indexOf(INPUT_INTERFACE_ID)]
+                = String.valueOf(flowInfo.inputInterfaceId());
+        labelValues[Arrays.asList(LABEL_TAGS).indexOf(OUTPUT_INTERFACE_ID)]
+                = String.valueOf(flowInfo.outputInterfaceId());
+        labelValues[Arrays.asList(LABEL_TAGS).indexOf(VXLAN_ID)]
+                = String.valueOf(flowInfo.vxlanId());
+        labelValues[Arrays.asList(LABEL_TAGS).indexOf(SRC_IP)]
+                = flowInfo.srcIp().toString();
+        labelValues[Arrays.asList(LABEL_TAGS).indexOf(DST_IP)]
+                = flowInfo.dstIp().toString();
+        labelValues[Arrays.asList(LABEL_TAGS).indexOf(SRC_PORT)]
+                = getTpPort(flowInfo.srcPort());
+        labelValues[Arrays.asList(LABEL_TAGS).indexOf(DST_PORT)]
+                = getTpPort(flowInfo.dstPort());
+        labelValues[Arrays.asList(LABEL_TAGS).indexOf(PROTOCOL)]
+                = String.valueOf(flowInfo.protocol());
+        if (flowInfo.vlanId() != null) {
+            labelValues[Arrays.asList(LABEL_TAGS).indexOf(VLAN_ID)]
+                    = flowInfo.vlanId().toString();
+        }
+        return labelValues;
+    }
+
+    private String getTpPort(TpPort tpPort) {
+        if (tpPort == null) {
+            return "";
+        }
+        return tpPort.toString();
     }
 }
diff --git a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/RestTelemetryManager.java b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/RestTelemetryManager.java
index f5641bd..e73a724 100644
--- a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/RestTelemetryManager.java
+++ b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/RestTelemetryManager.java
@@ -40,7 +40,9 @@
 
 import static org.onosproject.openstacktelemetry.api.Constants.REST_SCHEME;
 import static org.onosproject.openstacktelemetry.api.config.TelemetryConfig.ConfigType.REST;
+import static org.onosproject.openstacktelemetry.api.config.TelemetryConfig.Status.ENABLED;
 import static org.onosproject.openstacktelemetry.config.DefaultRestTelemetryConfig.fromTelemetryConfig;
+import static org.onosproject.openstacktelemetry.util.OpenstackTelemetryUtil.testConnectivity;
 
 /**
  * REST telemetry manager.
@@ -130,12 +132,13 @@
     }
 
     @Override
-    public void start(String name) {
+    public boolean start(String name) {
+        boolean success = false;
         TelemetryConfig config = telemetryConfigService.getConfig(name);
         RestTelemetryConfig restConfig = fromTelemetryConfig(config);
 
-        if (restConfig != null &&
-                !config.name().equals(REST_SCHEME) && config.enabled()) {
+        if (restConfig != null && !config.name().equals(REST_SCHEME) &&
+                config.status() == ENABLED) {
             StringBuilder restServerBuilder = new StringBuilder();
             restServerBuilder.append(PROTOCOL);
             restServerBuilder.append(":");
@@ -145,13 +148,23 @@
             restServerBuilder.append(restConfig.port());
             restServerBuilder.append("/");
 
-            Client client = ClientBuilder.newBuilder().build();
+            if (testConnectivity(restConfig.address(), restConfig.port())) {
+                Client client = ClientBuilder.newBuilder().build();
 
-            WebTarget target = client.target(
-                    restServerBuilder.toString()).path(restConfig.endpoint());
+                WebTarget target = client.target(
+                        restServerBuilder.toString()).path(restConfig.endpoint());
 
-            targets.put(config.name(), target);
+                targets.put(config.name(), target);
+
+                success = true;
+            } else {
+                log.warn("Unable to connect to {}:{}, " +
+                                "please check the connectivity manually",
+                                restConfig.address(), restConfig.port());
+            }
         }
+
+        return success;
     }
 
     @Override
@@ -165,8 +178,8 @@
     }
 
     @Override
-    public void restart(String name) {
+    public boolean restart(String name) {
         stop(name);
-        start(name);
+        return start(name);
     }
 }
diff --git a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/TelemetryConfigManager.java b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/TelemetryConfigManager.java
index 9832ad3..bb8b305 100644
--- a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/TelemetryConfigManager.java
+++ b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/TelemetryConfigManager.java
@@ -84,6 +84,7 @@
                     .register(DefaultTelemetryConfigProvider.class)
                     .register(TelemetryConfig.class)
                     .register(TelemetryConfig.ConfigType.class)
+                    .register(TelemetryConfig.Status.class)
                     .register(DefaultTelemetryConfig.class)
                     .build();
 
diff --git a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/XmlTelemetryConfigLoader.java b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/XmlTelemetryConfigLoader.java
index c9c6e9f..d382526 100644
--- a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/XmlTelemetryConfigLoader.java
+++ b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/XmlTelemetryConfigLoader.java
@@ -36,7 +36,6 @@
 import static org.onosproject.openstacktelemetry.api.config.TelemetryConfig.ConfigType.KAFKA;
 import static org.onosproject.openstacktelemetry.api.config.TelemetryConfig.ConfigType.PROMETHEUS;
 import static org.onosproject.openstacktelemetry.api.config.TelemetryConfig.ConfigType.REST;
-import static org.onosproject.openstacktelemetry.api.config.TelemetryConfig.ConfigType.UNKNOWN;
 
 /**
  * Utility capable of reading telemetry configuration XML resources and producing
@@ -61,14 +60,12 @@
 
     private static final String PROPERTY = "property";
 
-    private static final String TRUE = "true";
-
     private static final String NAME = "[@name]";
     private static final String TYPE = "[@type]";
     private static final String EXTENDS = "[@extends]";
     private static final String MFG = "[@manufacturer]";
     private static final String SW = "[@swVersion]";
-    private static final String ENABLED = "[@enabled]";
+    private static final String STATUS = "[@status]";
 
     private Map<String, TelemetryConfig> configs = Maps.newHashMap();
 
@@ -148,9 +145,9 @@
         String swVersion = telemetryCfg.getString(SW, getParentAttribute(parents, SW));
 
         // note that we do not inherits enabled property from parent
-        String enabledStr = telemetryCfg.getString(ENABLED);
-
-        boolean enabled = enabledStr != null && enabledStr.equalsIgnoreCase(TRUE);
+        String statusStr = telemetryCfg.getString(STATUS);
+        TelemetryConfig.Status status =
+                statusStr == null ? TelemetryConfig.Status.UNKNOWN : status(statusStr);
 
         TelemetryConfig.ConfigType type = type(typeStr);
 
@@ -159,7 +156,7 @@
         }
 
         return new DefaultTelemetryConfig(name, type, parents, manufacturer,
-                swVersion, enabled, parseProperties(parents, telemetryCfg));
+                swVersion, status, parseProperties(parents, telemetryCfg));
     }
 
     private TelemetryConfig.ConfigType type(String typeStr) {
@@ -176,7 +173,7 @@
                 return PROMETHEUS;
             case "UNKNOWN":
             default:
-                return UNKNOWN;
+                return TelemetryConfig.ConfigType.UNKNOWN;
         }
     }
 
@@ -224,4 +221,17 @@
 
         return properties.build();
     }
+
+    private TelemetryConfig.Status status(String status) {
+        switch (status.toUpperCase()) {
+            case "ENABLED" :
+                return TelemetryConfig.Status.ENABLED;
+            case "DISABLED" :
+                return TelemetryConfig.Status.DISABLED;
+            case "PENDING" :
+                return TelemetryConfig.Status.PENDING;
+            default:
+                return TelemetryConfig.Status.UNKNOWN;
+        }
+    }
 }
diff --git a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/util/OpenstackTelemetryUtil.java b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/util/OpenstackTelemetryUtil.java
index 39b1fdb..afb7365 100644
--- a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/util/OpenstackTelemetryUtil.java
+++ b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/util/OpenstackTelemetryUtil.java
@@ -19,6 +19,10 @@
 import org.onlab.packet.IPv4;
 import org.onosproject.cfg.ConfigProperty;
 
+import java.io.IOException;
+import java.net.InetSocketAddress;
+import java.net.Socket;
+import java.net.SocketAddress;
 import java.util.Dictionary;
 import java.util.Optional;
 import java.util.Set;
@@ -34,6 +38,7 @@
     private static final String PROTOCOL_NAME_UDP = "udp";
     private static final String PROTOCOL_NAME_ANY = "any";
     private static final int ARBITRARY_PROTOCOL = 0x0;
+    private static final int TIMEOUT = 2000;
 
     /**
      * Prevents object instantiation from external.
@@ -110,4 +115,26 @@
                 return PROTOCOL_NAME_ANY;
         }
     }
+
+    /**
+     * Tests the connectivity with the given address and port.
+     *
+     * @param address address
+     * @param port port number
+     * @return true if the given address and port is accessible, false otherwise
+     */
+    public static boolean testConnectivity(String address, int port) {
+
+        boolean isConnected = false;
+        SocketAddress socketAddress = new InetSocketAddress(address, port);
+        Socket socket = new Socket();
+        try {
+            socket.connect(socketAddress, TIMEOUT);
+            socket.close();
+            isConnected = true;
+        } catch (IOException ignored) {
+        }
+
+        return isConnected;
+    }
 }
diff --git a/apps/openstacktelemetry/app/src/main/resources/org/onosproject/openstacktelemetry/impl/influxdb-configs.xml b/apps/openstacktelemetry/app/src/main/resources/org/onosproject/openstacktelemetry/impl/influxdb-configs.xml
index cf3729a..75096ba 100644
--- a/apps/openstacktelemetry/app/src/main/resources/org/onosproject/openstacktelemetry/impl/influxdb-configs.xml
+++ b/apps/openstacktelemetry/app/src/main/resources/org/onosproject/openstacktelemetry/impl/influxdb-configs.xml
@@ -22,13 +22,13 @@
         <property name="password">onos</property>
     </config>
     <config name="sona-influxdb-connector-1" manufacturer="SK Telecom"
-            swVersion="1.0" extends="influxdb" enabled="false">
+            swVersion="1.0" extends="influxdb" status="disabled">
         <property name="database">ost</property>
         <property name="measurement">sonaflow</property>
         <property name="enableBatch">true</property>
     </config>
     <config name="sona-influxdb-connector-2" manufacturer="SK Telecom"
-            swVersion="1.0" extends="influxdb" enabled="false">
+            swVersion="1.0" extends="influxdb" status="disabled">
         <property name="database">ost2</property>
         <property name="measurement">sonaflow</property>
         <property name="enableBatch">true</property>
diff --git a/apps/openstacktelemetry/app/src/main/resources/org/onosproject/openstacktelemetry/impl/kafka-configs.xml b/apps/openstacktelemetry/app/src/main/resources/org/onosproject/openstacktelemetry/impl/kafka-configs.xml
index 48623b6..e33b7f0 100644
--- a/apps/openstacktelemetry/app/src/main/resources/org/onosproject/openstacktelemetry/impl/kafka-configs.xml
+++ b/apps/openstacktelemetry/app/src/main/resources/org/onosproject/openstacktelemetry/impl/kafka-configs.xml
@@ -21,7 +21,7 @@
         <property name="retries">0</property>
     </config>
     <config name="tina-kafka-exporter" manufacturer="SK Telecom"
-            swVersion="1.0" extends="kafka" enabled="false">
+            swVersion="1.0" extends="kafka" status="disabled">
         <property name="batchSize">16384</property>
         <property name="lingerMs">1</property>
         <property name="memoryBuffer">33554432</property>
diff --git a/apps/openstacktelemetry/app/src/main/resources/org/onosproject/openstacktelemetry/impl/prometheus-configs.xml b/apps/openstacktelemetry/app/src/main/resources/org/onosproject/openstacktelemetry/impl/prometheus-configs.xml
index 0459f6a..af93d40 100644
--- a/apps/openstacktelemetry/app/src/main/resources/org/onosproject/openstacktelemetry/impl/prometheus-configs.xml
+++ b/apps/openstacktelemetry/app/src/main/resources/org/onosproject/openstacktelemetry/impl/prometheus-configs.xml
@@ -21,6 +21,6 @@
     </config>
 
     <config name="sona-prometheus-exporter" manufacturer="SK Telecom"
-            swVersion="1.0" extends="prometheus" enabled="false">
+            swVersion="1.0" extends="prometheus" status="disabled">
     </config>
 </configs>
\ No newline at end of file
diff --git a/apps/openstacktelemetry/app/src/main/resources/org/onosproject/openstacktelemetry/impl/rest-configs.xml b/apps/openstacktelemetry/app/src/main/resources/org/onosproject/openstacktelemetry/impl/rest-configs.xml
index ca1dc57..6364049 100644
--- a/apps/openstacktelemetry/app/src/main/resources/org/onosproject/openstacktelemetry/impl/rest-configs.xml
+++ b/apps/openstacktelemetry/app/src/main/resources/org/onosproject/openstacktelemetry/impl/rest-configs.xml
@@ -21,7 +21,7 @@
         <property name="requestMediaType">application/json</property>
         <property name="responseMediaType">application/json</property>
     </config>
-    <config name="rest-connector" swVersion="1.0" extends="rest" enabled="false">
+    <config name="rest-connector" swVersion="1.0" extends="rest" status="disabled">
         <property name="endpoint">telemetry</property>
         <property name="method">POST</property>
     </config>
diff --git a/apps/openstacktelemetry/app/src/test/java/org/onosproject/openstacktelemetry/config/DefaultGrpcTelemetryConfigTest.java b/apps/openstacktelemetry/app/src/test/java/org/onosproject/openstacktelemetry/config/DefaultGrpcTelemetryConfigTest.java
index 89fc1d0..e4dc795 100644
--- a/apps/openstacktelemetry/app/src/test/java/org/onosproject/openstacktelemetry/config/DefaultGrpcTelemetryConfigTest.java
+++ b/apps/openstacktelemetry/app/src/test/java/org/onosproject/openstacktelemetry/config/DefaultGrpcTelemetryConfigTest.java
@@ -31,6 +31,7 @@
 import static org.hamcrest.Matchers.is;
 import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutable;
 import static org.onosproject.openstacktelemetry.api.config.TelemetryConfig.ConfigType.GRPC;
+import static org.onosproject.openstacktelemetry.api.config.TelemetryConfig.Status.ENABLED;
 import static org.onosproject.openstacktelemetry.config.DefaultGrpcTelemetryConfig.ADDRESS;
 import static org.onosproject.openstacktelemetry.config.DefaultGrpcTelemetryConfig.MAX_INBOUND_MSG_SIZE;
 import static org.onosproject.openstacktelemetry.config.DefaultGrpcTelemetryConfig.PORT;
@@ -146,7 +147,7 @@
         props.put(MAX_INBOUND_MSG_SIZE, String.valueOf(MSG_SIZE_1));
         props.put(USE_PLAINTEXT, String.valueOf(USE_PLAIN_TEXT_1));
         TelemetryConfig config = new DefaultTelemetryConfig(DUMMY, GRPC,
-                ImmutableList.of(), DUMMY, DUMMY, false, props);
+                ImmutableList.of(), DUMMY, DUMMY, ENABLED, props);
 
         GrpcTelemetryConfig grpcConfig = fromTelemetryConfig(config);
         assertThat(grpcConfig.address(), is(IP_ADDRESS_1));
diff --git a/apps/openstacktelemetry/app/src/test/java/org/onosproject/openstacktelemetry/config/DefaultInfluxDbTelemetryConfigTest.java b/apps/openstacktelemetry/app/src/test/java/org/onosproject/openstacktelemetry/config/DefaultInfluxDbTelemetryConfigTest.java
index 9f84015..699f410 100644
--- a/apps/openstacktelemetry/app/src/test/java/org/onosproject/openstacktelemetry/config/DefaultInfluxDbTelemetryConfigTest.java
+++ b/apps/openstacktelemetry/app/src/test/java/org/onosproject/openstacktelemetry/config/DefaultInfluxDbTelemetryConfigTest.java
@@ -31,6 +31,7 @@
 import static org.hamcrest.Matchers.is;
 import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutable;
 import static org.onosproject.openstacktelemetry.api.config.TelemetryConfig.ConfigType.INFLUXDB;
+import static org.onosproject.openstacktelemetry.api.config.TelemetryConfig.Status.DISABLED;
 import static org.onosproject.openstacktelemetry.config.DefaultInfluxDbTelemetryConfig.ADDRESS;
 import static org.onosproject.openstacktelemetry.config.DefaultInfluxDbTelemetryConfig.DATABASE;
 import static org.onosproject.openstacktelemetry.config.DefaultInfluxDbTelemetryConfig.ENABLE_BATCH;
@@ -174,7 +175,7 @@
         props.put(MEASUREMENT, MEASUREMENT_1);
 
         TelemetryConfig config = new DefaultTelemetryConfig(DUMMY, INFLUXDB,
-                ImmutableList.of(), DUMMY, DUMMY, false, props);
+                ImmutableList.of(), DUMMY, DUMMY, DISABLED, props);
 
         InfluxDbTelemetryConfig influxDbConfig = fromTelemetryConfig(config);
         assertThat(influxDbConfig.address(), is(IP_ADDRESS_1));
diff --git a/apps/openstacktelemetry/app/src/test/java/org/onosproject/openstacktelemetry/config/DefaultKafkaTelemetryConfigTest.java b/apps/openstacktelemetry/app/src/test/java/org/onosproject/openstacktelemetry/config/DefaultKafkaTelemetryConfigTest.java
index 999bcf1..d70626c 100644
--- a/apps/openstacktelemetry/app/src/test/java/org/onosproject/openstacktelemetry/config/DefaultKafkaTelemetryConfigTest.java
+++ b/apps/openstacktelemetry/app/src/test/java/org/onosproject/openstacktelemetry/config/DefaultKafkaTelemetryConfigTest.java
@@ -31,6 +31,7 @@
 import static org.hamcrest.Matchers.is;
 import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutable;
 import static org.onosproject.openstacktelemetry.api.config.TelemetryConfig.ConfigType.KAFKA;
+import static org.onosproject.openstacktelemetry.api.config.TelemetryConfig.Status.DISABLED;
 import static org.onosproject.openstacktelemetry.config.DefaultKafkaTelemetryConfig.ADDRESS;
 import static org.onosproject.openstacktelemetry.config.DefaultKafkaTelemetryConfig.BATCH_SIZE;
 import static org.onosproject.openstacktelemetry.config.DefaultKafkaTelemetryConfig.CODEC;
@@ -215,7 +216,7 @@
         props.put(CODEC, CODEC_1);
 
         TelemetryConfig config = new DefaultTelemetryConfig(DUMMY, KAFKA,
-                ImmutableList.of(), DUMMY, DUMMY, false, props);
+                ImmutableList.of(), DUMMY, DUMMY, DISABLED, props);
 
         KafkaTelemetryConfig kafkaConfig = fromTelemetryConfig(config);
         assertThat(kafkaConfig.address(), is(IP_ADDRESS_1));
diff --git a/apps/openstacktelemetry/app/src/test/java/org/onosproject/openstacktelemetry/config/DefaultPrometheusTelemetryConfigTest.java b/apps/openstacktelemetry/app/src/test/java/org/onosproject/openstacktelemetry/config/DefaultPrometheusTelemetryConfigTest.java
index 4a89b74..1ebd53d 100644
--- a/apps/openstacktelemetry/app/src/test/java/org/onosproject/openstacktelemetry/config/DefaultPrometheusTelemetryConfigTest.java
+++ b/apps/openstacktelemetry/app/src/test/java/org/onosproject/openstacktelemetry/config/DefaultPrometheusTelemetryConfigTest.java
@@ -31,6 +31,7 @@
 import static org.hamcrest.Matchers.is;
 import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutable;
 import static org.onosproject.openstacktelemetry.api.config.TelemetryConfig.ConfigType.PROMETHEUS;
+import static org.onosproject.openstacktelemetry.api.config.TelemetryConfig.Status.DISABLED;
 import static org.onosproject.openstacktelemetry.config.DefaultPrometheusTelemetryConfig.ADDRESS;
 import static org.onosproject.openstacktelemetry.config.DefaultPrometheusTelemetryConfig.PORT;
 import static org.onosproject.openstacktelemetry.config.DefaultPrometheusTelemetryConfig.fromTelemetryConfig;
@@ -128,7 +129,7 @@
         props.put(PORT, String.valueOf(PORT_1));
 
         TelemetryConfig config = new DefaultTelemetryConfig(DUMMY, PROMETHEUS,
-                ImmutableList.of(), DUMMY, DUMMY, false, props);
+                ImmutableList.of(), DUMMY, DUMMY, DISABLED, props);
 
         PrometheusTelemetryConfig prometheusConfig = fromTelemetryConfig(config);
         assertThat(prometheusConfig.address(), is(IP_ADDRESS_1));
diff --git a/apps/openstacktelemetry/app/src/test/java/org/onosproject/openstacktelemetry/config/DefaultRestTelemetryConfigTest.java b/apps/openstacktelemetry/app/src/test/java/org/onosproject/openstacktelemetry/config/DefaultRestTelemetryConfigTest.java
index 28b8465..0cac7ae 100644
--- a/apps/openstacktelemetry/app/src/test/java/org/onosproject/openstacktelemetry/config/DefaultRestTelemetryConfigTest.java
+++ b/apps/openstacktelemetry/app/src/test/java/org/onosproject/openstacktelemetry/config/DefaultRestTelemetryConfigTest.java
@@ -31,6 +31,7 @@
 import static org.hamcrest.Matchers.is;
 import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutable;
 import static org.onosproject.openstacktelemetry.api.config.TelemetryConfig.ConfigType.REST;
+import static org.onosproject.openstacktelemetry.api.config.TelemetryConfig.Status.DISABLED;
 import static org.onosproject.openstacktelemetry.config.DefaultRestTelemetryConfig.ADDRESS;
 import static org.onosproject.openstacktelemetry.config.DefaultRestTelemetryConfig.ENDPOINT;
 import static org.onosproject.openstacktelemetry.config.DefaultRestTelemetryConfig.METHOD;
@@ -161,7 +162,7 @@
         props.put(RESPONSE_MEDIA_TYPE, RESPONSE_MEDIA_TYPE_1);
 
         TelemetryConfig config = new DefaultTelemetryConfig(DUMMY, REST,
-                ImmutableList.of(), DUMMY, DUMMY, false, props);
+                ImmutableList.of(), DUMMY, DUMMY, DISABLED, props);
         RestTelemetryConfig restConfig = DefaultRestTelemetryConfig.fromTelemetryConfig(config);
         assertThat(restConfig.address(), is(IP_ADDRESS_1));
         assertThat(restConfig.port(), is(PORT_1));
diff --git a/apps/openstacktelemetry/app/src/test/java/org/onosproject/openstacktelemetry/impl/DistributedTelemetryConfigStoreTest.java b/apps/openstacktelemetry/app/src/test/java/org/onosproject/openstacktelemetry/impl/DistributedTelemetryConfigStoreTest.java
index 85f6b41..4b03da8 100644
--- a/apps/openstacktelemetry/app/src/test/java/org/onosproject/openstacktelemetry/impl/DistributedTelemetryConfigStoreTest.java
+++ b/apps/openstacktelemetry/app/src/test/java/org/onosproject/openstacktelemetry/impl/DistributedTelemetryConfigStoreTest.java
@@ -32,6 +32,8 @@
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
+import static org.onosproject.openstacktelemetry.api.config.TelemetryConfig.Status.DISABLED;
+import static org.onosproject.openstacktelemetry.api.config.TelemetryConfig.Status.ENABLED;
 
 /**
  * Distributed TelemetryConfig store test suite.
@@ -62,8 +64,8 @@
     private static final String PROP_2_VALUE_1 = "value21";
     private static final String PROP_2_VALUE_2 = "value22";
 
-    private static final boolean ENABLED_1 = true;
-    private static final boolean ENABLED_2 = false;
+    private static final TelemetryConfig.Status STATUS_1 = ENABLED;
+    private static final TelemetryConfig.Status STATUS_2 = DISABLED;
 
     private TelemetryConfig config1;
     private TelemetryConfig config2;
@@ -132,8 +134,8 @@
         PROP_2.put(PROP_2_KEY_2, PROP_2_VALUE_2);
 
         config1 = new DefaultTelemetryConfig(NAME_1, TYPE_1, null,
-                MANUFACTURER_1, SW_VERSION_1, ENABLED_1, PROP_1);
+                MANUFACTURER_1, SW_VERSION_1, STATUS_1, PROP_1);
         config2 = new DefaultTelemetryConfig(NAME_2, TYPE_2, null,
-                MANUFACTURER_2, SW_VERSION_2, ENABLED_2, PROP_2);
+                MANUFACTURER_2, SW_VERSION_2, STATUS_2, PROP_2);
     }
 }
diff --git a/apps/openstacktelemetry/web/src/main/java/org/onosproject/openstacktelemetry/codec/rest/TelemetryConfigJsonCodec.java b/apps/openstacktelemetry/web/src/main/java/org/onosproject/openstacktelemetry/codec/rest/TelemetryConfigJsonCodec.java
index 8c0a6e3..d609552 100644
--- a/apps/openstacktelemetry/web/src/main/java/org/onosproject/openstacktelemetry/codec/rest/TelemetryConfigJsonCodec.java
+++ b/apps/openstacktelemetry/web/src/main/java/org/onosproject/openstacktelemetry/codec/rest/TelemetryConfigJsonCodec.java
@@ -40,7 +40,7 @@
     private static final String TYPE = "type";
     private static final String MANUFACTURER = "manufacturer";
     private static final String SW_VERSION = "swVersion";
-    private static final String ENABLED = "enabled";
+    private static final String STATUS = "status";
     private static final String PROPS = "props";
     private static final String KEY = "key";
     private static final String VALUE = "value";
@@ -56,7 +56,7 @@
                 .put(TYPE, config.type().name())
                 .put(MANUFACTURER, config.manufacturer())
                 .put(SW_VERSION, config.swVersion())
-                .put(ENABLED, config.enabled());
+                .put(STATUS, config.status().name());
 
         Map<String, String> props = config.properties();
         ArrayNode propsJson = context.mapper().createArrayNode();
@@ -94,9 +94,9 @@
         String swVersion = nullIsIllegal(json.get(SW_VERSION),
                 SW_VERSION + MISSING_MESSAGE).asText();
 
-        // parse enabled flag
-        boolean enabled = nullIsIllegal(json.get(ENABLED),
-                ENABLED + MISSING_MESSAGE).asBoolean();
+        // parse status
+        TelemetryConfig.Status status = status(nullIsIllegal(json.get(STATUS),
+                STATUS + MISSING_MESSAGE).asText());
 
         JsonNode propertiesJson = json.get(PROPS);
         Map<String, String> properties = Maps.newConcurrentMap();
@@ -109,7 +109,20 @@
         }
 
         return new DefaultTelemetryConfig(name, configType,
-                ImmutableList.of(), manufacturer, swVersion, enabled, properties);
+                ImmutableList.of(), manufacturer, swVersion, status, properties);
+    }
+
+    private TelemetryConfig.Status status(String status) {
+        switch (status.toUpperCase()) {
+            case "ENABLED" :
+                return TelemetryConfig.Status.ENABLED;
+            case "DISABLED" :
+                return TelemetryConfig.Status.DISABLED;
+            case "PENDING" :
+                return TelemetryConfig.Status.PENDING;
+            default:
+                return TelemetryConfig.Status.UNKNOWN;
+        }
     }
 
     private TelemetryConfig.ConfigType configType(String type) {
diff --git a/apps/openstacktelemetry/web/src/main/java/org/onosproject/openstacktelemetry/web/OpenstackTelemetryConfigWebResource.java b/apps/openstacktelemetry/web/src/main/java/org/onosproject/openstacktelemetry/web/OpenstackTelemetryConfigWebResource.java
index 7484d04..1ae30e0 100644
--- a/apps/openstacktelemetry/web/src/main/java/org/onosproject/openstacktelemetry/web/OpenstackTelemetryConfigWebResource.java
+++ b/apps/openstacktelemetry/web/src/main/java/org/onosproject/openstacktelemetry/web/OpenstackTelemetryConfigWebResource.java
@@ -38,6 +38,8 @@
 
 import static org.onlab.util.Tools.nullIsIllegal;
 import static org.onlab.util.Tools.nullIsNotFound;
+import static org.onosproject.openstacktelemetry.api.config.TelemetryConfig.Status.DISABLED;
+import static org.onosproject.openstacktelemetry.api.config.TelemetryConfig.Status.ENABLED;
 
 /**
  * Handles REST API call of openstack telemetry configuration.
@@ -175,7 +177,7 @@
             log.warn("There is no config found to enable for {}", configName);
             return Response.notModified().build();
         } else {
-            TelemetryConfig updatedConfig = config.updateEnabled(true);
+            TelemetryConfig updatedConfig = config.updateStatus(ENABLED);
             configService.updateTelemetryConfig(updatedConfig);
             return Response.ok().build();
         }
@@ -204,7 +206,7 @@
             log.warn("There is no config found to disable for {}", configName);
             return Response.notModified().build();
         } else {
-            TelemetryConfig updatedConfig = config.updateEnabled(false);
+            TelemetryConfig updatedConfig = config.updateStatus(DISABLED);
             configService.updateTelemetryConfig(updatedConfig);
             return Response.ok().build();
         }
diff --git a/apps/openstacktelemetry/web/src/test/java/org/onosproject/openstacktelemetry/codec/rest/TelemetryConfigCodecTest.java b/apps/openstacktelemetry/web/src/test/java/org/onosproject/openstacktelemetry/codec/rest/TelemetryConfigCodecTest.java
index 626aa02..70a1ea9 100644
--- a/apps/openstacktelemetry/web/src/test/java/org/onosproject/openstacktelemetry/codec/rest/TelemetryConfigCodecTest.java
+++ b/apps/openstacktelemetry/web/src/test/java/org/onosproject/openstacktelemetry/codec/rest/TelemetryConfigCodecTest.java
@@ -36,13 +36,13 @@
 import java.util.Map;
 
 import static junit.framework.TestCase.assertEquals;
-import static junit.framework.TestCase.assertTrue;
 import static org.easymock.EasyMock.createMock;
 import static org.easymock.EasyMock.expect;
 import static org.easymock.EasyMock.replay;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.notNullValue;
 import static org.onosproject.net.NetTestTools.APP_ID;
+import static org.onosproject.openstacktelemetry.api.config.TelemetryConfig.Status.ENABLED;
 import static org.onosproject.openstacktelemetry.codec.rest.TelemetryConfigJsonMatcher.matchesTelemetryConfig;
 
 /**
@@ -80,14 +80,14 @@
         TelemetryConfig.ConfigType type = TelemetryConfig.ConfigType.GRPC;
         String manufacturer = "grpc.io";
         String swVersion = "1.0";
-        boolean enabled = true;
+        TelemetryConfig.Status status = ENABLED;
 
         Map<String, String> properties = Maps.newConcurrentMap();
         properties.put("key1", "value1");
         properties.put("key2", "value2");
 
         TelemetryConfig config = new DefaultTelemetryConfig(name, type,
-                ImmutableList.of(), manufacturer, swVersion, enabled, properties);
+                ImmutableList.of(), manufacturer, swVersion, status, properties);
 
         ObjectNode configJson = telemetryConfigCodec.encode(config, context);
         assertThat(configJson, matchesTelemetryConfig(config));
@@ -104,7 +104,7 @@
         assertEquals(config.type().name(), "GRPC");
         assertEquals(config.manufacturer(), "grpc.io");
         assertEquals(config.swVersion(), "1.0");
-        assertTrue(config.enabled());
+        assertEquals(config.status().name(), "ENABLED");
 
         config.properties().forEach((k, v) -> {
             if (k.equals("address")) {
diff --git a/apps/openstacktelemetry/web/src/test/java/org/onosproject/openstacktelemetry/codec/rest/TelemetryConfigJsonMatcher.java b/apps/openstacktelemetry/web/src/test/java/org/onosproject/openstacktelemetry/codec/rest/TelemetryConfigJsonMatcher.java
index 9bc50a2..7f6ff95 100644
--- a/apps/openstacktelemetry/web/src/test/java/org/onosproject/openstacktelemetry/codec/rest/TelemetryConfigJsonMatcher.java
+++ b/apps/openstacktelemetry/web/src/test/java/org/onosproject/openstacktelemetry/codec/rest/TelemetryConfigJsonMatcher.java
@@ -32,7 +32,7 @@
     private static final String TYPE = "type";
     private static final String MANUFACTURER = "manufacturer";
     private static final String SW_VERSION = "swVersion";
-    private static final String ENABLED = "enabled";
+    private static final String STATUS = "status";
     private static final String PROPS = "props";
     private static final String KEY = "key";
     private static final String VALUE = "value";
@@ -76,11 +76,11 @@
             return false;
         }
 
-        // check enabled
-        JsonNode jsonEnabled = jsonNode.get(ENABLED);
-        boolean enabled = telemetryConfig.enabled();
-        if (jsonEnabled == null || jsonEnabled.asBoolean() != enabled) {
-            description.appendText("Enabled was " + jsonEnabled);
+        // check status
+        JsonNode jsonStatus = jsonNode.get(STATUS);
+        TelemetryConfig.Status status = telemetryConfig.status();
+        if (jsonStatus == null || !jsonStatus.asText().equals(status.name())) {
+            description.appendText("Enabled was " + jsonStatus);
             return false;
         }
 
diff --git a/apps/openstacktelemetry/web/src/test/java/org/onosproject/openstacktelemetry/web/OpenstackTelemetryConfigWebResourceTest.java b/apps/openstacktelemetry/web/src/test/java/org/onosproject/openstacktelemetry/web/OpenstackTelemetryConfigWebResourceTest.java
index ff027bc..d36b6e6 100644
--- a/apps/openstacktelemetry/web/src/test/java/org/onosproject/openstacktelemetry/web/OpenstackTelemetryConfigWebResourceTest.java
+++ b/apps/openstacktelemetry/web/src/test/java/org/onosproject/openstacktelemetry/web/OpenstackTelemetryConfigWebResourceTest.java
@@ -39,6 +39,7 @@
 import static org.easymock.EasyMock.replay;
 import static org.easymock.EasyMock.verify;
 import static org.onosproject.openstacktelemetry.api.config.TelemetryConfig.ConfigType.GRPC;
+import static org.onosproject.openstacktelemetry.api.config.TelemetryConfig.Status.ENABLED;
 
 /**
  * Unit tests for openstack telemetry config REST API.
@@ -60,7 +61,7 @@
     private static final String PROP_VALUE_1 = "value11";
     private static final String PROP_VALUE_2 = "value12";
 
-    private static final boolean ENABLED = true;
+    private static final TelemetryConfig.Status STATUS = ENABLED;
 
     private final TelemetryConfigAdminService mockConfigAdminService =
             createMock(TelemetryConfigAdminService.class);
@@ -90,7 +91,7 @@
         PROP.put(PROP_KEY_2, PROP_VALUE_2);
 
         telemetryConfig = new DefaultTelemetryConfig(NAME, TYPE, null,
-                MANUFACTURER, SW_VERSION, ENABLED, PROP);
+                MANUFACTURER, SW_VERSION, STATUS, PROP);
     }
 
     /**
diff --git a/apps/openstacktelemetry/web/src/test/resources/org/onosproject/openstacktelemetry/codec/rest/TelemetryConfig.json b/apps/openstacktelemetry/web/src/test/resources/org/onosproject/openstacktelemetry/codec/rest/TelemetryConfig.json
index 681cad3..314d028 100644
--- a/apps/openstacktelemetry/web/src/test/resources/org/onosproject/openstacktelemetry/codec/rest/TelemetryConfig.json
+++ b/apps/openstacktelemetry/web/src/test/resources/org/onosproject/openstacktelemetry/codec/rest/TelemetryConfig.json
@@ -3,7 +3,7 @@
   "type": "GRPC",
   "manufacturer": "grpc.io",
   "swVersion": "1.0",
-  "enabled": true,
+  "status": "enabled",
   "props": [
     {
       "key": "address",
