static int powerdns_read_recursor(list_item_t *item) /* {{{ */ { char *buffer = NULL; int status; char *dummy; char *keys_list; char *key; char *key_saveptr; char *value; char *value_saveptr; if (item->command == NULL) { status = powerdns_update_recursor_command(item); if (status != 0) { ERROR("powerdns plugin: powerdns_update_recursor_command failed."); return -1; } DEBUG("powerdns plugin: powerdns_read_recursor: item->command = %s;", item->command); } assert(item->command != NULL); status = powerdns_get_data(item, &buffer); if (status != 0) { ERROR("powerdns plugin: powerdns_get_data failed."); return -1; } keys_list = strdup(item->command); if (keys_list == NULL) { FUNC_ERROR("strdup"); sfree(buffer); return -1; } key_saveptr = NULL; value_saveptr = NULL; /* Skip the `get' at the beginning */ strtok_r(keys_list, " \t", &key_saveptr); dummy = buffer; while ((value = strtok_r(dummy, " \t\n\r", &value_saveptr)) != NULL) { dummy = NULL; key = strtok_r(NULL, " \t", &key_saveptr); if (key == NULL) break; submit(item->instance, key, value); } /* while (strtok_r) */ sfree(buffer); sfree(keys_list); return 0; } /* }}} int powerdns_read_recursor */
static int powerdns_read_server (list_item_t *item) /* {{{ */ { char *buffer = NULL; size_t buffer_size = 0; int status; char *dummy; char *saveptr; char *key; char *value; const char* const *fields; int fields_num; if (item->command == NULL) item->command = strdup (SERVER_COMMAND); if (item->command == NULL) { ERROR ("powerdns plugin: strdup failed."); return (-1); } status = powerdns_get_data (item, &buffer, &buffer_size); if (status != 0) return (-1); if (item->fields_num != 0) { fields = (const char* const *) item->fields; fields_num = item->fields_num; } else { fields = default_server_fields; fields_num = default_server_fields_num; } assert (fields != NULL); assert (fields_num > 0); /* corrupt-packets=0,deferred-cache-inserts=0,deferred-cache-lookup=0,latency=0,packetcache-hit=0,packetcache-miss=0,packetcache-size=0,qsize-q=0,query-cache-hit=0,query-cache-miss=0,recursing-answers=0,recursing-questions=0,servfail-packets=0,tcp-answers=0,tcp-queries=0,timedout-packets=0,udp-answers=0,udp-queries=0,udp4-answers=0,udp4-queries=0,udp6-answers=0,udp6-queries=0, */ dummy = buffer; saveptr = NULL; while ((key = strtok_r (dummy, ",", &saveptr)) != NULL) { int i; dummy = NULL; value = strchr (key, '='); if (value == NULL) break; *value = '\0'; value++; if (value[0] == '\0') continue; /* Check if this item was requested. */ for (i = 0; i < fields_num; i++) if (strcasecmp (key, fields[i]) == 0) break; if (i >= fields_num) continue; submit (item->instance, key, value); } /* while (strtok_r) */ sfree (buffer); return (0); } /* }}} int powerdns_read_server */