90 lines
3.5 KiB
Bash
90 lines
3.5 KiB
Bash
#!/bin/sh
|
|
# Please make sure the paths below are correct.
|
|
# Alternatively you can put them in $0.conf, meaning if you've named
|
|
# this script ntp-client.sh then it must go in ntp-client.sh.conf .
|
|
#
|
|
# NTPQV output version of "ntpq -c rv"
|
|
# p1 DD-WRT and some other outdated linux distros
|
|
# p11 FreeBSD 11 and any linux distro that is up to date
|
|
#
|
|
# If you are unsure, which to set, run this script and make sure that
|
|
# the JSON output variables match that in "ntpq -c rv".
|
|
#
|
|
BIN_NTPD='/usr/bin/env ntpd'
|
|
BIN_NTPQ='/usr/bin/env ntpq'
|
|
BIN_NTPDC='/usr/bin/env ntpdc'
|
|
BIN_GREP='/usr/bin/env grep'
|
|
BIN_TR='/usr/bin/env tr'
|
|
BIN_CUT='/usr/bin/env cut'
|
|
BIN_SED="/usr/bin/env sed"
|
|
BIN_AWK='/usr/bin/env awk'
|
|
NTPQV="p11"
|
|
################################################################
|
|
# Don't change anything unless you know what are you doing #
|
|
################################################################
|
|
CONFIG=$0".conf"
|
|
if [ -f $CONFIG ]; then
|
|
. $CONFIG
|
|
fi
|
|
VERSION=1
|
|
|
|
STRATUM=`$BIN_NTPQ -c rv | $BIN_GREP -Eow "stratum=[0-9]+" | $BIN_CUT -d "=" -f 2`
|
|
|
|
# parse the ntpq info that requires version specific info
|
|
NTPQ_RAW=`$BIN_NTPQ -c rv | $BIN_GREP jitter | $BIN_SED 's/[[:alpha:]=,_]/ /g'`
|
|
if [ $NTPQV = "p11" ]; then
|
|
OFFSET=`echo $NTPQ_RAW | $BIN_AWK -F ' ' '{print $3}'`
|
|
FREQUENCY=`echo $NTPQ_RAW | $BIN_AWK -F ' ' '{print $4}'`
|
|
SYS_JITTER=`echo $NTPQ_RAW | $BIN_AWK -F ' ' '{print $5}'`
|
|
CLK_JITTER=`echo $NTPQ_RAW | $BIN_AWK -F ' ' '{print $6}'`
|
|
CLK_WANDER=`echo $NTPQ_RAW | $BIN_AWK -F ' ' '{print $7}'`
|
|
fi
|
|
if [ $NTPQV = "p1" ]; then
|
|
OFFSET=`echo $NTPQ_RAW | $BIN_AWK -F ' ' '{print $2}'`
|
|
FREQUENCY=`echo $NTPQ_RAW | $BIN_AWK -F ' ' '{print $3}'`
|
|
SYS_JITTER=`echo $NTPQ_RAW | $BIN_AWK -F ' ' '{print $4}'`
|
|
CLK_JITTER=`echo $NTPQ_RAW | $BIN_AWK -F ' ' '{print $5}'`
|
|
CLK_WANDER=`echo $NTPQ_RAW | $BIN_AWK -F ' ' '{print $6}'`
|
|
fi
|
|
|
|
VER=`$BIN_NTPD --version`
|
|
if [ "$VER" = '4.2.6p5' ]; then
|
|
USECMD=`echo $BIN_NTPDC -c iostats`
|
|
else
|
|
USECMD=`echo $BIN_NTPQ -c iostats localhost`
|
|
fi
|
|
CMD2=`$USECMD | $BIN_TR -d ' ' | $BIN_CUT -d : -f 2 | $BIN_TR '\n' ' '`
|
|
|
|
TIMESINCERESET=`echo $CMD2 | $BIN_AWK -F ' ' '{print $1}'`
|
|
RECEIVEDBUFFERS=`echo $CMD2 | $BIN_AWK -F ' ' '{print $2}'`
|
|
FREERECEIVEBUFFERS=`echo $CMD2 | $BIN_AWK -F ' ' '{print $3}'`
|
|
USEDRECEIVEBUFFERS=`echo $CMD2 | $BIN_AWK -F ' ' '{print $4}'`
|
|
LOWWATERREFILLS=`echo $CMD2 | $BIN_AWK -F ' ' '{print $5}'`
|
|
DROPPEDPACKETS=`echo $CMD2 | $BIN_AWK -F ' ' '{print $6}'`
|
|
IGNOREDPACKETS=`echo $CMD2 | $BIN_AWK -F ' ' '{print $7}'`
|
|
RECEIVEDPACKETS=`echo $CMD2 | $BIN_AWK -F ' ' '{print $8}'`
|
|
PACKETSSENT=`echo $CMD2 | $BIN_AWK -F ' ' '{print $9}'`
|
|
PACKETSENDFAILURES=`echo $CMD2 | $BIN_AWK -F ' ' '{print $10}'`
|
|
INPUTWAKEUPS=`echo $CMD2 | $BIN_AWK -F ' ' '{print $11}'`
|
|
USEFULINPUTWAKEUPS=`echo $CMD2 | $BIN_AWK -F ' ' '{print $12}'`
|
|
|
|
echo '{"data":{"offset":"'$OFFSET\
|
|
'","frequency":"'$FREQUENCY\
|
|
'","sys_jitter":"'$SYS_JITTER\
|
|
'","clk_jitter":"'$CLK_JITTER\
|
|
'","clk_wander":"'$CLK_WANDER\
|
|
'","stratum":"'$STRATUM\
|
|
'","time_since_reset":"'$TIMESINCERESET\
|
|
'","receive_buffers":"'$RECEIVEDBUFFERS\
|
|
'","free_receive_buffers":"'$FREERECEIVEBUFFERS\
|
|
'","used_receive_buffers":"'$USEDRECEIVEBUFFERS\
|
|
'","low_water_refills":"'$LOWWATERREFILLS\
|
|
'","dropped_packets":"'$DROPPEDPACKETS\
|
|
'","ignored_packets":"'$IGNOREDPACKETS\
|
|
'","received_packets":"'$RECEIVEDPACKETS\
|
|
'","packets_sent":"'$PACKETSSENT\
|
|
'","packet_send_failures":"'$PACKETSENDFAILURES\
|
|
'","input_wakeups":"'$PACKETSENDFAILURES\
|
|
'","useful_input_wakeups":"'$USEFULINPUTWAKEUPS\
|
|
'"},"error":"0","errorString":"","version":"'$VERSION'"}'
|