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);
return (i);
} /* int openvpn_strsplit */
-
/* dispatches stats about traffic (TCP or UDP) generated by the tunnel per single endpoint */
-static void iostats_submit (char *name, char *type, counter_t rx, counter_t tx)
+static void iostats_submit (char *pinst, char *tinst, counter_t rx, counter_t tx)
{
value_t values[2];
value_list_t vl = VALUE_LIST_INIT;
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.
*/
vl.values_len = STATIC_ARRAY_SIZE (values);
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 (pinst != NULL)
+ sstrncpy (vl.plugin_instance, pinst,
+ sizeof (vl.plugin_instance));
+ sstrncpy (vl.type, "if_octets", sizeof (vl.type));
+ if (tinst != NULL)
+ sstrncpy (vl.type_instance, tinst, sizeof (vl.type_instance));
plugin_dispatch_values (&vl);
} /* void traffic_submit */
/* dispatches stats about data compression shown when in single mode */
-static void compression_submit (char *name, char *type, counter_t uncompressed, counter_t compressed)
+static void compression_submit (char *pinst, char *tinst,
+ counter_t uncompressed, counter_t compressed)
{
value_t values[2];
value_list_t vl = VALUE_LIST_INIT;
vl.values_len = STATIC_ARRAY_SIZE (values);
sstrncpy (vl.host, hostname_g, sizeof (vl.host));
sstrncpy (vl.plugin, "openvpn", sizeof (vl.plugin));
- sstrncpy (vl.plugin_instance, name, sizeof (vl.plugin_instance));
+ if (pinst != NULL)
+ sstrncpy (vl.plugin_instance, pinst,
+ sizeof (vl.plugin_instance));
sstrncpy (vl.type, "compression", sizeof (vl.type));
- sstrncpy (vl.type_instance, type, sizeof (vl.type_instance));
+ if (tinst != NULL)
+ sstrncpy (vl.type_instance, tinst, sizeof (vl.type_instance));
plugin_dispatch_values (&vl);
} /* void compression_submit */
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;
}
* with more or less fields.
*/
if (fields_num != 8)
- {
continue;
+
+ if (strcmp (fields[0], "CLIENT_LIST") != 0)
+ continue;
+
+ if (new_naming_schema)
+ {
+ /* plugin inst = file name, type inst = fields[1] */
+ iostats_submit (name, /* vpn instance */
+ fields[1], /* "Common Name" */
+ atoll (fields[4]), /* "Bytes Received" */
+ atoll (fields[5])); /* "Bytes Sent" */
}
else
{
- 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" */
- read = 1;
- }
+ /* plugin inst = fields[1], type inst = "" */
+ iostats_submit (fields[1], /* "Common Name" */
+ NULL, /* unused when in multimode */
+ atoll (fields[4]), /* "Bytes Received" */
+ atoll (fields[5])); /* "Bytes Sent" */
}
+
+ read = 1;
}
return (read);
}
else
{
- if (strcmp (fields[0], "CLIENT_LIST") == 0)
+ if (strcmp (fields[0], "CLIENT_LIST") != 0)
+ continue;
+
+ if (new_naming_schema)
{
iostats_submit (name, /* vpn instance */
fields[1], /* "Common Name" */
atoll (fields[4]), /* "Bytes Received" */
atoll (fields[5])); /* "Bytes Sent" */
- read = 1;
}
+ else
+ {
+ iostats_submit (fields[1], /* "Common Name" */
+ NULL, /* unused when in multimode */
+ atoll (fields[4]), /* "Bytes Received" */
+ atoll (fields[5])); /* "Bytes Sent" */
+ }
+
+ read = 1;
}
}
}
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;
}
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);