|  | #!/bin/sh | 
|  |  | 
|  | PROGRAM_DIR="`dirname \"$0\"`" | 
|  | . "$PROGRAM_DIR/utils.sh" | 
|  | load_config_file "$PROGRAM_DIR/performance-monitor.cfg" | 
|  | load_config_file /etc/performance-monitor.cfg | 
|  | handle_command_line_options "$@" | 
|  | if [ -z "$INFLUXDB_BASE_URL" ] || [ -z "$INFLUXDB_DB_NAME" ]; then | 
|  | echo "INFLUXDB_BASE_URL and INFLUXDB_DB_NAME must be set" 1>&2 | 
|  | exit 1 | 
|  | fi | 
|  | if ! printf %s "$INFLUXDB_BASE_URL" | grep -q -e "^http://" -e "^https://"; then | 
|  | echo "INFLUXDB_BASE_URL doesn't contain a supported protocol" 1>&2 | 
|  | exit 1 | 
|  | fi | 
|  | [ -n "${INFLUXDB_BASE_URL##*/}" ] && INFLUXDB_BASE_URL="$INFLUXDB_BASE_URL/" | 
|  | [ -z "$HTTP_CLIENT" ] && check_http_client | 
|  | [ -z "$INTERVAL" ] && INTERVAL=5 | 
|  | [ -n "$INTERFACE" ] && set_hostname_from_interface "$INTERFACE" | 
|  | [ -z "$HOSTNAME" ] && HOSTNAME="`hostname`" | 
|  | [ "${HTTP_CLIENT%%=*}" = netcat -o "${HTTP_CLIENT%%=*}" = bash ] && prepare_http_server_information | 
|  |  | 
|  | count=0 | 
|  | while true; do | 
|  | line_count=0 | 
|  | while read line; do | 
|  | line_count=$((line_count+1)) | 
|  | [ $line_count -lt 3 ] && continue | 
|  | set -- $line | 
|  | if [ $# != 17 ]; then | 
|  | echo "data error: # $# != 17" 1>&2 | 
|  | continue | 
|  | fi | 
|  | ifname="${1%:}" | 
|  | [ "$ifname" = lo ] && continue | 
|  | e_ifname="`printf %s \"$ifname\" | sed -r 's/[.-]/_/g'`" | 
|  | eval "last_rx=\$last_rx_$e_ifname" | 
|  | eval "last_tx=\$last_tx_$e_ifname" | 
|  | if [ -n "$last_rx" ] && [ -n "$last_tx" ] && [ $count = $INTERVAL ]; then | 
|  | rx_diff=$((${2}-last_rx)) | 
|  | tx_diff=$((${10}-last_tx)) | 
|  | [ "$rx_diff" -lt 0 ] && rx_diff=0 | 
|  | [ "$tx_diff" -lt 0 ] && tx_diff=0 | 
|  | http_post "${INFLUXDB_BASE_URL}write?db=$INFLUXDB_DB_NAME" \ | 
|  | "traffic,host=$HOSTNAME,interface=$ifname receive_rate=$rx_diff,transmit_rate=$tx_diff" | 
|  | fi | 
|  | eval "last_rx_$e_ifname=${2}" | 
|  | eval "last_tx_$e_ifname=${10}" | 
|  | done < /proc/net/dev | 
|  | if [ $count = $INTERVAL ]; then | 
|  | count=0 | 
|  | else | 
|  | count=$((count+1)) | 
|  | fi | 
|  | sleep 1 | 
|  | done |