+++ /dev/null
-#!/bin/sh
-
-# report our PID back to netdata
-# this is required for netdata to kill this process when it exits
-echo "MYPID $$"
-
-# default sleep function
-loopsleepms() {
- sleep $1
-}
-# if found and included, this file overwrites loopsleepms()
-# with a high resolution timer function for precise looping.
-. "`dirname $0`/loopsleepms.sh.inc"
-
-# netdata passes the requested update frequency as the first argument
-update_every=$1
-update_every=$(( update_every + 1 - 1)) # makes sure it is a number
-test $update_every -eq 0 && update_every=1 # if it is zero, make it 1
-
-
-# create the chart with 3 dimensions
-cat <<EOF
-CHART example.load '' "System Load Average" "load" load load line 500 $update_every
-DIMENSION load1 '1 min' absolute 1 100
-DIMENSION load5 '5 mins' absolute 1 100
-DIMENSION load15 '15 mins' absolute 1 100
-
-CHART example.random '' "Random Numbers Stacked Chart" "% of random numbers" random random stacked 5000 $update_every
-DIMENSION random1 '' percentage-of-absolute-row 1 1
-DIMENSION random2 '' percentage-of-absolute-row 1 1
-DIMENSION random3 '' percentage-of-absolute-row 1 1
-EOF
-
-# You can create more charts if you like.
-# Just add more chart definitions.
-
-# work forever
-while [ 1 ]
-do
- # do all the work to collect / calculate the values
- # for each dimension
-
- # here we parse the system average load
- # it is decimal (with 2 decimal digits), so we remove the dot and
- # at the definition we have divisor = 100, to have the graph show the right value
- loadavg="`cat /proc/loadavg | sed -e "s/\.//g"`"
- load1=`echo $loadavg | cut -d ' ' -f 1`
- load5=`echo $loadavg | cut -d ' ' -f 2`
- load15=`echo $loadavg | cut -d ' ' -f 3`
-
- value1=$RANDOM
- value2=$RANDOM
- value3=$RANDOM
-
- # write the result of the work.
- cat <<VALUESEOF
-BEGIN example.load
-SET load1 = $load1
-SET load5 = $load5
-SET load15 = $load15
-END
-
-BEGIN example.random
-SET random1 = $value1
-SET random2 = $value2
-SET random3 = $value3
-END
-VALUESEOF
-
- # if you have more charts, add BEGIN->END statements here
-
- # wait the time you are required to
- loopsleepms $update_every
-done
--- /dev/null
+#!/bin/sh
+
+# report our PID back to netdata
+# this is required for netdata to kill this process when it exits
+echo "MYPID $$"
+
+# default sleep function
+loopsleepms() {
+ sleep $1
+}
+# if found and included, this file overwrites loopsleepms()
+# with a high resolution timer function for precise looping.
+. "`dirname $0`/loopsleepms.sh.inc"
+
+# netdata passes the requested update frequency as the first argument
+update_every=$1
+update_every=$(( update_every + 1 - 1)) # makes sure it is a number
+test $update_every -eq 0 && update_every=1 # if it is zero, make it 1
+
+
+# create the chart with 3 dimensions
+cat <<EOF
+CHART example.load '' "System Load Average" "load" load load line 500 $update_every
+DIMENSION load1 '1 min' absolute 1 100
+DIMENSION load5 '5 mins' absolute 1 100
+DIMENSION load15 '15 mins' absolute 1 100
+
+CHART example.random '' "Random Numbers Stacked Chart" "% of random numbers" random random stacked 5000 $update_every
+DIMENSION random1 '' percentage-of-absolute-row 1 1
+DIMENSION random2 '' percentage-of-absolute-row 1 1
+DIMENSION random3 '' percentage-of-absolute-row 1 1
+EOF
+
+# You can create more charts if you like.
+# Just add more chart definitions.
+
+# work forever
+while [ 1 ]
+do
+ # do all the work to collect / calculate the values
+ # for each dimension
+
+ # here we parse the system average load
+ # it is decimal (with 2 decimal digits), so we remove the dot and
+ # at the definition we have divisor = 100, to have the graph show the right value
+ loadavg="`cat /proc/loadavg | sed -e "s/\.//g"`"
+ load1=`echo $loadavg | cut -d ' ' -f 1`
+ load5=`echo $loadavg | cut -d ' ' -f 2`
+ load15=`echo $loadavg | cut -d ' ' -f 3`
+
+ value1=$RANDOM
+ value2=$RANDOM
+ value3=$RANDOM
+
+ # write the result of the work.
+ cat <<VALUESEOF
+BEGIN example.load
+SET load1 = $load1
+SET load5 = $load5
+SET load15 = $load15
+END
+
+BEGIN example.random
+SET random1 = $value1
+SET random2 = $value2
+SET random3 = $value3
+END
+VALUESEOF
+
+ # if you have more charts, add BEGIN->END statements here
+
+ # wait the time you are required to
+ loopsleepms $update_every
+done
--- /dev/null
+#!/bin/sh
+
+load_average_check() {
+ # this should return:
+ # - 0 to enable the chart
+ # - 1 to disable the chart
+
+ return 0
+}
+
+load_average_create() {
+ # create a chart with 3 dimensions
+cat <<EOF
+CHART example.load '' "System Load Average" "load" load load line 500 $update_every
+DIMENSION load1 '1 min' absolute 1 100
+DIMENSION load5 '5 mins' absolute 1 100
+DIMENSION load15 '15 mins' absolute 1 100
+EOF
+
+ return 0
+}
+
+load_average_update() {
+ # do all the work to collect / calculate the values
+ # for each dimension
+ # remember: KEEP IT SIMPLE AND SHORT
+
+ # here we parse the system average load
+ # it is decimal (with 2 decimal digits), so we remove the dot and
+ # at the definition we have divisor = 100, to have the graph show the right value
+ loadavg="`cat /proc/loadavg | sed -e "s/\.//g"`"
+ load1=`echo $loadavg | cut -d ' ' -f 1`
+ load5=`echo $loadavg | cut -d ' ' -f 2`
+ load15=`echo $loadavg | cut -d ' ' -f 3`
+
+ # write the result of the work.
+ cat <<VALUESEOF
+BEGIN example.load
+SET load1 = $load1
+SET load5 = $load5
+SET load15 = $load15
+END
+VALUESEOF
+
+ return 0
+}
+
+++ /dev/null
-#!/bin/sh
-
-url="http://127.0.0.1:8080/squid-internal-mgr/counters"
-
-# report our PID back to netdata
-# this is required for netdata to kill this process when it exits
-echo "MYPID $$"
-
-# default sleep function
-loopsleepms() {
- sleep $1
-}
-# if found and included, this file overwrites loopsleepms()
-# with a high resolution timer function for precise looping.
-. "`dirname $0`/loopsleepms.sh.inc"
-
-# netdata passes the requested update frequency as the first argument
-update_every=$1
-update_every=$(( update_every + 1 - 1)) # makes sure it is a number
-test $update_every -eq 0 && update_every=1 # if it is zero, make it 1
-
-# we accept a url as the second argument
-if [ ! -z "$2" ]
-then
- url="$2"
-fi
-
-# check once if the url works
-wget 2>/dev/null -O /dev/null "$url"
-if [ ! $? -eq 0 ]
-then
- # it does not work - disable the plugin
- echo "DISABLE"
- exit 1
-fi
-
-# create the charts
-cat <<EOF
-CHART squid.client_bandwidth '' "Squid Client Bandwidth" "kilobits/s" squid squid area 1 $update_every
-DIMENSION client_http_kbytes_in in incremental 8 1
-DIMENSION client_http_kbytes_out out incremental -8 1
-DIMENSION client_http_hit_kbytes_out hits incremental -8 1
-
-CHART squid.client_requests '' "Squid Client Requests" "requests/s" squid squid line 3 $update_every
-DIMENSION client_http_requests requests incremental 1 1
-DIMENSION client_http_hits hits incremental 1 1
-DIMENSION client_http_errors errors incremental -1 1
-
-CHART squid.server_bandwidth '' "Squid Server Bandwidth" "kilobits/s" squid squid area 2 $update_every
-DIMENSION server_all_kbytes_in in incremental 8 1
-DIMENSION server_all_kbytes_out out incremental -8 1
-
-CHART squid.server_requests '' "Squid Server Requests" "requests/s" squid squid line 4 $update_every
-DIMENSION server_all_requests requests incremental 1 1
-DIMENSION server_all_errors errors incremental -1 1
-EOF
-
-# You can create more charts if you like.
-# Just add more chart definitions.
-
-# work forever
-while [ 1 ]
-do
- # do all the work to collect / calculate the values
- # for each dimension
-
- # get the values from squid
- eval `wget 2>/dev/null -O - "$url" | sed -e "s/\./_/g" -e "s/ = /=/g" | egrep "(^client_http_|^server_all_)"`
-
- # write the result of the work.
- cat <<VALUESEOF
-BEGIN squid.client_bandwidth
-SET client_http_kbytes_in = $client_http_kbytes_in
-SET client_http_kbytes_out = $client_http_kbytes_out
-SET client_http_hit_kbytes_out = $client_http_hit_kbytes_out
-END
-
-BEGIN squid.client_requests
-SET client_http_requests = $client_http_requests
-SET client_http_hits = $client_http_hits
-SET client_http_errors = $client_http_errors
-END
-
-BEGIN squid.server_bandwidth
-SET server_all_kbytes_in = $server_all_kbytes_in
-SET server_all_kbytes_out = $server_all_kbytes_out
-END
-
-BEGIN squid.server_requests
-SET server_all_requests = $server_all_requests
-SET server_all_errors = $server_all_errors
-END
-VALUESEOF
-
- # wait the time you are required to
- loopsleepms $update_every
-done
--- /dev/null
+#!/bin/sh
+
+url="http://127.0.0.1:8080/squid-internal-mgr/counters"
+
+# report our PID back to netdata
+# this is required for netdata to kill this process when it exits
+echo "MYPID $$"
+
+# default sleep function
+loopsleepms() {
+ sleep $1
+}
+# if found and included, this file overwrites loopsleepms()
+# with a high resolution timer function for precise looping.
+. "`dirname $0`/loopsleepms.sh.inc"
+
+# netdata passes the requested update frequency as the first argument
+update_every=$1
+update_every=$(( update_every + 1 - 1)) # makes sure it is a number
+test $update_every -eq 0 && update_every=1 # if it is zero, make it 1
+
+# we accept a url as the second argument
+if [ ! -z "$2" ]
+then
+ url="$2"
+fi
+
+# check once if the url works
+wget 2>/dev/null -O /dev/null "$url"
+if [ ! $? -eq 0 ]
+then
+ # it does not work - disable the plugin
+ echo "DISABLE"
+ exit 1
+fi
+
+# create the charts
+cat <<EOF
+CHART squid.client_bandwidth '' "Squid Client Bandwidth" "kilobits/s" squid squid area 1 $update_every
+DIMENSION client_http_kbytes_in in incremental 8 1
+DIMENSION client_http_kbytes_out out incremental -8 1
+DIMENSION client_http_hit_kbytes_out hits incremental -8 1
+
+CHART squid.client_requests '' "Squid Client Requests" "requests/s" squid squid line 3 $update_every
+DIMENSION client_http_requests requests incremental 1 1
+DIMENSION client_http_hits hits incremental 1 1
+DIMENSION client_http_errors errors incremental -1 1
+
+CHART squid.server_bandwidth '' "Squid Server Bandwidth" "kilobits/s" squid squid area 2 $update_every
+DIMENSION server_all_kbytes_in in incremental 8 1
+DIMENSION server_all_kbytes_out out incremental -8 1
+
+CHART squid.server_requests '' "Squid Server Requests" "requests/s" squid squid line 4 $update_every
+DIMENSION server_all_requests requests incremental 1 1
+DIMENSION server_all_errors errors incremental -1 1
+EOF
+
+# You can create more charts if you like.
+# Just add more chart definitions.
+
+# work forever
+while [ 1 ]
+do
+ # do all the work to collect / calculate the values
+ # for each dimension
+
+ # get the values from squid
+ eval `wget 2>/dev/null -O - "$url" | sed -e "s/\./_/g" -e "s/ = /=/g" | egrep "(^client_http_|^server_all_)"`
+
+ # write the result of the work.
+ cat <<VALUESEOF
+BEGIN squid.client_bandwidth
+SET client_http_kbytes_in = $client_http_kbytes_in
+SET client_http_kbytes_out = $client_http_kbytes_out
+SET client_http_hit_kbytes_out = $client_http_hit_kbytes_out
+END
+
+BEGIN squid.client_requests
+SET client_http_requests = $client_http_requests
+SET client_http_hits = $client_http_hits
+SET client_http_errors = $client_http_errors
+END
+
+BEGIN squid.server_bandwidth
+SET server_all_kbytes_in = $server_all_kbytes_in
+SET server_all_kbytes_out = $server_all_kbytes_out
+END
+
+BEGIN squid.server_requests
+SET server_all_requests = $server_all_requests
+SET server_all_errors = $server_all_errors
+END
+VALUESEOF
+
+ # wait the time you are required to
+ loopsleepms $update_every
+done
--- /dev/null
+squid=yes
+test=yes
+example=yes
+load_average=yes
--- /dev/null
+squid_url="http://127.0.0.1:3128/squid-internal-mgr/counters"
--- /dev/null
+#!/bin/sh
+
+# will stop the script for any error
+set -e
+
+me="$0"
+name="$1"
+chart="$2"
+conf="$3"
+
+can_diff=1
+
+tmp1=`mktemp`
+tmp2=`mktemp`
+
+myset() {
+ set | grep -v "^_=" | grep -v "^PIPESTATUS=" | grep -v "^BASH_LINENO="
+}
+
+# save 2 'set'
+myset >"$tmp1"
+myset >"$tmp2"
+
+# make sure they don't differ
+diff "$tmp1" "$tmp2" >/dev/null 2>&1
+if [ $? -ne 0 ]
+then
+ # they differ, we cannot do the check
+ echo >&2 "$me: cannot check with diff."
+ can_diff=0
+fi
+
+# do it again, now including the script
+myset >"$tmp1"
+
+# include the plugin and its config
+if [ -f "$conf" ]
+then
+ . "$conf"
+ if [ $? -ne 0 ]
+ then
+ echo >&2 "$me: cannot load config file $conf"
+ rm "$tmp1" "$tmp2"
+ exit 1
+ fi
+fi
+
+. "$chart"
+if [ $? -ne 0 ]
+then
+ echo >&2 "$me: cannot load chart file $chart"
+ rm "$tmp1" "$tmp2"
+ exit 1
+fi
+
+# remove all variables starting with the plugin name
+myset | grep -v "^$name" >"$tmp2"
+
+if [ $can_diff -eq 1 ]
+then
+ # check if they are different
+ # make sure they don't differ
+ diff "$tmp1" "$tmp2" >&2
+ if [ $? -ne 0 ]
+ then
+ # they differ
+ rm "$tmp1" "$tmp2"
+ exit 1
+ fi
+fi
+
+rm "$tmp1" "$tmp2"
+exit 0
--- /dev/null
+#!/bin/sh
+
+check=0
+if [ "$1" = "check" ]
+then
+ check=1
+ shift
+fi
+
+# default sleep function
+loopsleepms() {
+ sleep $1
+}
+# if found and included, this file overwrites loopsleepms()
+# with a high resolution timer function for precise looping.
+. "`dirname $0`/loopsleepms.sh.inc"
+
+# netdata passes the requested update frequency as the first argument
+update_every=$1
+update_every=$(( update_every + 1 - 1)) # makes sure it is a number
+test $update_every -eq 0 && update_every=1 # if it is zero, make it 1
+
+pluginsd="plugins.d"
+confd="conf.d"
+chartsd="charts.d"
+myconfig="$confd/charts.d.conf"
+minimum_update_frequency=1
+
+# load the configuration
+if [ -f "$myconfig" ]
+ then
+ . "$myconfig"
+ if [ $? -ne 0 ]
+ then
+ echo >&2 "charts.d: cannot load $myconfig"
+ echo "DISABLE"
+ exit 1
+ fi
+fi
+
+if [ ! -d "$chartsd" ]
+ then
+ echo >&2 "charts.d: cannot find charts directory '$chartsd'"
+ echo "DISABLE"
+fi
+
+all_charts() {
+ cd "$chartsd"
+ ls *.chart.sh | sed "s/\.chart\.sh$//g"
+}
+
+all_enabled_charts() {
+ local charts=
+
+ # find all enabled charts
+
+ for x in `all_charts`
+ do
+ eval "enabled=\$$x"
+ if [ "$enabled" = "yes" ]
+ then
+ local charts="$charts $x"
+ else
+ echo >&2 "charts.d: chart '$x' is NOT enabled. Add a line with $x=yes in $myconfig to enable it."
+ fi
+ done
+
+ local charts2=
+ for x in $charts
+ do
+ # check the enabled charts
+ local check=`cat "$chartsd/$x.chart.sh" | sed "s/^ \+//g" | grep "^${x}_check()"`
+ if [ -z "$check" ]
+ then
+ echo >&2 "charts.d: chart '$x' does not seem to have a ${x}_check() function. Disabling it."
+ continue
+ fi
+
+ local create=`cat "$chartsd/$x.chart.sh" | sed "s/^ \+//g" | grep "^${x}_create()"`
+ if [ -z "$create" ]
+ then
+ echo >&2 "charts.d: chart '$x' does not seem to have a ${x}_create() function. Disabling it."
+ continue
+ fi
+
+ local update=`cat "$chartsd/$x.chart.sh" | sed "s/^ \+//g" | grep "^${x}_update()"`
+ if [ -z "$update" ]
+ then
+ echo >&2 "charts.d: chart '$x' does not seem to have a ${x}_update() function. Disabling it."
+ continue
+ fi
+
+ # check its config
+ if [ -f "$confd/$x.conf" ]
+ then
+ if [ ! -z "`cat "$confd/$x.conf" | sed "s/^ \+//g" | grep -v "^$" | grep -v "^#" | grep -v "^${x}_"`" ]
+ then
+ echo >&2 "charts.d: chart's $x config $confd/$x.conf should only have lines starting with ${x}_ . Disabling it."
+ continue
+ fi
+ fi
+
+ "$pluginsd/charts.d.dryrun-helper.sh" "$x" "$chartsd/$x.chart.sh" "$confd/$x.conf" >/dev/null
+ if [ $? -ne 0 ]
+ then
+ echo >&2 "charts.d: chart's $x did not pass the dry run check. This means it uses global variables not starting with $x. Disabling it."
+ continue
+ fi
+
+ local charts2="$charts2 $x"
+ done
+
+ echo $charts2
+}
+
+
+active_charts=
+for x in `all_enabled_charts`
+do
+ . "$chartsd/$x.chart.sh"
+
+ if [ -f "$confd/$x.conf" ]
+ then
+ . "$confd/$x.conf"
+ fi
+
+ ${x}_check
+ if [ $? -eq 0 ]
+ then
+ active_charts="$active_charts $x"
+ else
+ echo >&2 "charts.d: chart '$x' check() function reports failure."
+ fi
+done
+
+if [ $check -eq 1 ]
+then
+ echo "CHECK RESULT"
+ echo "Will run the charts: $active_charts"
+ exit 0
+fi
+
+run_charts=
+for x in $active_charts
+do
+ ${x}_create
+ if [ $? -eq 0 ]
+ then
+ run_charts="$run_charts $x"
+ else
+ echo >&2 "charts.d: chart '$x' create() function reports failure."
+ fi
+done
+
+# work forever
+while [ 1 ]
+do
+ now_charts=$run_charts
+ run_charts=
+
+ for x in $now_charts
+ do
+ ${x}_update
+ if [ $? -eq 0 ]
+ then
+ run_charts="$run_charts $x"
+ else
+ echo >&2 "charts.d: chart '$x' update() function reports failure. Disabling it."
+ fi
+ done
+
+ # wait the time you are required to
+ loopsleepms $update_every
+done