ovs_events: Make dispatch link status configurable
authorMytnyk, VolodymyrX <volodymyrx.mytnyk@intel.com>
Tue, 14 Feb 2017 12:15:28 +0000 (12:15 +0000)
committerMytnyk, VolodymyrX <volodymyrx.mytnyk@intel.com>
Wed, 22 Feb 2017 11:25:39 +0000 (11:25 +0000)
Change-Id: Ib1853ff8caf57c6e33171e9d419af84c2ce69cae
Signed-off-by: Mytnyk, VolodymyrX <volodymyrx.mytnyk@intel.com>
ovs_events: Revert changing SendNotification default

Change-Id: I5e318e132937301aac355dcedaf3474a623f3853
Signed-off-by: Mytnyk, VolodymyrX <volodymyrx.mytnyk@intel.com>
src/collectd.conf.in
src/collectd.conf.pod
src/ovs_events.c

index ed2d549..e556779 100644 (file)
 #  Socket "/var/run/openvswitch/db.sock"
 #  Interfaces "br0" "veth0"
 #  SendNotification false
+#  DispatchValues true
 #</Plugin>
 
 #<Plugin perl>
index 29b7979..730696a 100644 (file)
@@ -5516,6 +5516,7 @@ B<Synopsis:>
    Socket "/var/run/openvswitch/db.sock"
    Interfaces "br0" "veth0"
    SendNotification false
+   DispatchValues true
  </Plugin>
 
 The plugin provides the following configuration options:
@@ -5555,6 +5556,12 @@ Default: empty (all interfaces on all bridges are monitored)
 If set to true, OVS link notifications (interface status and OVS DB connection
 terminate) are sent to collectd. Default value is false.
 
+=item B<DispatchValues> I<true|false>
+
+Dispatch the OVS DB interface link status value with configured plugin interval.
+Defaults to true. Please note, if B<SendNotification> and B<DispatchValues>
+options are false, no OVS information will be provided by the plugin.
+
 =back
 
 B<Note:> By default, the global interval setting is used within which to
index c77bde4..8c2cd12 100644 (file)
@@ -90,6 +90,9 @@ static ovs_events_ctx_t ovs_events_ctx = {
                .ovs_db_serv = "6640"}      /* use default OVS DB service */
 };
 
+/* Forward declaration */
+static int ovs_events_plugin_read(user_data_t *u);
+
 /* This function is used only by "OVS_EVENTS_CTX_LOCK" define (see above).
  * It always returns 1 when context is locked.
  */
@@ -224,6 +227,7 @@ static int ovs_events_config_get_interfaces(const oconfig_item_t *ci) {
  * in allocated memory. Returns negative value in case of error.
  */
 static int ovs_events_plugin_config(oconfig_item_t *ci) {
+  _Bool dispatch_values = 1;
   for (int i = 0; i < ci->children_num; i++) {
     oconfig_item_t *child = ci->children + i;
     if (strcasecmp("SendNotification", child->key) == 0) {
@@ -260,12 +264,28 @@ static int ovs_events_plugin_config(oconfig_item_t *ci) {
         ovs_events_config_free();
         return (-1);
       }
+    } else if (strcasecmp("DispatchValues", child->key) == 0) {
+      if (cf_util_get_boolean(child, &dispatch_values) != 0) {
+        ovs_events_config_free();
+        return (-1);
+      }
     } else {
       ERROR(OVS_EVENTS_PLUGIN ": option '%s' is not allowed here", child->key);
       ovs_events_config_free();
       return (-1);
     }
   }
+  /* Check and warn about invalid configuration */
+  if (!ovs_events_ctx.config.send_notification && !dispatch_values) {
+      WARNING(OVS_EVENTS_PLUGIN ": send notification and dispatch values "
+              "options are disabled. No information will be dispatched by the "
+              "plugin. Please check your configuration");
+  }
+  /* Dispatch link status values if configured */
+  if (dispatch_values)
+    return plugin_register_complex_read(NULL, OVS_EVENTS_PLUGIN,
+                                        ovs_events_plugin_read, 0, NULL);
+
   return (0);
 }
 
@@ -633,7 +653,5 @@ static int ovs_events_plugin_shutdown(void) {
 void module_register(void) {
   plugin_register_complex_config(OVS_EVENTS_PLUGIN, ovs_events_plugin_config);
   plugin_register_init(OVS_EVENTS_PLUGIN, ovs_events_plugin_init);
-  plugin_register_complex_read(NULL, OVS_EVENTS_PLUGIN, ovs_events_plugin_read,
-                               0, NULL);
   plugin_register_shutdown(OVS_EVENTS_PLUGIN, ovs_events_plugin_shutdown);
 }