diff --git a/plugins/cpu/cpu_osx b/plugins/cpu/cpu_osx new file mode 100755 index 00000000..43d64641 --- /dev/null +++ b/plugins/cpu/cpu_osx @@ -0,0 +1,80 @@ +#!/bin/sh +# -*- sh -*- + +# shellcheck disable=SC2046 + +: << =cut + +=head1 NAME + +cpu - Plugin to measure cpu on osx. + +=head1 NOTES + +This plugin runs the top command once per interval, to discover the current value of CPU usage on OSX. +The result is scaled to # of CPU's, so a 4 core machine will reach 400% utilization (unless $scaleto100 is set to "yes", in which case the maximum will be 100%). + +Contributions are welcome to convert the plugin to use a long running counter such as /proc/stat in Linux. + +=head1 LICENSE + +GPLv2 + +=head1 MAGIC MARKERS + + #%# family=auto + #%# capabilities=autoconf + +=cut + +if [ "$1" = "autoconf" ]; then + if [ "$(uname)" = "Darwin" ]; then + echo yes + exit 0 + else + echo "no (uname does not report 'Darwin')" + exit 0 + fi +fi + +scaleto100=${scaleto100:-} + +if [ "$scaleto100" = "yes" ]; then + NCPU="1" +else + NCPU=$(sysctl hw.ncpu | cut -d" " -f2) +fi + +if [ "$1" = "config" ]; then + graphlimit=$(( NCPU*100 )) + echo 'graph_title CPU usage' + echo "graph_order system user idle" + echo "graph_args --base 1000 -r --lower-limit 0 --upper-limit $graphlimit" + echo 'graph_scale no' + echo 'graph_vlabel %' + echo 'graph_category system' + echo 'system.label system' + echo 'system.draw AREA' + echo 'system.min 0' + echo "system.info CPU time spent by the kernel in system activities" + echo 'user.label user' + echo 'user.draw STACK' + echo 'user.min 0' + echo 'user.info CPU time spent by normal programs and daemons' + echo 'idle.label idle' + echo 'idle.draw STACK' + echo 'idle.min 0' + echo 'idle.info Idle CPU time' + + exit 0 +fi + +# The second cpu reading is more accurate than the first, so "-l 2": +TOPINFO=$(top -l 2 | grep "CPU usage: " | tail -n 1) + +CPU_USER=$(echo "$TOPINFO" | awk '/CPU usage: / { print substr($3, 1, length($3)-1) }') +CPU_SYS=$(echo "$TOPINFO" | awk '/CPU usage: / { print substr($5, 1, length($5)-1) }') +CPU_IDLE=$(echo "$TOPINFO" | awk '/CPU usage: / { print substr($7, 1, length($7)-1) }') +echo "system.value" $(echo "$NCPU" "$CPU_SYS" | awk '{print($1 * $2)}') +echo "user.value" $(echo "$NCPU" "$CPU_USER" | awk '{print($1 * $2)}') +echo "idle.value" $(echo "$NCPU" "$CPU_IDLE" | awk '{print($1 * $2)}') diff --git a/plugins/memory/memory_osx b/plugins/memory/memory_osx new file mode 100755 index 00000000..319eaa04 --- /dev/null +++ b/plugins/memory/memory_osx @@ -0,0 +1,67 @@ +#!/bin/sh +# -*- sh -*- + +# shellcheck disable=SC2046 + +: << =cut + +=head1 NAME + +memory - Plugin to measure memory on osx. + +=head1 NOTES + +This plugin runs the top command once per interval, to discover memory usage on OSX. +Contributions are welcome to collect additional memory regions, if possible, such as buffers and caches. + +=head1 LICENSE + +GPLv2 + +=head1 MAGIC MARKERS + + #%# family=auto + #%# capabilities=autoconf + +=cut + +if [ "$1" = "autoconf" ]; then + if [ "$(uname)" = "Darwin" ]; then + echo yes + exit 0 + else + echo "no (uname does not report 'Darwin')" + exit 0 + fi +fi + +TOTALMEM=$(sysctl hw.memsize | cut -d" " -f2) +graphlimit=$TOTALMEM + +dehumanise() { + echo "$1" | sed -e "s/K/*1024/g;s/M/*1024*1024/;s/G/*1024*1024*1024/;s/T/*1024*1024*1024*1024/" +} + +if [ "$1" = "config" ]; then + echo 'graph_title Memory' + echo "graph_order used wired unused" + echo "graph_args --base 1024 -r --lower-limit 0 --upper-limit $graphlimit" + echo 'graph_vlabel Bytes' + echo 'graph_category system' + echo 'used.label used (not incl. wired)' + echo 'used.draw AREA' + echo 'used.min 0' + echo "used.info Used memory, not including wired" + echo 'wired.label wired' + echo 'wired.draw STACK' + echo 'wired.min 0' + echo 'wired.info Wired memory' + + exit 0 +fi + +TOPINFO=$(top -l 1 | grep "PhysMem: ") +MEM_USED=$(echo "$TOPINFO" | awk '/PhysMem: / { print substr($2, 1, length($2)) }') +MEM_WIRED=$(echo "$TOPINFO" | awk '/PhysMem: / { print substr($4, 2, length($4)-1) }') +echo "used.value" $(( $(dehumanise "$MEM_USED") - $(dehumanise "$MEM_WIRED") )) +echo "wired.value" $(( $(dehumanise "$MEM_WIRED") ))