openvpn plugin: Implement the “ImprovedNamingSchema” config option.
authorMarco Chiappero <marco@absence.it>
Tue, 1 Dec 2009 11:09:51 +0000 (12:09 +0100)
committerFlorian Forster <octo@leeloo.lan.home.verplant.org>
Tue, 1 Dec 2009 11:09:51 +0000 (12:09 +0100)
I'm attaching a new version that includes this config key. By default the old
naming schema is used, while for the single mode the new naming schema is
always used since there's no backward compatibility to be preserved. You can
use the previous file[1] for the 5.0 branch where only the new naming schema
will be used. A new man page text is still lacking, maybe I'll write it in the
next days.

src/openvpn.c

index 5a14e9e..0bc69dd 100644 (file)
@@ -51,11 +51,13 @@ static vpn_status_t **vpn_list = NULL;
 static int vpn_num = 0;
 
 static int store_compression = 1;
+static int new_naming_schema = 0;
 
 static const char *config_keys[] =
 {
        "StatusFile",
-       "Compression"
+       "Compression",
+       "ImprovedNamingSchema"
 };
 static int config_keys_num = STATIC_ARRAY_SIZE (config_keys);
 
@@ -93,7 +95,8 @@ static void iostats_submit (char *name, char *type, counter_t rx, counter_t tx)
        values[0].counter = rx;
        values[1].counter = tx;
 
-       /* NOTE: using plugin_instance to identify each vpn config (and
+       /* NOTE ON THE NEW NAMING SCHEMA:
+        *       using plugin_instance to identify each vpn config (and
         *       status) file; using type_instance to identify the endpoint
         *       host when in multimode, traffic or overhead when in single.
         */
@@ -103,8 +106,16 @@ static void iostats_submit (char *name, char *type, counter_t rx, counter_t tx)
        sstrncpy (vl.host, hostname_g, sizeof (vl.host));
        sstrncpy (vl.plugin, "openvpn", sizeof (vl.plugin));
        sstrncpy (vl.plugin_instance, name, sizeof (vl.plugin_instance));
-       sstrncpy (vl.type, "io_octets", sizeof (vl.type));
-       sstrncpy (vl.type_instance, type, sizeof (vl.type_instance));
+
+       if (type) /* new naming schema - improved naming schema option */
+       {
+               sstrncpy (vl.type, "io_octets", sizeof (vl.type));
+               sstrncpy (vl.type_instance, type, sizeof (vl.type_instance));
+       }
+       else /* old naming schema (multicontext only): plugin_instance = hostname rather than filename */
+       {
+               sstrncpy (vl.type, "if_octets", sizeof (vl.type));
+       }
 
        plugin_dispatch_values (&vl);
 } /* void traffic_submit */
@@ -252,10 +263,21 @@ static int multi1_read (char *name, FILE *fh)
                if (fields_num < 4)
                        continue;
 
-               iostats_submit (name,               /* vpn instance */
-                               fields[0],          /* "Common Name" */
-                               atoll (fields[2]),  /* "Bytes Received" */
-                               atoll (fields[3])); /* "Bytes Sent" */
+               if (new_naming_schema)
+               {
+                       iostats_submit (fields[0],          /* "Common Name" */
+                                       NULL,               /* unused when in multimode */
+                                       atoll (fields[2]),  /* "Bytes Received" */
+                                       atoll (fields[3])); /* "Bytes Sent" */
+               }
+               else
+               {
+                       iostats_submit (name,               /* vpn instance */
+                                       fields[0],          /* "Common Name" */
+                                       atoll (fields[2]),  /* "Bytes Received" */
+                                       atoll (fields[3])); /* "Bytes Sent" */
+               }
+
                read = 1;
        }
 
@@ -288,10 +310,21 @@ static int multi2_read (char *name, FILE *fh)
                {
                        if (strcmp (fields[0], "CLIENT_LIST") == 0)
                        {
-                               iostats_submit (name,               /* vpn instance */
-                                               fields[1],          /* "Common Name" */
-                                               atoll (fields[4]),  /* "Bytes Received" */
-                                               atoll (fields[5])); /* "Bytes Sent" */
+                               if (new_naming_schema)
+                               {
+                                       iostats_submit (name,               /* vpn instance */
+                                                       fields[1],          /* "Common Name" */
+                                                       atoll (fields[4]),  /* "Bytes Received" */
+                                                       atoll (fields[5])); /* "Bytes Sent" */
+                               }
+                               else
+                               {
+                                       iostats_submit (fields[1],          /* "Common Name" */
+                                                       NULL,               /* unused when in multimode */
+                                                       atoll (fields[4]),  /* "Bytes Received" */
+                                                       atoll (fields[5])); /* "Bytes Sent" */
+                               }
+
                                read = 1;
                        }
                }
@@ -326,10 +359,21 @@ static int multi3_read (char *name, FILE *fh)
                {
                        if (strcmp (fields[0], "CLIENT_LIST") == 0)
                        {
-                               iostats_submit (name,               /* vpn instance */
-                                               fields[1],          /* "Common Name" */
-                                               atoll (fields[4]),  /* "Bytes Received" */
-                                               atoll (fields[5])); /* "Bytes Sent" */
+                               if (new_naming_schema)
+                               {
+                                       iostats_submit (name,               /* vpn instance */
+                                                       fields[1],          /* "Common Name" */
+                                                       atoll (fields[4]),  /* "Bytes Received" */
+                                                       atoll (fields[5])); /* "Bytes Sent" */
+                               }
+                               else
+                               {
+                                       iostats_submit (fields[1],          /* "Common Name" */
+                                                       NULL,               /* unused when in multimode */
+                                                       atoll (fields[4]),  /* "Bytes Received" */
+                                                       atoll (fields[5])); /* "Bytes Sent" */
+                               }
+
                                read = 1;
                        }
                }
@@ -488,7 +532,7 @@ static int openvpn_config (const char *key, const char *value)
                }
                else
                {
-                       /* doesn't waist memory, uses status_file starting at filename + 1 */
+                       /* doesn't waste memory, uses status_file starting at filename + 1 */
                        status_name = filename + 1;
                }
 
@@ -539,6 +583,18 @@ static int openvpn_config (const char *key, const char *value)
                        DEBUG ("openvpn plugin: no 'compression statistcs' collected");
                }
        }
+       else if (strcasecmp ("ImprovedNamingSchema", key) == 0)
+       {
+               if (IS_TRUE (value))
+               {
+                       DEBUG ("openvpn plugin: using the new naming schema");
+                       new_naming_schema = 1;
+               }
+               else
+               {
+                       new_naming_schema = 0;
+               }
+       }
        else
        {
                return (-1);