From: Costa Tsaousis (ktsaou) Date: Mon, 4 Jul 2016 19:42:19 +0000 (+0300) Subject: Merge branch 'master' of github.com:ktsaou/netdata X-Git-Tag: v1.3.0~92^2~1 X-Git-Url: https://arthur.barton.de/gitweb/?a=commitdiff_plain;h=74fda3acdf572444d555d9a66e2bfd0eba6e5a07;hp=a9bc653b8d01a564b1aa7f9d95a1c00acefbeeb1;p=netdata.git Merge branch 'master' of github.com:ktsaou/netdata --- diff --git a/charts.d/airsearches.chart.sh b/charts.d/airsearches.chart.sh deleted file mode 100755 index 449b1425..00000000 --- a/charts.d/airsearches.chart.sh +++ /dev/null @@ -1,91 +0,0 @@ -#!/bin/sh - -airsearches_url= -airsearches_cmds= -airsearches_update_every=15 - -airsearches_get() { - wget 2>/dev/null -O - "$airsearches_url" |\ - sed -e "s|
|\n|g" -e "s|: |=|g" -e "s| \+|_|g" -e "s/^/airsearches_/g" |\ - tr "[A-Z]\.\!@#\$%^&*()_+\-" "[a-z]_____________" |\ - egrep "^airsearches_[a-z0-9_]+=[0-9]+$" -} - -airsearches_check() { - # make sure we have all the commands we need - require_cmd wget || return 1 - - # make sure we are configured - if [ -z "$airsearches_url" ] - then - echo >&2 "$PROGRAM_NAME: airsearches: not configured. Please set airsearches_url='url' in $confd/airsearches.conf" - return 1 - fi - - # check once if the url works - wget 2>/dev/null -O /dev/null "$airsearches_url" - if [ ! $? -eq 0 ] - then - echo >&2 "$PROGRAM_NAME: airsearches: cannot fetch the url: $airsearches_url. Please set airsearches_url='url' in $confd/airsearches.conf" - return 1 - fi - - # if the admin did not give any commands - # find the available ones - if [ -z "$airsearches_cmds" ] - then - airsearches_cmds="$(airsearches_get | cut -d '=' -f 1 | sed "s/^airsearches_//g" | sort -u)" - echo - fi - - # did we find any commands? - if [ -z "$airsearches_cmds" ] - then - echo >&2 "$PROGRAM_NAME: airsearches: cannot find command list automatically. Please set airsearches_cmds='...' in $confd/airsearches.conf" - return 1 - fi - - # ok we can do it - return 0 -} - -airsearches_create() { - [ -z "$airsearches_cmds" ] && return 1 - - # create the charts - local x= - echo "CHART airsearches.affiliates '' 'Air Searches per affiliate' 'requests / min' airsearches '' stacked 20000 $airsearches_update_every" - for x in $airsearches_cmds - do - echo "DIMENSION $x '' incremental 60 1" - done - - return 0 -} - -airsearches_update() { - # the first argument to this function is the microseconds since last update - # pass this parameter to the BEGIN statement (see bellow). - - # do all the work to collect / calculate the values - # for each dimension - # remember: KEEP IT SIMPLE AND SHORT - - # get the values from airsearches - eval "$(airsearches_get)" - - # write the result of the work. - local x= - - echo "BEGIN airsearches.affiliates $1" - for x in $airsearches_cmds - do - eval "v=\$airsearches_$x" - echo "SET $x = $v" - done - echo "END" - - airsearches_dt=0 - - return 0 -} diff --git a/charts.d/crsproxy.chart.sh b/charts.d/crsproxy.chart.sh deleted file mode 100755 index 9ad8b338..00000000 --- a/charts.d/crsproxy.chart.sh +++ /dev/null @@ -1,151 +0,0 @@ -#!/bin/sh - -crsproxy_url= -crsproxy_cmds= -crsproxy_update_every=15 - -crsproxy_get() { - wget 2>/dev/null -O - "$crsproxy_url" |\ - sed \ - -e "s/ \+/ /g" \ - -e "s/\./_/g" \ - -e "s/ =/=/g" \ - -e "s/= /=/g" \ - -e "s/^/crsproxy_/g" |\ - egrep "^crsproxy_[a-zA-Z][a-zA-Z0-9_]*=[0-9]+$" -} - -crsproxy_check() { - # make sure we have all the commands we need - require_cmd wget || return 1 - - if [ -z "$crsproxy_url" ] - then - echo >&2 "$PROGRAM_NAME: crsproxy: not configured. Please set crsproxy_url='url' in $confd/crsproxy.conf" - return 1 - fi - - # check once if the url works - wget 2>/dev/null -O /dev/null "$crsproxy_url" - if [ ! $? -eq 0 ] - then - echo >&2 "$PROGRAM_NAME: crsproxy: cannot fetch the url: $crsproxy_url. Please set crsproxy_url='url' in $confd/crsproxy.conf" - return 1 - fi - - # if the user did not request specific commands - # find the commands available - if [ -z "$crsproxy_cmds" ] - then - crsproxy_cmds="$(crsproxy_get | cut -d '=' -f 1 | sed "s/^crsproxy_cmd_//g" | sort -u)" - fi - - # if no commands are available - if [ -z "$crsproxy_cmds" ] - then - echo >&2 "$PROGRAM_NAME: crsproxy: cannot find command list automatically. Please set crsproxy_cmds='...' in $confd/crsproxy.conf" - return 1 - fi - return 0 -} - -crsproxy_create() { - # create the charts - cat <= 10) guest = strtoull(procfile_lineword(ff, l, 9), NULL, 10); if(words >= 11) guest_nice = strtoull(procfile_lineword(ff, l, 10), NULL, 10); - char *title = "Core utilization"; - char *type = RRD_TYPE_STAT; - char *context = "cpu.cpu"; - char *family = "utilization"; - long priority = 1000; - int isthistotal = 0; + char *title, *type, *context, *family; + long priority; + int isthistotal; - if(strcmp(id, "cpu") == 0) { - isthistotal = 1; - type = "system"; + if(unlikely(strcmp(id, "cpu")) == 0) { title = "Total CPU utilization"; + type = "system"; context = "system.cpu"; family = id; priority = 100; + isthistotal = 1; + } + else { + title = "Core utilization"; + type = "cpu"; + context = "cpu.cpu"; + family = "utilization"; + priority = 1000; + isthistotal = 0; } - if((isthistotal && do_cpu) || (!isthistotal && do_cpu_cores)) { + if(likely((isthistotal && do_cpu) || (!isthistotal && do_cpu_cores))) { st = rrdset_find_bytype(type, id); - if(!st) { + if(unlikely(!st)) { st = rrdset_create(type, id, NULL, family, context, title, "percentage", priority, update_every, RRDSET_TYPE_STACKED); long multiplier = 1; @@ -119,14 +134,14 @@ int do_proc_stat(int update_every, unsigned long long dt) { rrdset_done(st); } } - else if(strcmp(procfile_lineword(ff, l, 0), "intr") == 0) { + else if(hash == hash_intr && strcmp(row_key, "intr") == 0) { unsigned long long value = strtoull(procfile_lineword(ff, l, 1), NULL, 10); // -------------------------------------------------------------------- - if(do_interrupts) { + if(likely(do_interrupts)) { st = rrdset_find_bytype("system", "intr"); - if(!st) { + if(unlikely(!st)) { st = rrdset_create("system", "intr", NULL, "interrupts", NULL, "CPU Interrupts", "interrupts/s", 900, update_every, RRDSET_TYPE_LINE); st->isdetail = 1; @@ -138,14 +153,14 @@ int do_proc_stat(int update_every, unsigned long long dt) { rrdset_done(st); } } - else if(strcmp(procfile_lineword(ff, l, 0), "ctxt") == 0) { + else if(hash == hash_ctxt && strcmp(row_key, "ctxt") == 0) { unsigned long long value = strtoull(procfile_lineword(ff, l, 1), NULL, 10); // -------------------------------------------------------------------- - if(do_context) { + if(likely(do_context)) { st = rrdset_find_bytype("system", "ctxt"); - if(!st) { + if(unlikely(!st)) { st = rrdset_create("system", "ctxt", NULL, "processes", NULL, "CPU Context Switches", "context switches/s", 800, update_every, RRDSET_TYPE_LINE); rrddim_add(st, "switches", NULL, 1, 1, RRDDIM_INCREMENTAL); @@ -156,22 +171,22 @@ int do_proc_stat(int update_every, unsigned long long dt) { rrdset_done(st); } } - else if(!processes && strcmp(procfile_lineword(ff, l, 0), "processes") == 0) { + else if(hash == hash_processes && !processes && strcmp(row_key, "processes") == 0) { processes = strtoull(procfile_lineword(ff, l, 1), NULL, 10); } - else if(!running && strcmp(procfile_lineword(ff, l, 0), "procs_running") == 0) { + else if(hash == hash_procs_running && !running && strcmp(row_key, "procs_running") == 0) { running = strtoull(procfile_lineword(ff, l, 1), NULL, 10); } - else if(!blocked && strcmp(procfile_lineword(ff, l, 0), "procs_blocked") == 0) { + else if(hash == hash_procs_blocked && !blocked && strcmp(row_key, "procs_blocked") == 0) { blocked = strtoull(procfile_lineword(ff, l, 1), NULL, 10); } } // -------------------------------------------------------------------- - if(do_forks) { + if(likely(do_forks)) { st = rrdset_find_bytype("system", "forks"); - if(!st) { + if(unlikely(!st)) { st = rrdset_create("system", "forks", NULL, "processes", NULL, "Started Processes", "processes/s", 700, update_every, RRDSET_TYPE_LINE); st->isdetail = 1; @@ -185,9 +200,9 @@ int do_proc_stat(int update_every, unsigned long long dt) { // -------------------------------------------------------------------- - if(do_processes) { + if(likely(do_processes)) { st = rrdset_find_bytype("system", "processes"); - if(!st) { + if(unlikely(!st)) { st = rrdset_create("system", "processes", NULL, "processes", NULL, "System Processes", "processes", 600, update_every, RRDSET_TYPE_LINE); rrddim_add(st, "running", NULL, 1, 1, RRDDIM_ABSOLUTE); diff --git a/src/rrd.c b/src/rrd.c index c0f4f363..208d741c 100644 --- a/src/rrd.c +++ b/src/rrd.c @@ -920,7 +920,7 @@ unsigned long long rrdset_done(RRDSET *st) int dimensions; st->collected_total = 0; for( rd = st->dimensions, dimensions = 0 ; likely(rd) ; rd = rd->next, dimensions++ ) - st->collected_total += rd->collected_value; + if(likely(rd->updated)) st->collected_total += rd->collected_value; uint32_t storage_flags = SN_EXISTS; @@ -929,6 +929,11 @@ unsigned long long rrdset_done(RRDSET *st) // at this stage we do not interpolate anything for( rd = st->dimensions ; likely(rd) ; rd = rd->next ) { + if(unlikely(!rd->updated)) { + rd->calculated_value = 0; + continue; + } + if(unlikely(st->debug)) debug(D_RRD_STATS, "%s/%s: START " " last_collected_value = " COLLECTED_NUMBER_FORMAT " collected_value = " COLLECTED_NUMBER_FORMAT @@ -942,34 +947,35 @@ unsigned long long rrdset_done(RRDSET *st) ); switch(rd->algorithm) { - case RRDDIM_ABSOLUTE: - rd->calculated_value = (calculated_number)rd->collected_value - * (calculated_number)rd->multiplier - / (calculated_number)rd->divisor; - - if(unlikely(st->debug)) - debug(D_RRD_STATS, "%s/%s: CALC ABS/ABS-NO-IN " - CALCULATED_NUMBER_FORMAT " = " - COLLECTED_NUMBER_FORMAT - " * " CALCULATED_NUMBER_FORMAT - " / " CALCULATED_NUMBER_FORMAT - , st->id, rd->name - , rd->calculated_value - , rd->collected_value - , (calculated_number)rd->multiplier - , (calculated_number)rd->divisor - ); - break; + case RRDDIM_ABSOLUTE: + rd->calculated_value = (calculated_number)rd->collected_value + * (calculated_number)rd->multiplier + / (calculated_number)rd->divisor; + + if(unlikely(st->debug)) + debug(D_RRD_STATS, "%s/%s: CALC ABS/ABS-NO-IN " + CALCULATED_NUMBER_FORMAT " = " + COLLECTED_NUMBER_FORMAT + " * " CALCULATED_NUMBER_FORMAT + " / " CALCULATED_NUMBER_FORMAT + , st->id, rd->name + , rd->calculated_value + , rd->collected_value + , (calculated_number)rd->multiplier + , (calculated_number)rd->divisor + ); + break; case RRDDIM_PCENT_OVER_ROW_TOTAL: - if(unlikely(!st->collected_total)) rd->calculated_value = 0; + if(unlikely(!st->collected_total)) + rd->calculated_value = 0; else - // the percentage of the current value - // over the total of all dimensions - rd->calculated_value = - (calculated_number)100 - * (calculated_number)rd->collected_value - / (calculated_number)st->collected_total; + // the percentage of the current value + // over the total of all dimensions + rd->calculated_value = + (calculated_number)100 + * (calculated_number)rd->collected_value + / (calculated_number)st->collected_total; if(unlikely(st->debug)) debug(D_RRD_STATS, "%s/%s: CALC PCENT-ROW " @@ -984,7 +990,7 @@ unsigned long long rrdset_done(RRDSET *st) break; case RRDDIM_INCREMENTAL: - if(unlikely(!rd->updated || rd->counter <= 1)) { + if(unlikely(rd->counter <= 1)) { rd->calculated_value = 0; continue; } @@ -1000,9 +1006,10 @@ unsigned long long rrdset_done(RRDSET *st) rd->last_collected_value = rd->collected_value; } - rd->calculated_value = (calculated_number)(rd->collected_value - rd->last_collected_value) - * (calculated_number)rd->multiplier - / (calculated_number)rd->divisor; + rd->calculated_value = + (calculated_number)(rd->collected_value - rd->last_collected_value) + * (calculated_number)rd->multiplier + / (calculated_number)rd->divisor; if(unlikely(st->debug)) debug(D_RRD_STATS, "%s/%s: CALC INC PRE " @@ -1020,18 +1027,20 @@ unsigned long long rrdset_done(RRDSET *st) break; case RRDDIM_PCENT_OVER_DIFF_TOTAL: - if(unlikely(!rd->updated || rd->counter <= 1)) { + if(unlikely(rd->counter <= 1)) { rd->calculated_value = 0; continue; } // the percentage of the current increment // over the increment of all dimensions together - if(unlikely(st->collected_total == st->last_collected_total)) rd->calculated_value = rd->last_calculated_value; - else rd->calculated_value = - (calculated_number)100 - * (calculated_number)(rd->collected_value - rd->last_collected_value) - / (calculated_number)(st->collected_total - st->last_collected_total); + if(unlikely(st->collected_total == st->last_collected_total)) + rd->calculated_value = 0; + else + rd->calculated_value = + (calculated_number)100 + * (calculated_number)(rd->collected_value - rd->last_collected_value) + / (calculated_number)(st->collected_total - st->last_collected_total); if(unlikely(st->debug)) debug(D_RRD_STATS, "%s/%s: CALC PCENT-DIFF "