#!/bin/bash +x #cat stellar_fs4.json |jq #[ # { # "name": "stellar", # "tags": {}, # "fields": { # "dev_rx_pkts": 90099, # "dev_rx_bytes": 63205423, # "dev_tx_pkts": 90082, # "dev_tx_bytes": 63194807, # "keep_alive_pkts": 0, # "keep_alive_bytes": 0, # "raw_rx_pkts": 90099, # "raw_rx_bytes": 63205423, # "raw_tx_pkts": 90082, # "raw_tx_bytes": 63194807, # "ctrl_rx_pkts": 0, # "ctrl_rx_bytes": 0, # "ctrl_tx_pkts": 0, # "ctrl_tx_bytes": 0, # "tcp_sess_used": 480, # "tcp_sess_opening": 0, # "tcp_sess_active": 141, # "tcp_sess_closing": 339, # "tcp_sess_discard": 0, # "tcp_sess_closed": 0, # "udp_sess_used": 0, # "udp_sess_opening": 0, # "udp_sess_active": 0, # "udp_sess_closing": 0, # "udp_sess_discard": 0, # "udp_sess_closed": 0, # "tcp_sess_evicted": 0, # "udp_sess_evicted": 0, # "udp_pkts_nospace_bypass": 0, # "tcp_pkts_nospace_bypass": 0, # "tcp_pkts_nosess_bypass": 4769, # "tcp_pkts_duped_bypass": 1796, # "udp_pkts_duped_bypass": 382, # "udp_pkts_evctd_bypass": 0, # "tcp_seg_received": 49833, # "tcp_seg_expired": 0, # "tcp_seg_overlap": 3012, # "tcp_seg_no_space": 36452, # "tcp_seg_inorder": 6189, # "tcp_seg_reorded": 218, # "tcp_seg_buffered": 5967, # "tcp_seg_released": 218 # }, # "timestamp_ms": 1713053113549 # } #] calculate() { local curr_data=$1 local prev_data=$2 local fields=($(echo "$curr_data" | jq -r '.[].fields | to_entries | .[] | .key' | grep -v timestamp_ms)) local curr_ts=$(echo "$curr_data" | jq -r '.[].timestamp_ms') local prev_ts=$(echo "$prev_data" | jq -r '.[].timestamp_ms') local diff_ts=$((($curr_ts - $prev_ts) / 1000)) local seconds=$((curr_ts / 1000)) local buffer=() local curr_fileds=$(echo "$curr_data" | jq -r '.[].fields' | grep -v timestamp_ms) local prev_fileds=$(echo "$prev_data" | jq -r '.[].fields' | grep -v timestamp_ms) buffer+=("====================================$(date -d "@$seconds" +"%Y-%m-%d %H:%M:%S")====================================\n") buffer+=("$(printf "%-30s" Field)$(printf "%-20s" Sum)$(printf "%-20s" Speed)\n") local result=() for field in "${fields[@]}"; do local curr_val=$(echo "$curr_fileds" | grep $field | awk '{print $2}' | sed 's/,//g') local prev_val=$(echo "$prev_fileds" | grep $field | awk '{print $2}' | sed 's/,//g') local diff_val=$((curr_val - prev_val)) local speed=0 if [ $diff_ts -eq 0 ]; then speed=0 else speed=$((diff_val / diff_ts)) fi buffer+=("$(printf "%-30s" $field)$(printf "%-20s" $curr_val)$(printf "%-20s" $speed)\n") done buffer+=("===========================================================================================\n") clear echo -e "${buffer[@]}" } prev_data="" while true; do curr_data=$(cat /opt/tsg/stellar/log/stellar_fs4.json) if [ ! -z "$prev_data" ]; then calculate "$curr_data" "$prev_data" fi prev_data="$curr_data" sleep 1 done