errno = 0;
fd = open(filename, O_RDWR|O_CREAT|O_NOATIME, 0664);
if(fd != -1) {
- if(lseek(fd, size, SEEK_SET) == (long)size) {
+ if(lseek(fd, size, SEEK_SET) == (off_t)size) {
if(write(fd, "", 1) == 1) {
if(ftruncate(fd, size))
error("Cannot truncate file '%s' to size %ld. Will use the larger file.", filename, size);
if(flags & MAP_SHARED || !enable_ksm || !ksm) {
#endif
mem = mmap(NULL, size, PROT_READ|PROT_WRITE, flags, fd, 0);
- if(mem) {
+ if(mem != MAP_FAILED) {
int advise = MADV_SEQUENTIAL|MADV_DONTFORK;
if(flags & MAP_SHARED) advise |= MADV_WILLNEED;
}
else {
mem = mmap(NULL, size, PROT_READ|PROT_WRITE, flags|MAP_ANONYMOUS, -1, 0);
- if(mem) {
+ if(mem != MAP_FAILED) {
if(lseek(fd, 0, SEEK_SET) == 0) {
if(read(fd, mem, size) != (ssize_t)size)
error("Cannot read from file '%s'", filename);
return mem;
}
-int savememory(const char *filename, void *mem, unsigned long size)
+int savememory(const char *filename, void *mem, size_t size)
{
char tmpfilename[FILENAME_MAX + 1];
return -1;
}
- if(write(fd, mem, size) != (long)size) {
+ if(write(fd, mem, size) != (ssize_t)size) {
error("Cannot write to file '%s' %ld bytes.", filename, (long)size);
close(fd);
return -1;
close(fd);
- int ret = 0;
if(rename(tmpfilename, filename)) {
error("Cannot rename '%s' to '%s'", tmpfilename, filename);
- ret = -1;
+ return -1;
}
- return ret;
+ return 0;
}
int fd_is_valid(int fd) {
extern int snprintfz(char *dst, size_t n, const char *fmt, ...);
extern void *mymmap(const char *filename, size_t size, int flags, int ksm);
-extern int savememory(const char *filename, void *mem, unsigned long size);
+extern int savememory(const char *filename, void *mem, size_t size);
extern int fd_is_valid(int fd);
void log_date(FILE *out)
{
- char outstr[200];
+ char outstr[24];
time_t t;
struct tm *tmp, tmbuf;
tmp = localtime_r(&t, &tmbuf);
if (tmp == NULL) return;
- if (strftime(outstr, sizeof(outstr), "%y-%m-%d %H:%M:%S", tmp) == 0) return;
+ if (unlikely(strftime(outstr, sizeof(outstr), "%y-%m-%d %H:%M:%S", tmp) == 0)) return;
fprintf(out, "%s: ", outstr);
}
log_date(stdout);
va_start( args, fmt );
- fprintf(stdout, "DEBUG (%04lu@%-10.10s:%-15.15s): %s: ", line, file, function, program_name);
- vfprintf( stdout, fmt, args );
+ printf("DEBUG (%04lu@%-10.10s:%-15.15s): %s: ", line, file, function, program_name);
+ printf(fmt, args);
va_end( args );
- fprintf(stdout, "\n");
- // fflush( stdout );
+ putchar('\n');
if(output_log_syslog) {
va_start( args, fmt );
vfprintf( stderr, fmt, args );
va_end( args );
- fprintf(stderr, "\n");
+ fputc('\n', stderr);
if(error_log_syslog) {
va_start( args, fmt );
va_end( args );
if(errno) {
- char buf[200];
- char *s = strerror_r(errno, buf, 200);
- fprintf(stderr, " (errno %d, %s)\n", errno, s);
+ char buf[1024];
+ fprintf(stderr, " (errno %d, %s)\n", errno, strerror_r(errno, buf, 1023));
errno = 0;
}
- else fprintf(stderr, "\n");
+ else
+ fputc('\n', stderr);
if(error_log_syslog) {
va_start( args, fmt );
va_end( args );
perror(" # ");
- fprintf(stderr, "\n");
+ fputc('\n', stderr);
if(error_log_syslog) {
va_start( args, fmt );
va_start( args, fmt );
vfprintf( stdaccess, fmt, args );
va_end( args );
- fprintf( stdaccess, "\n");
- // fflush( stdaccess );
+ fputc('\n', stdaccess);
}
if(access_log_syslog) {
char *access_log_file = NULL;
char *user = NULL;
{
- char buffer[1024];
-
- // --------------------------------------------------------------------
-
- sprintf(buffer, "0x%08llx", 0ULL);
- char *flags = config_get("global", "debug flags", buffer);
+ char *flags = config_get("global", "debug flags", "0x00000000");
setenv("NETDATA_DEBUG_FLAGS", flags, 1);
debug_flags = strtoull(flags, NULL, 0);
// --------------------------------------------------------------------
- if(gethostname(buffer, HOSTNAME_MAX) == -1)
- error("WARNING: Cannot get machine hostname.");
- hostname = config_get("global", "hostname", buffer);
- debug(D_OPTIONS, "hostname set to '%s'", hostname);
+ {
+ char hostnamebuf[HOSTNAME_MAX + 1];
+ if(gethostname(hostnamebuf, HOSTNAME_MAX) == -1)
+ error("WARNING: Cannot get machine hostname.");
+ hostname = config_get("global", "hostname", hostnamebuf);
+ debug(D_OPTIONS, "hostname set to '%s'", hostname);
+ }
// --------------------------------------------------------------------
// let the plugins know the min update_every
{
- char buf[51];
- snprintfz(buf, 50, "%d", rrd_update_every);
+ char buf[16];
+ snprintfz(buf, 15, "%d", rrd_update_every);
setenv("NETDATA_UPDATE_EVERY", buf, 1);
}
// --------------------------------------------------------------------
listen_fd = create_listen_socket();
- if(listen_fd < 0) fatal("Cannot listen socket.");
+ if(listen_fd == -1)
+ fatal("Cannot listen socket.");
}
// never become a problem
debug(D_WEB_BUFFER, "Increasing data buffer from size %d to %d.", b->size, b->size + increase);
b->buffer = realloc(b->buffer, b->size + increase + sizeof(BUFFER_OVERFLOW_EOF) + 2);
- if(!b->buffer) fatal("Failed to increase data buffer from size %d to %d.", b->size + sizeof(BUFFER_OVERFLOW_EOF) + 2, b->size + increase + sizeof(BUFFER_OVERFLOW_EOF) + 2);
+ if(!b->buffer)
+ fatal("Failed to increase data buffer from size %d to %d.",
+ b->size + sizeof(BUFFER_OVERFLOW_EOF) + 2,
+ b->size + increase + sizeof(BUFFER_OVERFLOW_EOF) + 2);
b->size += increase;
log_access("%llu: (sent/all = %zu/%zu bytes %0.0f%%, prep/sent/total = %0.2f/%0.2f/%0.2f ms) %s: %d '%s'",
w->id,
- sent, size, -((size > 0) ? ((float) (size - sent) / (float) size * 100.0) : 0.0),
- (float) usecdiff(&w->tv_ready, &w->tv_in) / 1000.0,
- (float) usecdiff(&tv, &w->tv_ready) / 1000.0,
- (float) usecdiff(&tv, &w->tv_in) / 1000.0,
+ sent, size, -((size > 0) ? ((size - sent) / (double) size * 100.0) : 0.0),
+ usecdiff(&w->tv_ready, &w->tv_in) / 1000.0,
+ usecdiff(&tv, &w->tv_ready) / 1000.0,
+ usecdiff(&tv, &w->tv_in) / 1000.0,
(w->mode == WEB_CLIENT_MODE_FILECOPY) ? "filecopy" : ((w->mode == WEB_CLIENT_MODE_OPTIONS)
? "options" : "data"),
w->response.code,
while (*filename == '/') filename++;
// if the filename contain known paths, skip them
- if(strncmp(filename, WEB_PATH_FILE "/", strlen(WEB_PATH_FILE) + 1) == 0) filename = &filename[strlen(WEB_PATH_FILE) + 1];
+ if(strncmp(filename, WEB_PATH_FILE "/", strlen(WEB_PATH_FILE) + 1) == 0)
+ filename = &filename[strlen(WEB_PATH_FILE) + 1];
char *s;
for(s = filename; *s ;s++) {
debug(D_WEB_CLIENT, "%llu: Found RRD data with name '%s'.", w->id, tok);
// how many entries does the client want?
- long lines = rrd_default_history_entries;
- long group_count = 1;
+ int lines = rrd_default_history_entries;
+ int group_count = 1;
time_t after = 0, before = 0;
int group_method = GROUP_AVERAGE;
int nonzero = 0;
google_responseHandler, google_version, google_reqId, st->last_updated.tv_sec);
}
- debug(D_WEB_CLIENT_ACCESS, "%llu: Sending RRD data '%s' (id %s, %d lines, %d group, %d group_method, %lu after, %lu before).", w->id, st->name, st->id, lines, group_count, group_method, after, before);
- time_t timestamp_in_data = rrd_stats_json(datasource_type, st, w->response.data, lines, group_count, group_method, after, before, nonzero);
+ debug(D_WEB_CLIENT_ACCESS, "%llu: Sending RRD data '%s' (id %s, %d lines, %d group, %d group_method, %lu after, %lu before).",
+ w->id, st->name, st->id, lines, group_count, group_method, after, before);
+
+ time_t timestamp_in_data = rrd_stats_json(datasource_type, st, w->response.data, lines, group_count, group_method, (unsigned long)after, (unsigned long)before, nonzero);
if(datasource_type == DATASOURCE_DATATABLE_JSONP) {
if(timestamp_in_data > last_timestamp_in_data)
const char *content_type_string = web_content_type_to_string(w->response.data->contenttype);
const char *code_msg = web_response_code_to_string(code);
- char date[100];
+ char date[32];
struct tm tmbuf, *tm = gmtime_r(&w->response.data->date, &tmbuf);
strftime(date, sizeof(date), "%a, %d %b %Y %H:%M:%S %Z", tm);
, date);
}
else if(w->mode != WEB_CLIENT_MODE_OPTIONS) {
- char edate[100];
+ char edate[32];
time_t et = w->response.data->date + (86400 * 14);
struct tm etmbuf, *etm = gmtime_r(&et, &etmbuf);
strftime(edate, sizeof(edate), "%a, %d %b %Y %H:%M:%S %Z", etm);
ssize_t web_client_send_chunk_header(struct web_client *w, size_t len)
{
debug(D_DEFLATE, "%llu: OPEN CHUNK of %d bytes (hex: %x).", w->id, len, len);
- char buf[1024];
+ char buf[24];
sprintf(buf, "%zX\r\n", len);
ssize_t bytes = send(w->ofd, buf, strlen(buf), 0);
// when using compression,
// w->response.sent is the amount of bytes passed through compression
- debug(D_DEFLATE, "%llu: web_client_send_deflate(): w->response.data->len = %d, w->response.sent = %d, w->response.zhave = %d, w->response.zsent = %d, w->response.zstream.avail_in = %d, w->response.zstream.avail_out = %d, w->response.zstream.total_in = %d, w->response.zstream.total_out = %d.", w->id, w->response.data->len, w->response.sent, w->response.zhave, w->response.zsent, w->response.zstream.avail_in, w->response.zstream.avail_out, w->response.zstream.total_in, w->response.zstream.total_out);
+ debug(D_DEFLATE, "%llu: web_client_send_deflate(): w->response.data->len = %d, w->response.sent = %d, w->response.zhave = %zu, w->response.zsent = %zu, w->response.zstream.avail_in = %d, w->response.zstream.avail_out = %d, w->response.zstream.total_in = %d, w->response.zstream.total_out = %d.",
+ w->id, w->response.data->len, w->response.sent, w->response.zhave, w->response.zsent, w->response.zstream.avail_in, w->response.zstream.avail_out, w->response.zstream.total_in, w->response.zstream.total_out);
if(w->response.data->len - w->response.sent == 0 && w->response.zstream.avail_in == 0 && w->response.zhave == w->response.zsent && w->response.zstream.avail_out != 0) {
// there is nothing to send
debug(D_WEB_CLIENT, "%llu: Sent %d bytes.", w->id, len);
}
else if(len == 0) {
- debug(D_WEB_CLIENT, "%llu: Did not send any bytes to the client (zhave = %ld, zsent = %ld, need to send = %ld).", w->id, w->response.zhave, w->response.zsent, w->response.zhave - w->response.zsent);
+ debug(D_WEB_CLIENT, "%llu: Did not send any bytes to the client (zhave = %zu, zsent = %zu, need to send = %zu).",
+ w->id, w->response.zhave, w->response.zsent, w->response.zhave - w->response.zsent);
+
WEB_CLIENT_IS_DEAD(w);
}
else {
else if(!strcmp(ipv, "ipv6") || !strcmp(ipv, "IPV6") || !strcmp(ipv, "IPv6") || !strcmp(ipv, "6")) ip = 6;
else error("Cannot understand ip version '%s'. Assuming 'any'.", ipv);
- if(ip == 0 || ip == 6) listen_fd = create_listen_socket6(config_get("global", "bind socket to IP", "*"), listen_port, listen_backlog);
- if(listen_fd < 0) {
+ if(ip == 0 || ip == 6)
+ listen_fd = create_listen_socket6(config_get("global", "bind socket to IP", "*"), listen_port, listen_backlog);
+
+ if(listen_fd == -1) {
listen_fd = create_listen_socket4(config_get("global", "bind socket to IP", "*"), listen_port, listen_backlog);
- // if(listen_fd >= 0 && ip != 4) info("Managed to open an IPv4 socket on port %d.", listen_port);
+ //if(listen_fd != -1 && ip != 4)
+ // info("Managed to open an IPv4 socket on port %d.", listen_port);
}
return listen_fd;