|
| 1 | +#!/bin/sh |
| 2 | +# Please make sure the paths below are correct. |
| 3 | +# Alternatively you can put them in $0.conf, meaning if you've named |
| 4 | +# this script ntp-client then it must go in ntp-client.conf . |
| 5 | +# |
| 6 | +# If you are unsure, which to set, run this script and make sure that |
| 7 | +# the JSON output variables match that in "ntpq -c rv". |
| 8 | +# |
| 9 | +################################################################ |
| 10 | +# Don't change anything unless you know what are you doing # |
| 11 | +################################################################ |
| 12 | +BIN_GREP='/usr/bin/env grep' |
| 13 | +BIN_AWK='/usr/bin/env awk' |
| 14 | + |
| 15 | +if dpkg-query -W -f='${status}' ntpsec | grep -q "ok installed"; then |
| 16 | + |
| 17 | + BIN_NTPQ='/usr/bin/env ntpq' |
| 18 | + |
| 19 | + CONFIG=$0".conf" |
| 20 | + if [ -f "$CONFIG" ]; then |
| 21 | + # shellcheck disable=SC1090 |
| 22 | + . "$CONFIG" |
| 23 | + fi |
| 24 | + |
| 25 | + NTP_RV=$($BIN_NTPQ -c rv 127.0.0.1) |
| 26 | + NTP_IOSTAT=$($BIN_NTPQ -c iostat 127.0.0.1 2> /dev/null) |
| 27 | + |
| 28 | + NTP_STRATUM=$(echo $NTP_RV | $BIN_AWK -Fstratum= '{print $2}' | $BIN_AWK -F, '{print $1}') |
| 29 | + NTP_OFFSET=$(echo $NTP_RV | $BIN_AWK -Foffset= '{print $2}' | $BIN_AWK -F, '{print $1}') |
| 30 | + NTP_FREQUENCY=$(echo $NTP_RV | $BIN_AWK -Ffrequency= '{print $2}' | $BIN_AWK -F, '{print $1}') |
| 31 | + NTP_SYS_JITTER=$(echo $NTP_RV | $BIN_AWK -Fsys_jitter= '{print $2}' | $BIN_AWK -F, '{print $1}') |
| 32 | + NTP_CLK_JITTER=$(echo $NTP_RV | $BIN_AWK -Fclk_jitter= '{print $2}' | $BIN_AWK -F, '{print $1}') |
| 33 | + NTP_WANDER=$(echo $NTP_RV | $BIN_AWK -Fclk_wander= '{print $2}' | $BIN_AWK -F, '{print $1}') |
| 34 | + NTP_RESET=$(echo $NTP_IOSTAT | $BIN_GREP "reset" | sed 's/.*reset://' | grep -oE '[0-9:]+' | head -n 1 ) |
| 35 | + NTP_RESET=$(date -u -d "1970-01-01 $NTP_RESET" +"%s") |
| 36 | + NTP_FREE_BUFFER=$(echo $NTP_IOSTAT | sed 's/.*free receive buffers://' | grep -oE '[0-9:]+' | head -n 1 ) |
| 37 | + NTP_USED_BUFFER=$(echo $NTP_IOSTAT | sed 's/.*used receive buffers://' | grep -oE '[0-9:]+' | head -n 1 ) |
| 38 | + NTP_BUFFERS=$(($NTP_USED_BUFFER + $NTP_FREE_BUFFER)) |
| 39 | + NTP_DROP_PACK=$(echo $NTP_IOSTAT | sed 's/.*dropped packets://' | grep -oE '[0-9]+' | head -n 1) |
| 40 | + NTP_IGNOR_PACK=$(echo $NTP_IOSTAT | sed 's/.*ignored packets://' | grep -oE '[0-9]+' | head -n 1) |
| 41 | + NTP_RCV_PACK=$(echo $NTP_IOSTAT | sed 's/.*received packets://' | grep -oE '[0-9]+' | head -n 1) |
| 42 | + NTP_SENT_PACK=$(echo $NTP_IOSTAT | sed 's/.*packets sent://' | grep -oE '[0-9]+' | head -n 1) |
| 43 | + |
| 44 | + echo '{"data":{"stratum":"'"$NTP_STRATUM"'","offset":"'"$NTP_OFFSET"'","frequency":"'"$NTP_FREQUENCY"'","sys_jitter":"'"$NTP_SYS_JITTER"'","clk_jitter":"'"$NTP_CLK_JITTER"'","clk_wander":"'"$NTP_WANDER"'","time_since_reset":"'"$NTP_RESET"'","receive_buffers":"'"$NTP_BUFFERS"'","free_receive_buffers":"'"$NTP_FREE_BUFFER"'","used_receive_buffers":"'"$NTP_USED_BUFFER"'","dropped_packets":"'"$NTP_DROP_PACK"'","ignored_packets":"'"$NTP_IGNOR_PACK"'","received_packets":"'"$NTP_RCV_PACK"'","packets_sent":"'"$NTP_SENT_PACK"'"},"version":"1","error":"0","errorString":""}' |
| 45 | +fi |
| 46 | + |
| 47 | +if dpkg-query -W -f='${status}' systemd-timesyncd | grep -q "ok installed"; then |
| 48 | + BIN_TIMEDATECTL='/usr/bin/env timedatectl' |
| 49 | + NTP_TIMESYNCD=$($BIN_TIMEDATECTL timesync-status) |
| 50 | + NTP_OFFSET=$(echo $NTP_TIMESYNCD | sed 's/.*Offset://' | grep -oE '[0-9.]+' | head -n 1) |
| 51 | + NTP_FREQUENCY=$(echo $NTP_TIMESYNCD | sed 's/.*Frequency://' | grep -oE '[0-9.]+' | head -n 1) |
| 52 | + NTP_JITTER=$(echo $NTP_TIMESYNCD | sed 's/.*Jitter://' | grep -oE '[0-9.]+' | head -n 1) |
| 53 | + NTP_DELAY=$(echo $NTP_TIMESYNCD | sed 's/.*Delay://' | grep -oE '[0-9.]+' | head -n 1) |
| 54 | + |
| 55 | + echo '{"data":{"offset":"'"$NTP_OFFSET"'","frequency":"'"$NTP_FREQUENCY"'","jitter":"'"$NTP_JITTER"'","delay":"'"$NTP_DELAY"'"},"version":"1","error":"0","errorString":""}' |
| 56 | +fi |
| 57 | + |
| 58 | +exit 0 |
0 commit comments