Exemplo n.º 1
0
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 */
Exemplo n.º 2
0
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 */