]> arthur.barton.de Git - netdata.git/commitdiff
Merge pull request #555 from paulfantom/master
authorCosta Tsaousis <costa@tsaousis.gr>
Wed, 15 Jun 2016 21:22:56 +0000 (00:22 +0300)
committerGitHub <noreply@github.com>
Wed, 15 Jun 2016 21:22:56 +0000 (00:22 +0300)
Python plugin for MySQL

README.md
src/common.c
src/daemon.c
src/dictionary.c
src/procfile.c
src/registry.c
src/rrd2json.c
src/web_buffer.c
src/web_client.c
src/web_server.c

index 5b6aa202a71f628a7402345c0de037c8cd428237..049a133d524acad73142cbb93bc88e332ba9213e 100644 (file)
--- a/README.md
+++ b/README.md
@@ -1,11 +1,12 @@
 [![Build Status](https://travis-ci.org/firehol/netdata.svg?branch=master)](https://travis-ci.org/firehol/netdata)
-[![User Base](https://registry.my-netdata.io/api/v1/badge.svg?chart=netdata.registry_entries&dimensions=persons&label=user%20base&units=null&value_color=blue&precision=0&v40)](https://registry.my-netdata.io/#netdata_registry)
-[![Monitored Servers](https://registry.my-netdata.io/api/v1/badge.svg?chart=netdata.registry_entries&dimensions=machines&label=servers%20monitored&units=null&value_color=orange&precision=0&v40)](https://registry.my-netdata.io/#netdata_registry)
-[![Sessions Served](https://registry.my-netdata.io/api/v1/badge.svg?chart=netdata.registry_sessions&label=sessions%20served&units=null&value_color=yellowgreen&precision=0&v40)](https://registry.my-netdata.io/#netdata_registry)
-
-[![New Users Today](http://registry.my-netdata.io/api/v1/badge.svg?chart=netdata.registry_entries&dimensions=persons&after=-86400&options=unaligned&group=incremental-sum&label=new%20users%20today&units=null&value_color=blue&precision=0&v40)](https://registry.my-netdata.io/#netdata_registry)
-[![New Machines Today](https://registry.my-netdata.io/api/v1/badge.svg?chart=netdata.registry_entries&dimensions=machines&group=incremental-sum&after=-86400&options=unaligned&label=servers%20added%20today&units=null&value_color=orange&precision=0&v40)](https://registry.my-netdata.io/#netdata_registry)
-[![Sessions Today](https://registry.my-netdata.io/api/v1/badge.svg?chart=netdata.registry_sessions&after=-86400&group=incremental-sum&options=unaligned&label=sessions%20served%20today&units=null&value_color=yellowgreen&precision=0&v40)](https://registry.my-netdata.io/#netdata_registry)
+<a href="https://scan.coverity.com/projects/firehol-netdata"><img alt="Coverity Scan Build Status" src="https://scan.coverity.com/projects/9140/badge.svg"/></a>
+[![User Base](https://registry.my-netdata.io/api/v1/badge.svg?chart=netdata.registry_entries&dimensions=persons&label=user%20base&units=null&value_color=blue&precision=0&v41)](https://registry.my-netdata.io/#netdata_registry)
+[![Monitored Servers](https://registry.my-netdata.io/api/v1/badge.svg?chart=netdata.registry_entries&dimensions=machines&label=servers%20monitored&units=null&value_color=orange&precision=0&v41)](https://registry.my-netdata.io/#netdata_registry)
+[![Sessions Served](https://registry.my-netdata.io/api/v1/badge.svg?chart=netdata.registry_sessions&label=sessions%20served&units=null&value_color=yellowgreen&precision=0&v41)](https://registry.my-netdata.io/#netdata_registry)
+
+[![New Users Today](http://registry.my-netdata.io/api/v1/badge.svg?chart=netdata.registry_entries&dimensions=persons&after=-86400&options=unaligned&group=incremental-sum&label=new%20users%20today&units=null&value_color=blue&precision=0&v41)](https://registry.my-netdata.io/#netdata_registry)
+[![New Machines Today](https://registry.my-netdata.io/api/v1/badge.svg?chart=netdata.registry_entries&dimensions=machines&group=incremental-sum&after=-86400&options=unaligned&label=servers%20added%20today&units=null&value_color=orange&precision=0&v41)](https://registry.my-netdata.io/#netdata_registry)
+[![Sessions Today](https://registry.my-netdata.io/api/v1/badge.svg?chart=netdata.registry_sessions&after=-86400&group=incremental-sum&options=unaligned&label=sessions%20served%20today&units=null&value_color=yellowgreen&precision=0&v41)](https://registry.my-netdata.io/#netdata_registry)
 
 
 # netdata
index 195bfc84df7b2942b9abb904b14dbd7f85a88e60..266e5ac12ed7950f6800fb6efaefa8e56a8627a4 100644 (file)
@@ -851,6 +851,8 @@ int snprintfz(char *dst, size_t n, const char *fmt, ...) {
        va_list args;
 
        va_start(args, fmt);
-       return vsnprintfz(dst, n, fmt, args);
+       int ret = vsnprintfz(dst, n, fmt, args);
        va_end(args);
+
+       return ret;
 }
index 82b763295ca0be0763c3ecf3aa0def46ebd1b2c1..05a77c7c67a2975a660f4c49610badbbff650104 100644 (file)
@@ -307,7 +307,7 @@ int become_daemon(int dont_fork, int close_all_files, const char *user, const ch
        }
 
        if(user && *user) {
-               if(become_user(user, (*access_fd)?*access_fd:-1, output_fd, error_fd, pidfd) != 0) {
+               if(become_user(user, (access_fd)?*access_fd:-1, output_fd, error_fd, pidfd) != 0) {
                        error("Cannot become user '%s'. Continuing as we are.", user);
                }
                else info("Successfully became user '%s'.", user);
index 8dbbc64c4febacc1060dd3095d1e5eec1b7f45b0..2b5df3a981a3a5bf96ac149c2121e99a04fed64a 100644 (file)
@@ -211,14 +211,16 @@ void *dictionary_set(DICTIONARY *dict, const char *name, void *value, size_t val
                else {
                        debug(D_REGISTRY, "Dictionary: cloning value to '%s'", name);
 
-                       void *value = malloc(value_len),
+                       // copy the new value without breaking
+                       // any other thread accessing the same entry
+                       void *new = malloc(value_len),
                                        *old = nv->value;
 
-                       if(unlikely(!nv->value))
+                       if(unlikely(!new))
                                fatal("Cannot allocate value of size %zu", value_len);
 
-                       memcpy(value, value, value_len);
-                       nv->value = value;
+                       memcpy(new, value, value_len);
+                       nv->value = new;
 
                        debug(D_REGISTRY, "Dictionary: freeing old value of '%s'", name);
                        free(old);
@@ -289,7 +291,7 @@ static int dictionary_walker(avl *a, int (*callback)(void *entry, void *data), v
        total += ret;
 
        if(a->left) {
-               dictionary_walker(a->left, callback, data);
+               ret = dictionary_walker(a->left, callback, data);
                if (ret < 0) return ret;
                total += ret;
        }
index 291f14519c5c0043b037b49242c8f763e77b0b69..59f75c1ecea132abfde7a42fab1a3f41b75c2e22 100644 (file)
@@ -170,7 +170,7 @@ procfile *procfile_parser(procfile *ff) {
        while(likely(s < e)) {
                // we are not at the end
 
-               switch(ff->separators[(int)(*s)]) {
+               switch(ff->separators[(uint8_t)(*s)]) {
                        case PF_CHAR_IS_OPEN:
                                if(s == t) {
                                        opened++;
index 60a9ced72c92a479879b321b54e5451f164d7047..203b846e05de65496becc846623f29b9fcd508b7 100644 (file)
@@ -819,6 +819,8 @@ int registry_log_load(void) {
                                        break;
                        }
                }
+               
+               fclose(fp);
        }
 
        // open the log again
index 9639247eb04d1e191dd985796801c1b908d63eee..7c160a9a82240c7a443da4e4254e29b86383541a 100644 (file)
@@ -628,8 +628,7 @@ void rrdr_json_wrapper_begin(RRDR *r, BUFFER *wb, uint32_t format, uint32_t opti
 
 void rrdr_json_wrapper_end(RRDR *r, BUFFER *wb, uint32_t format, uint32_t options, int string_value)
 {
-       if(r) {;}
-       if(format) {;}
+       (void)format;
 
        char kq[2] = "",                                        // key quote
                sq[2] = "";                                             // string quote
index 6d0ccf0f42ad82c157fb49f4544e8bdd925b86e8..ab0381b89b9e9d9d5d491079b8bb65e0fb2608c1 100644 (file)
@@ -314,7 +314,7 @@ void buffer_free(BUFFER *b)
 
        debug(D_WEB_BUFFER, "Freeing web buffer of size %zu.", b->size);
 
-       if(b->buffer) free(b->buffer);
+       free(b->buffer);
        free(b);
 }
 
index dbde125e1dd8b405dc5596d92e86aed1e964d155..51f3f5084a88b88ddbbf6c1c10d26c7ba3e27711 100644 (file)
@@ -121,7 +121,7 @@ struct web_client *web_client_create(int listener)
 
                case AF_INET6:
                        if(strncmp(w->client_ip, "::ffff:", 7) == 0) {
-                               strcpy(w->client_ip, &w->client_ip[7]);
+                               memmove(w->client_ip, &w->client_ip[7], strlen(&w->client_ip[7]) + 1);
                                debug(D_WEB_CLIENT_ACCESS, "%llu: New IPv4 web client from %s port %s on socket %d.", w->id, w->client_ip, w->client_port, w->ifd);
                        }
                        else
@@ -778,6 +778,9 @@ int web_client_api_v1_badge(struct web_client *w, char *url) {
        int       points    = (points_str    && *points_str   )?atoi(points_str):1;
        int       precision = (precision_str && *precision_str)?atoi(precision_str):-1;
 
+       if(!multiply) multiply = 1;
+       if(!divide) divide = 1;
+
        int refresh = 0;
        if(refresh_str && *refresh_str) {
                if(!strcmp(refresh_str, "auto")) {
@@ -1316,9 +1319,10 @@ int web_client_api_old_data_request(struct web_client *w, char *url, int datasou
 
        // get the name of the data to show
        char *tok = mystrsep(&url, "/");
+       if(!tok) tok = "";
 
        // do we have such a data set?
-       if(tok && *tok) {
+       if(*tok) {
                debug(D_WEB_CLIENT, "%llu: Searching for RRD data with name '%s'.", w->id, tok);
                st = rrdset_find_byname(tok);
                if(!st) st = rrdset_find(tok);
index e349469fedf394be7528080d51f7cddb519faf67..c2a11b1ca169acbde6b65133e8107be575a17d6b 100644 (file)
@@ -111,7 +111,8 @@ int create_listen_socket4(const char *ip, int port, int listen_backlog)
        }
 
        /* avoid "address already in use" */
-       setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (void*)&sockopt, sizeof(sockopt));
+       if(setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (void*)&sockopt, sizeof(sockopt)) != 0)
+               error("Cannot set SO_REUSEADDR on port's %d socket.", port);
 
        struct sockaddr_in name;
        memset(&name, 0, sizeof(struct sockaddr_in));
@@ -162,7 +163,8 @@ int create_listen_socket6(const char *ip, int port, int listen_backlog)
        }
 
        /* avoid "address already in use" */
-       setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (void*)&sockopt, sizeof(sockopt));
+       if(setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (void*)&sockopt, sizeof(sockopt)) != 0)
+               error("Cannot set SO_REUSEADDR on port's %d socket.", port);
 
        struct sockaddr_in6 name;
        memset(&name, 0, sizeof(struct sockaddr_in6));