summaryrefslogtreecommitdiff
path: root/scripts/shell_stat.sh
blob: 0ba64a38972be746923ad1e0b97b691551e76bb0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#!/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))
    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 * 1000 / 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