Diff for /embedaddon/lighttpd/src/mod_rrdtool.c between versions 1.1 and 1.1.1.3

version 1.1, 2013/10/14 10:32:48 version 1.1.1.3, 2016/11/02 10:35:00
Line 1 Line 1
   #include "first.h"
   
 #include "server.h"  #include "server.h"
 #include "connections.h"  #include "connections.h"
 #include "response.h"  #include "response.h"
Line 7 Line 9
 #include "plugin.h"  #include "plugin.h"
 #include <sys/types.h>  #include <sys/types.h>
   
   #include <assert.h>
 #include <fcntl.h>  #include <fcntl.h>
 #include <stdlib.h>  #include <stdlib.h>
 #include <stdio.h>  #include <stdio.h>
Line 64  FREE_FUNC(mod_rrd_free) { Line 67  FREE_FUNC(mod_rrd_free) {
                 for (i = 0; i < srv->config_context->used; i++) {                  for (i = 0; i < srv->config_context->used; i++) {
                         plugin_config *s = p->config_storage[i];                          plugin_config *s = p->config_storage[i];
   
                           if (NULL == s) continue;
   
                         buffer_free(s->path_rrdtool_bin);                          buffer_free(s->path_rrdtool_bin);
                         buffer_free(s->path_rrd);                          buffer_free(s->path_rrd);
   
Line 169  static int mod_rrd_create_pipe(server *srv, plugin_dat Line 174  static int mod_rrd_create_pipe(server *srv, plugin_dat
                 p->read_fd = from_rrdtool_fds[0];                  p->read_fd = from_rrdtool_fds[0];
                 p->rrdtool_pid = pid;                  p->rrdtool_pid = pid;
   
#ifdef FD_CLOEXEC                fd_close_on_exec(p->write_fd);
                fcntl(p->write_fd, F_SETFD, FD_CLOEXEC);                fd_close_on_exec(p->read_fd);
                fcntl(p->read_fd, F_SETFD, FD_CLOEXEC); 
#endif 
   
                 break;                  break;
         }          }
Line 265  static int mod_rrdtool_create_rrd(server *srv, plugin_ Line 268  static int mod_rrdtool_create_rrd(server *srv, plugin_
                 "RRA:MIN:0.5:24:775 "                  "RRA:MIN:0.5:24:775 "
                 "RRA:MIN:0.5:288:797\n"));                  "RRA:MIN:0.5:288:797\n"));
   
        if (-1 == (safe_write(p->write_fd, p->cmd->ptr, p->cmd->used - 1))) {        if (-1 == (safe_write(p->write_fd, CONST_BUF_LEN(p->cmd)))) {
                 log_error_write(srv, __FILE__, __LINE__, "ss",                  log_error_write(srv, __FILE__, __LINE__, "ss",
                         "rrdtool-write: failed", strerror(errno));                          "rrdtool-write: failed", strerror(errno));
   
                 return HANDLER_ERROR;                  return HANDLER_ERROR;
         }          }
   
        buffer_prepare_copy(p->resp, 4096);        buffer_string_prepare_copy(p->resp, 4095);
        if (-1 == (r = safe_read(p->read_fd, p->resp->ptr, p->resp->size))) {        if (-1 == (r = safe_read(p->read_fd, p->resp->ptr, p->resp->size - 1))) {
                 log_error_write(srv, __FILE__, __LINE__, "ss",                  log_error_write(srv, __FILE__, __LINE__, "ss",
                         "rrdtool-read: failed", strerror(errno));                          "rrdtool-read: failed", strerror(errno));
   
                 return HANDLER_ERROR;                  return HANDLER_ERROR;
         }          }
   
        p->resp->used = r;        buffer_commit(p->resp, r);
   
         if (p->resp->ptr[0] != 'O' ||          if (p->resp->ptr[0] != 'O' ||
                 p->resp->ptr[1] != 'K') {                  p->resp->ptr[1] != 'K') {
Line 338  SETDEFAULTS_FUNC(mod_rrd_set_defaults) { Line 341  SETDEFAULTS_FUNC(mod_rrd_set_defaults) {
         size_t i;          size_t i;
   
         config_values_t cv[] = {          config_values_t cv[] = {
                { "rrdtool.binary",              NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_SERVER },                { "rrdtool.binary",  NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION }, /* 0 */
                { "rrdtool.db-name",             NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION },                { "rrdtool.db-name", NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION }, /* 1 */
                { NULL,                          NULL, T_CONFIG_UNSET, T_CONFIG_SCOPE_UNSET }                { NULL,              NULL, T_CONFIG_UNSET,  T_CONFIG_SCOPE_UNSET      }
         };          };
   
         if (!p) return HANDLER_ERROR;          if (!p) return HANDLER_ERROR;
   
        p->config_storage = calloc(1, srv->config_context->used * sizeof(specific_config *));        force_assert(srv->config_context->used > 0);
         p->config_storage = calloc(1, srv->config_context->used * sizeof(plugin_config *));
   
         for (i = 0; i < srv->config_context->used; i++) {          for (i = 0; i < srv->config_context->used; i++) {
                   data_config const* config = (data_config const*)srv->config_context->data[i];
                 plugin_config *s;                  plugin_config *s;
   
                 s = calloc(1, sizeof(plugin_config));                  s = calloc(1, sizeof(plugin_config));
Line 362  SETDEFAULTS_FUNC(mod_rrd_set_defaults) { Line 367  SETDEFAULTS_FUNC(mod_rrd_set_defaults) {
   
                 p->config_storage[i] = s;                  p->config_storage[i] = s;
   
                if (0 != config_insert_values_global(srv, ((data_config *)srv->config_context->data[i])->value, cv)) {                if (0 != config_insert_values_global(srv, config->value, cv, i == 0 ? T_CONFIG_SCOPE_SERVER : T_CONFIG_SCOPE_CONNECTION)) {
                         return HANDLER_ERROR;                          return HANDLER_ERROR;
                 }                  }
   
                if (i > 0 && !buffer_is_empty(s->path_rrdtool_bin)) {                if (i > 0 && !buffer_string_is_empty(s->path_rrdtool_bin)) {
                         /* path_rrdtool_bin is a global option */                          /* path_rrdtool_bin is a global option */
   
                         log_error_write(srv, __FILE__, __LINE__, "s",                          log_error_write(srv, __FILE__, __LINE__, "s",
Line 382  SETDEFAULTS_FUNC(mod_rrd_set_defaults) { Line 387  SETDEFAULTS_FUNC(mod_rrd_set_defaults) {
   
         /* check for dir */          /* check for dir */
   
        if (buffer_is_empty(p->conf.path_rrdtool_bin)) {        if (buffer_string_is_empty(p->conf.path_rrdtool_bin)) {
                 log_error_write(srv, __FILE__, __LINE__, "s",                  log_error_write(srv, __FILE__, __LINE__, "s",
                                 "rrdtool.binary has to be set");                                  "rrdtool.binary has to be set");
                 return HANDLER_ERROR;                  return HANDLER_ERROR;
Line 409  TRIGGER_FUNC(mod_rrd_trigger) { Line 414  TRIGGER_FUNC(mod_rrd_trigger) {
                 plugin_config *s = p->config_storage[i];                  plugin_config *s = p->config_storage[i];
                 int r;                  int r;
   
                if (buffer_is_empty(s->path_rrd)) continue;                if (buffer_string_is_empty(s->path_rrd)) continue;
   
                 /* write the data down every minute */                  /* write the data down every minute */
   
Line 418  TRIGGER_FUNC(mod_rrd_trigger) { Line 423  TRIGGER_FUNC(mod_rrd_trigger) {
                 buffer_copy_string_len(p->cmd, CONST_STR_LEN("update "));                  buffer_copy_string_len(p->cmd, CONST_STR_LEN("update "));
                 buffer_append_string_buffer(p->cmd, s->path_rrd);                  buffer_append_string_buffer(p->cmd, s->path_rrd);
                 buffer_append_string_len(p->cmd, CONST_STR_LEN(" N:"));                  buffer_append_string_len(p->cmd, CONST_STR_LEN(" N:"));
                buffer_append_off_t(p->cmd, s->bytes_read);                buffer_append_int(p->cmd, s->bytes_read);
                 buffer_append_string_len(p->cmd, CONST_STR_LEN(":"));                  buffer_append_string_len(p->cmd, CONST_STR_LEN(":"));
                buffer_append_off_t(p->cmd, s->bytes_written);                buffer_append_int(p->cmd, s->bytes_written);
                 buffer_append_string_len(p->cmd, CONST_STR_LEN(":"));                  buffer_append_string_len(p->cmd, CONST_STR_LEN(":"));
                buffer_append_long(p->cmd, s->requests);                buffer_append_int(p->cmd, s->requests);
                 buffer_append_string_len(p->cmd, CONST_STR_LEN("\n"));                  buffer_append_string_len(p->cmd, CONST_STR_LEN("\n"));
   
                if (-1 == (r = safe_write(p->write_fd, p->cmd->ptr, p->cmd->used - 1))) {                if (-1 == (r = safe_write(p->write_fd, CONST_BUF_LEN(p->cmd)))) {
                         p->rrdtool_running = 0;                          p->rrdtool_running = 0;
   
                         log_error_write(srv, __FILE__, __LINE__, "ss",                          log_error_write(srv, __FILE__, __LINE__, "ss",
Line 434  TRIGGER_FUNC(mod_rrd_trigger) { Line 439  TRIGGER_FUNC(mod_rrd_trigger) {
                         return HANDLER_ERROR;                          return HANDLER_ERROR;
                 }                  }
   
                buffer_prepare_copy(p->resp, 4096);                buffer_string_prepare_copy(p->resp, 4095);
                if (-1 == (r = safe_read(p->read_fd, p->resp->ptr, p->resp->size))) {                if (-1 == (r = safe_read(p->read_fd, p->resp->ptr, p->resp->size - 1))) {
                         p->rrdtool_running = 0;                          p->rrdtool_running = 0;
   
                         log_error_write(srv, __FILE__, __LINE__, "ss",                          log_error_write(srv, __FILE__, __LINE__, "ss",
Line 444  TRIGGER_FUNC(mod_rrd_trigger) { Line 449  TRIGGER_FUNC(mod_rrd_trigger) {
                         return HANDLER_ERROR;                          return HANDLER_ERROR;
                 }                  }
   
                p->resp->used = r;                buffer_commit(p->resp, r);
   
                 if (p->resp->ptr[0] != 'O' ||                  if (p->resp->ptr[0] != 'O' ||
                     p->resp->ptr[1] != 'K') {                      p->resp->ptr[1] != 'K') {

Removed from v.1.1  
changed lines
  Added in v.1.1.1.3


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>