X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fcommon.c;h=1addb323673814a5d8375f3114efaa654fa652f5;hb=566dd2bb07f2a9db3106f4a883b208d5310af511;hp=9a28cdbf7988d993a22be494f9c380e92413569f;hpb=5afa2f82d43e2a7952d8f347f6f40b5778c59db8;p=collectd.git diff --git a/src/common.c b/src/common.c index 9a28cdbf..1addb323 100644 --- a/src/common.c +++ b/src/common.c @@ -555,3 +555,91 @@ int format_name (char *ret, int ret_len, return (-1); return (0); } /* int format_name */ + +int parse_identifier (char *str, char **ret_host, + char **ret_plugin, char **ret_plugin_instance, + char **ret_type, char **ret_type_instance) +{ + char *hostname = NULL; + char *plugin = NULL; + char *plugin_instance = NULL; + char *type = NULL; + char *type_instance = NULL; + + hostname = str; + if (hostname == NULL) + return (-1); + + plugin = strchr (hostname, '/'); + if (plugin == NULL) + return (-1); + *plugin = '\0'; plugin++; + + type = strchr (plugin, '/'); + if (type == NULL) + return (-1); + *type = '\0'; type++; + + plugin_instance = strchr (plugin, '-'); + if (plugin_instance != NULL) + { + *plugin_instance = '\0'; + plugin_instance++; + } + + type_instance = strchr (type, '-'); + if (type_instance != NULL) + { + *type_instance = '\0'; + type_instance++; + } + + *ret_host = hostname; + *ret_plugin = plugin; + *ret_plugin_instance = plugin_instance; + *ret_type = type; + *ret_type_instance = type_instance; + return (0); +} /* int parse_identifier */ + +int parse_values (char *buffer, value_list_t *vl, const data_set_t *ds) +{ + int i; + char *dummy; + char *ptr; + char *saveptr; + + i = -1; + dummy = buffer; + saveptr = NULL; + while ((ptr = strtok_r (dummy, ":", &saveptr)) != NULL) + { + dummy = NULL; + + if (i >= vl->values_len) + break; + + if (i == -1) + { + if (strcmp ("N", ptr) == 0) + vl->time = time (NULL); + else + vl->time = (time_t) atoi (ptr); + } + else + { + if (strcmp ("U", ptr) == 0) + vl->values[i].gauge = NAN; + else if (ds->ds[i].type == DS_TYPE_COUNTER) + vl->values[i].counter = atoll (ptr); + else if (ds->ds[i].type == DS_TYPE_GAUGE) + vl->values[i].gauge = atof (ptr); + } + + i++; + } /* while (strtok_r) */ + + if ((ptr != NULL) || (i != vl->values_len)) + return (-1); + return (0); +} /* int parse_values */