1 (edytowany przez Rafciq 2013-05-17 11:57:54)

Temat: Skrypt /sbin/sysinfo.sh

Witam,
Cezary nie wiem, kto jest autorem skryptu sysinfo.sh więc kieruję to do Ciebie.

Pozwoliłem sobie na małą modyfikacje tego skryptu:
- zmieniłem wyszukiwanie WAN-u, był na sztywno teraz jest dynamicznie,
- dodałem informacje o DNS-ach i podsieci,
- w WiFi zmieniłem wyświetlanie trybu, dla kilku sta i ap źle pokazywał,
- w WiFi zmieniłem wykrywanie czy włączone jest radio0 na dynamiczne zależne od rzeczywistej ilości interfejsów radio*,
- w WiFi dodałem wykrywanie czy włączony jest konkretny interfejs,
- dodałem sekcję informacji o VPN.

Czy możesz zaktualizować go w Swoich obrazach?

#!/bin/sh
. /lib/functions/network.sh
MACH=""
[ -e /tmp/sysinfo/model ] && MACH=$(cat /tmp/sysinfo/model)

U=$(cut -d. -f1 /proc/uptime)
D=$(expr $U / 60 / 60 / 24)
H=$(expr $U / 60 / 60 % 24)
M=$(expr $U / 60 % 60)
S=$(expr $U % 60)
U=$(printf "%dd, %02d:%02d:%02d" $D $H $M $S)

L=$(awk '{ print $1" "$2" "$3}' /proc/loadavg)

RFS=$(df -h /overlay | awk '/overlay/ {printf "used: %s, total: %s", $3, $2}')

total_mem="$(awk '/^MemTotal:/ {print $2}' /proc/meminfo)"
buffers_mem="$(awk '/^Buffers:/ {print $2}' /proc/meminfo)"
cached_mem="$(awk '/^Cached:/ {print $2}' /proc/meminfo)"
free_mem="$(awk '/^MemFree:/ {print $2}' /proc/meminfo)"
free_mem="$(( ${free_mem} + ${buffers_mem} + ${cached_mem} ))"
MEM=$(echo "free: ""$free_mem""K, total: ""$total_mem""K")

#LAN=$(uci -q get network.lan.ipaddr)
#WAN=$(uci -q -P /var/state get network.wan.ipaddr)
#[ -z "$WAN" ] && WAN=$(ifstatus wan | awk -F\" '/"address"/ {print $4}')
#[ -n "$WAN" ] && WAN="$WAN, proto: "$(uci -q get network.wan.proto)

LAN_DEV="lan"
network_get_ipaddr LAN_IP $LAN_DEV
network_get_subnet LAN_SUBNET $LAN_DEV
network_find_wan WAN_DEV
network_get_ipaddr WAN_IP $WAN_DEV
network_get_subnet WAN_SUBNET $WAN_DEV
network_get_dnsserver WAN_DNS $WAN_DEV
WAN_PROT=$(uci -q get network.$WAN_DEV.proto)

printf " | %-60s |\n" "Machine: $MACH"
printf " | %-60s |\n" "Uptime: $U"
printf " | %-60s |\n" "Load: $L"
printf " | %-60s |\n" "Flash: $RFS"
printf " | %-60s |\n" "Memory: $MEM"
printf " | %-60s |\n" "WAN: $WAN_IP, subnet: $WAN_SUBNET, proto: $WAN_PROT"
printf " | %-60s |\n" "DNS: $WAN_DNS"
printf " | %-60s |\n" "LAN: $LAN_IP, subnet: $LAN_SUBNET"

IFACES=$(uci -q show wireless | grep device=radio | cut -f2 -d.)
for i in $IFACES; do
    SSID=$(uci -q get wireless.$i.ssid)
    DEV=$(uci -q get wireless.$i.device)
    OFF=$(uci -q get wireless.$DEV.disabled)
    OFF2=$(uci -q get wireless.$i.disabled)
    if [ -n "$SSID" ] && [ "$OFF" != "1" ] && [ "$OFF2" != "1" ]; then
        MODE=$(uci -q -P /var/state get wireless.$i.mode)
        RIFACE=$(uci -q -P /var/state get wireless.$i.ifname)
        [ -n "$RIFACE" ] && CNT=$(iw dev $RIFACE station dump | grep Station | wc -l)
        CHANNEL=$(uci -q get wireless.$DEV.channel)
        printf " | %-60s |\n" "WLAN: mode: $MODE, ssid: $SSID, channel: $CHANNEL, conn: $CNT"
    fi
done
VPNS=$(uci -q show openvpn | grep .ca= | cut -f2 -d.)
for VPN in $VPNS; do
    OFF=$(uci -q get openvpn.$VPN.enabled)
    if [ "$OFF" == "1" ] || [ "$OFF" == "" ]; then
        MODE=$(uci -q get openvpn.$VPN.mode)
        STATUS=$(uci -q get openvpn.$VPN.status)
        DEV=$(uci -q get openvpn.$VPN.dev)
        if [ "$MODE" == "server" ]; then
            MODE="$MODE:$(uci -q get openvpn.$VPN.port)"
            CNT=$(cat $STATUS | awk 'BEGIN{FS=",";c=0;l=0}{if($1=="Common Name")l=1;else if($1=="ROUTING TABLE")exit;else if (l==1) c=c+1}END{print c}')

        else
            MODE="client"
            CNT="Down"
            ifconfig $DEV &>/dev/null && CNT="Up"
        fi
        RXTX=$(cat /proc/net/dev | awk -v dev=$DEV 'BEGIN {OFMT = "%.0f";OFS=""}$1==dev ":"{print "Rx:",($2/1024/1024),"M,Tx:",$10/1024/1024,"M"}')
        printf " | %-60s |\n" "VPN: mode: $MODE, dev: $DEV, conn: $CNT, $RXTX"
    fi
    
done
echo " ----------------------------------------------------------------"
exit 0
install.sh - Aktualizacja systemu, sysinfo.sh - Info.o systemie, openvpn-auth.sh - Login dla OpenVPN
Tu moje skrypty na GitHub

2

Odp: Skrypt /sbin/sysinfo.sh

Ja jestem autorem.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

3

Odp: Skrypt /sbin/sysinfo.sh

Fajny pomysł

install.sh - Aktualizacja systemu, sysinfo.sh - Info.o systemie, openvpn-auth.sh - Login dla OpenVPN
Tu moje skrypty na GitHub

4

Odp: Skrypt /sbin/sysinfo.sh

Tylko robi się mały problem. W założeniu miał być to mały szybki status systemu, a apetyt rośnie smile

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

5

Odp: Skrypt /sbin/sysinfo.sh

PS. W Twojej wersji robi błąd - jak sekcja wan w ogóle nie jest zdefiniowana (domyślnie tak jest dla 3020 np.). to jako wan podaje 192.168.1.1/static, co jest nieprawdą.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

6

Odp: Skrypt /sbin/sysinfo.sh

Cezary napisał/a:

Tylko robi się mały problem. W założeniu miał być to mały szybki status systemu, a apetyt rośnie smile

Jak prowokujesz fajnym pomysłem,  to się później nie dziw ze apetyt rośnie. Cos za cos;-)

install.sh - Aktualizacja systemu, sysinfo.sh - Info.o systemie, openvpn-auth.sh - Login dla OpenVPN
Tu moje skrypty na GitHub

7

Odp: Skrypt /sbin/sysinfo.sh

Cezary,
zerknij proszę i napisz jak to widzisz.

#!/bin/sh
#
# sysinfo.sh dla OpenWRT AA Cezary Jackiewicz 2013
# 
#    1.00    CJ    Pierwsza wersja kodu
#    1.01    RD    Drobna przebudowa
#
. /lib/functions/network.sh

human_readable() {
    if [ $1 -gt 0 ]; then
        echo "$(awk -v n=$1 'BEGIN{for(i=split("B KB MB GB TB PB",suffix);s<1;i--)s=n/(2**(10*i));printf "%.0f%s",s,suffix[i+2]}')"
    else
        echo "0"
    fi
}

device_rx_tx() {
    local RXTX=$(awk -v Device=$1 '$1==Device ":"{printf "%d\t%d",$2,$10}' /proc/net/dev)
    [ "$RXTX" != "" ] && echo "rx:$(human_readable $(echo "$RXTX" | cut -f 1)),tx:$(human_readable $(echo "$RXTX" | cut -f 2))"
}

print_line() {
    printf " | %-60s |\n" "$1"
}

print_horizontal_ruler() {
    echo " ----------------------------------------------------------------"
}

print_machine() {
    local Macine=""
    [ -e /tmp/sysinfo/model ] && Machine=$(cat /tmp/sysinfo/model)
    print_line "Machine: $Machine"
}

print_uptime() {
    local Uptime=$(cut -d. -f1 /proc/uptime)
    local Days=$(expr $Uptime / 60 / 60 / 24)
    local Hours=$(expr $Uptime / 60 / 60 % 24)
    local Minutes=$(expr $Uptime / 60 % 60)
    local Seconds=$(expr $Uptime % 60)
    print_line "Uptime: $(printf "%dd, %02d:%02d:%02d" $Days $Hours $Minutes $Seconds), Now: $(date +"%Y-%m-%d %H:%M:%S")"
}

print_loadavg() {
    local LoadAvg=$(awk '{printf"%s,%s,%s",$1,$2,$3}' /proc/loadavg)
    print_line "Load: $LoadAvg"
}

print_flash() {
    local Flash=$(df -k /overlay | awk '/overlay/{printf "%d\t%d\t%.1f",$4*1024,$2*1024,($2>0)?$4/$2*100:0}')
    local Free=$(echo "$Flash" | cut -f 1)
    local Total=$(echo "$Flash" | cut -f 2)
    local Used=$(echo "$Flash" | cut -f 3)
    print_line "Flash: free: $(human_readable $Free), total: $(human_readable $Total), used: $Used%"
}

print_memory() {
    local Memory=$(awk 'BEGIN{Total=0;Free=0}$1~/^MemTotal:/{Total=$2}$1~/^MemFree:|^Buffers:|^Cached:/{Free+=$2}END{printf"%d\t%d\t%.1f",Free*1024,Total*1024,(Total>0)?(((Total-Free)/Total)*100):0}' /proc/meminfo)
    local Free=$(echo "$Memory" | cut -f 1)
    local Total=$(echo "$Memory" | cut -f 2)
    local Used=$(echo "$Memory" | cut -f 3)
    print_line "Memory: free: $(human_readable $Free), total: $(human_readable $Total), used: $Used%"
}

print_wan() {
    local Device
    local Iface
    local IP
    local Subnet
    local Gateway
    local DNS
    local Protocol
    network_find_wan Device
    if [ "$Device" != "" ]; then
        Iface=$(uci -q -P /var/state get network.$Device.ifname)
        network_get_ipaddr IP $Device
        network_get_subnet Subnet $Device
        network_get_gateway Gateway $Device
        network_get_dnsserver DNS $Device
        Protocol=$(uci -q get network.$Device.proto)
        print_line "WAN: $IP, subnet: $Subnet"
        print_line "gateway: $Gateway, protocol: $Protocol, $(device_rx_tx $Iface)"
        print_line "dns: $DNS"
    fi
    network_find_wan6 Device
    if [ "$Device" != "" ]; then
        Iface=$(uci -q -P /var/state get network.$Device.ifname)
        network_get_ipaddr6 IP $Device
        network_get_subnet6 Subnet $Device
        network_get_gateway6 Gateway $Device
        network_get_dnsserver DNS $Device
        Protocol=$(uci -q get network.$Device.proto)
        print_line "WAN6: $IP, subnet: $Subnet"
        print_line "gateway: $Gateway, protocol: $Protocol, $(device_rx_tx $Iface)"
        print_line "dns: $DNS"
    fi
}

print_lan() {
    local Device="lan"
    local IP
    local Subnet
    network_get_ipaddr IP $Device
    network_get_subnet Subnet $Device
    print_line "LAN: $IP, subnet: $Subnet"
}

print_wlan() {
    local Iface
    for Iface in $(uci -q show wireless | grep device=radio | cut -f2 -d.); do
        local Device=$(uci -q get wireless.$Iface.device)
        local SSID=$(uci -q get wireless.$Iface.ssid)
        local IfaceDisabled=$(uci -q get wireless.$Iface.disabled)
        local DeviceDisabled=$(uci -q get wireless.$Device.disabled)
        if [ -n "$SSID" ] && [ "$IfaceDisabled" != "1" ] && [ "$DeviceDisabled" != "1" ]; then
            local Mode=$(uci -q -P /var/state get wireless.$Iface.mode)
            local Channel=$(uci -q get wireless.$Device.channel)
            local RadioIface=$(uci -q -P /var/state get wireless.$Iface.ifname)
            local Info
            if [ -n "$RadioIface" ]; then
                if [ "$Mode" == "ap" ]; then
                    Connection="$(iw dev $RadioIface station dump | grep Station | wc -l)"
                else
                    Connection="$(iw dev $RadioIface link | awk 'BEGIN{FS=": ";Signal="";Bitrate=""} $1~/signal/ {Signal=$2} $1~/tx bitrate/ {Bitrate=$2}END{print Signal" "Bitrate}')"
                fi
            fi
            print_line "WLAN: $SSID($Mode), ch: $Channel, conn: $Connection $(device_rx_tx $RadioIface)"
        fi
    done
}

print_vpn() {
    local VPN
    for VPN in $(uci -q show openvpn | grep .ca= | cut -f2 -d.); do
        local Device=$(uci -q get openvpn.$VPN.dev)
        local Enabled=$(uci -q get openvpn.$VPN.enabled)
        if [ "$Enabled" == "1" ] || [ "$Enabled" == "" ]; then
            Mode=$(uci -q get openvpn.$VPN.mode)
            if [ "$Mode" == "server" ]; then
                Mode="$VPN($Mode):$(uci -q get openvpn.$VPN.port)"
                Status=$(uci -q get openvpn.$VPN.status)
                Connection=$(awk 'BEGIN{FS=",";c=0;l=0}{if($1=="Common Name")l=1;else if($1=="ROUTING TABLE")exit;else if (l==1) c=c+1}END{print c}' $Status)
            else
                Mode="$VPN(client)"
                Connection="Down"
                ifconfig $Device &>/dev/null && Connection="Up"
            fi
            print_line "VPN: $Mode, conn: $Connection, $(device_rx_tx $Device)"
        fi
    done
}

print_machine
print_uptime
print_loadavg
print_flash
print_memory
print_wan
print_lan
print_wlan
print_vpn
print_horizontal_ruler
exit 0
install.sh - Aktualizacja systemu, sysinfo.sh - Info.o systemie, openvpn-auth.sh - Login dla OpenVPN
Tu moje skrypty na GitHub

8

Odp: Skrypt /sbin/sysinfo.sh

Flash źle czytasz. U mnie daje coś takiego:

Flash: free: 3MB, total: 3MB, used: 90.1%

z
Filesystem                Size      Used Available Use% Mounted on
/dev/mtdblock3            3.3M    336.0K      3.0M  10% /overlay

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

9

Odp: Skrypt /sbin/sysinfo.sh

Dużo się tego zrobiło i przestoje są przy odczycie wanu/lanu. Nie wiem czy nie lepiej z tych tx/rx zrezygnować. I chyba trzeba kolorki wprowadzić na wartości (np. opis szary jak jest normalny, wartość biała), bo zaczyna się wszystko zlewać.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

10

Odp: Skrypt /sbin/sysinfo.sh

Wiecie czy coś takiego jest spolaryzowane do dużego jajka. w najnowszym Ubuntu jest coś podobnego. a na debianie chce

RB760iGS + RB260GS / Ryzen 5 2660 / 16G DDR4 / MiniITX - Inea 1G (https://i.imgur.com/TLbJVDw.png)
RB951-2HnD / Celeron J1900 / 4G DDR3 / MiniITX - Satpol 100M

11

Odp: Skrypt /sbin/sysinfo.sh

Przenieś sobie. W sumie poza flash (gdzie podstawiasz / ) masz dokładnie to samo. Ja mam u sobie tak zrobione.

PS. A nie. Moją bieżąca wersję możesz przenieść, ta już networka/uci bardzo korzysta, więc musiał być części za sieć odpowiadające przepisać.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

12

Odp: Skrypt /sbin/sysinfo.sh

Masz jakiegoś Gita albo cos? i jak wywoływać to po zalogowaniu do konsoli ?

RB760iGS + RB260GS / Ryzen 5 2660 / 16G DDR4 / MiniITX - Inea 1G (https://i.imgur.com/TLbJVDw.png)
RB951-2HnD / Celeron J1900 / 4G DDR3 / MiniITX - Satpol 100M

13

Odp: Skrypt /sbin/sysinfo.sh

Dodajesz do /etc/profile lub .bash_profile czy czego tam używasz jako shella.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

14

Odp: Skrypt /sbin/sysinfo.sh

A skąd wezme twoją bieżącą wersję, bo nie uzywam najnowszej wersji twojego Gargulca

RB760iGS + RB260GS / Ryzen 5 2660 / 16G DDR4 / MiniITX - Inea 1G (https://i.imgur.com/TLbJVDw.png)
RB951-2HnD / Celeron J1900 / 4G DDR3 / MiniITX - Satpol 100M

15

Odp: Skrypt /sbin/sysinfo.sh

W chwili obecnej z firmware, wrzucę to wieczorem do gita.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

16

Odp: Skrypt /sbin/sysinfo.sh

Dzięki Cezary,
- wyświetlanie info o flash poprawiłem.
- przestoje to głównie szukanie wan-u, coś pokombinuje jeszcze,
- jeżeli okaże się że rx i tx ma znaczący wpływ prędkość to wytnę,
- z kolorkami masz bardzo dobry pomysł, zrobię.

install.sh - Aktualizacja systemu, sysinfo.sh - Info.o systemie, openvpn-auth.sh - Login dla OpenVPN
Tu moje skrypty na GitHub

17

Odp: Skrypt /sbin/sysinfo.sh

Ok, ekstra.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

18

Odp: Skrypt /sbin/sysinfo.sh

Cezary,
na ten moment tyle:

#!/bin/sh
#
# sysinfo.sh dla OpenWRT AA Cezary Jackiewicz 2013
# 
#    1.00    CJ    Pierwsza wersja kodu
#    1.01    RD    Drobna przebudowa
#    1.02    RD    Korekta bledu wysw. zajetosci Flash-a, dodanie kolorow
#
. /lib/functions/network.sh

local NormalColor="\e[0;37m"
local MachineColor="\e[0;33m"
local ValueColor="\e[1;36m"
local AddrColor="\e[1;31m"
local RXTXColor="\e[2;32m"

human_readable() {
    if [ $1 -gt 0 ]; then
        printf "$(awk -v n=$1 'BEGIN{for(i=split("B KB MB GB TB PB",suffix);s<1;i--)s=n/(2**(10*i));printf "%.0f%s",s,suffix[i+2]}')"
    else
        printf "0"
    fi
}

device_rx_tx() {
    local RXTX=$(awk -v Device=$1 '$1==Device ":"{printf "%d\t%d",$2,$10}' /proc/net/dev)
    [ "$RXTX" != "" ] && printf "rx:$RXTXColor$(human_readable $(echo "$RXTX" | cut -f 1))$NormalColor,tx:$RXTXColor$(human_readable $(echo "$RXTX" | cut -f 2))$NormalColor"
}

print_line() {
    printf " | %-60s |\r | $1\n"
}

print_horizontal_ruler() {
    printf " ----------------------------------------------------------------\n"
}

print_machine() {
    local Macine=""
    [ -e /tmp/sysinfo/model ] && Machine=$(cat /tmp/sysinfo/model)
    print_line "Machine: $MachineColor$Machine$NormalColor"
}

print_uptime() {
    local Uptime=$(cut -d. -f1 /proc/uptime)
    local Days=$(expr $Uptime / 60 / 60 / 24)
    local Hours=$(expr $Uptime / 60 / 60 % 24)
    local Minutes=$(expr $Uptime / 60 % 60)
    local Seconds=$(expr $Uptime % 60)
    print_line "Uptime: $ValueColor$(printf '%dd, %02d:%02d:%02d' $Days $Hours $Minutes $Seconds)$NormalColor, Now: $ValueColor$(date +'%Y-%m-%d %H:%M:%S')$NormalColor"
}

print_loadavg() {
    local LoadAvg=$(awk '{printf"%s,%s,%s",$1,$2,$3}' /proc/loadavg)
    print_line "Load: $ValueColor$LoadAvg$NormalColor"
}

print_flash() {
    local Flash=$(df -k /overlay | awk '/overlay/{printf "%d\t%d\t%.1f",$4*1024,$2*1024,($2>0)?$3/$2*100:0}')
    local Free=$(echo "$Flash" | cut -f 1)
    local Total=$(echo "$Flash" | cut -f 2)
    local Used=$(echo "$Flash" | cut -f 3)
    print_line "Flash: free: $ValueColor$(human_readable $Free)$NormalColor, total: $ValueColor$(human_readable $Total)$NormalColor, used: $ValueColor$Used$NormalColor%%"
}

print_memory() {
    local Memory=$(awk 'BEGIN{Total=0;Free=0}$1~/^MemTotal:/{Total=$2}$1~/^MemFree:|^Buffers:|^Cached:/{Free+=$2}END{printf"%d\t%d\t%.1f",Free*1024,Total*1024,(Total>0)?(((Total-Free)/Total)*100):0}' /proc/meminfo)
    local Free=$(echo "$Memory" | cut -f 1)
    local Total=$(echo "$Memory" | cut -f 2)
    local Used=$(echo "$Memory" | cut -f 3)
    print_line "Memory: free: $ValueColor$(human_readable $Free)$NormalColor, total: $ValueColor$(human_readable $Total)$NormalColor, used: $ValueColor$Used$NormalColor%%"
}

print_wan() {
    local Device
    local Iface
    local IP
    local Subnet
    local Gateway
    local DNS
    local Protocol
    network_find_wan Device
    if [ "$Device" != "" ]; then
        Iface=$(uci -q -P /var/state get network.$Device.ifname)
        network_get_ipaddr IP $Device
        network_get_subnet Subnet $Device
        network_get_gateway Gateway $Device
        network_get_dnsserver DNS $Device
        Protocol=$(uci -q get network.$Device.proto)
        print_line "WAN: $AddrColor$IP$NormalColor, subnet: $AddrColor$Subnet$NormalColor"
        print_line "gateway: $AddrColor$Gateway$NormalColor, protocol: $ValueColor$Protocol$NormalColor, $(device_rx_tx $Iface)"
        print_line "dns: $AddrColor$DNS$NormalColor"
    fi
    network_find_wan6 Device
    if [ "$Device" != "" ]; then
        Iface=$(uci -q -P /var/state get network.$Device.ifname)
        network_get_ipaddr6 IP $Device
        network_get_subnet6 Subnet $Device
        network_get_gateway6 Gateway $Device
        network_get_dnsserver DNS $Device
        Protocol=$(uci -q get network.$Device.proto)
        print_line "WAN6: $AddrColor$IP$NormalColor, subnet: $AddrColor$Subnet$NormalColor"
        print_line "gateway: $AddrColor$Gateway$NormalColor, protocol: $ValueColor$Protocol$NormalColor, $(device_rx_tx $Iface)"
        print_line "dns: $AddrColor$DNS$NormalColor"
    fi
}

print_lan() {
    local Device="lan"
    local IP
    local Subnet
    network_get_ipaddr IP $Device
    network_get_subnet Subnet $Device
    print_line "LAN: $AddrColor$IP$NormalColor, subnet: $AddrColor$Subnet$NormalColor"
}

print_wlan() {
    local Iface
    for Iface in $(uci -q show wireless | grep device=radio | cut -f2 -d.); do
        local Device=$(uci -q get wireless.$Iface.device)
        local SSID=$(uci -q get wireless.$Iface.ssid)
        local IfaceDisabled=$(uci -q get wireless.$Iface.disabled)
        local DeviceDisabled=$(uci -q get wireless.$Device.disabled)
        if [ -n "$SSID" ] && [ "$IfaceDisabled" != "1" ] && [ "$DeviceDisabled" != "1" ]; then
            local Mode=$(uci -q -P /var/state get wireless.$Iface.mode)
            local Channel=$(uci -q get wireless.$Device.channel)
            local RadioIface=$(uci -q -P /var/state get wireless.$Iface.ifname)
            local Info
            if [ -n "$RadioIface" ]; then
                if [ "$Mode" == "ap" ]; then
                    Connection="$(iw dev $RadioIface station dump | grep Station | wc -l)"
                else
                    Connection="$(iw dev $RadioIface link | awk 'BEGIN{FS=": ";Signal="";Bitrate=""} $1~/signal/ {Signal=$2} $1~/tx bitrate/ {Bitrate=$2}END{print Signal" "Bitrate}')"
                fi
            fi
            print_line "WLAN: $ValueColor$SSID$NormalColor($Mode), ch: $ValueColor$Channel$NormalColor, conn: $ValueColor$Connection$NormalColor $(device_rx_tx $RadioIface)"
        fi
    done
}

print_vpn() {
    local VPN
    for VPN in $(uci -q show openvpn | grep .ca= | cut -f2 -d.); do
        local Device=$(uci -q get openvpn.$VPN.dev)
        local Enabled=$(uci -q get openvpn.$VPN.enabled)
        if [ "$Enabled" == "1" ] || [ "$Enabled" == "" ]; then
            Mode=$(uci -q get openvpn.$VPN.mode)
            if [ "$Mode" == "server" ]; then
                Mode="$ValueColor$VPN$NormalColor($Mode):$(uci -q get openvpn.$VPN.port)"
                Status=$(uci -q get openvpn.$VPN.status)
                Connection=$(awk 'BEGIN{FS=",";c=0;l=0}{if($1=="Common Name")l=1;else if($1=="ROUTING TABLE")exit;else if (l==1) c=c+1}END{print c}' $Status)
            else
                Mode="$ValueColor$VPN$NormalColor(client)"
                Connection="Down"
                ifconfig $Device &>/dev/null && Connection="Up"
            fi
            print_line "VPN: $Mode, conn: $ValueColor$Connection$NormalColor, $(device_rx_tx $Device)"
        fi
    done
}

print_machine
print_uptime
print_loadavg
print_flash
print_memory
print_wan
print_lan
print_wlan
print_vpn
print_horizontal_ruler
exit 0
install.sh - Aktualizacja systemu, sysinfo.sh - Info.o systemie, openvpn-auth.sh - Login dla OpenVPN
Tu moje skrypty na GitHub

19 (edytowany przez zdzichu6969 2013-05-21 15:24:47)

Odp: Skrypt /sbin/sysinfo.sh

Nie wiem czy nie zpesułem, wgralem na starsza wersje systemu (1.5.9.7) i  mam błędne odczyty transferu

root@Gargoyle:~# cd /bin
root@Gargoyle:/bin# ./sysinfo.sh
 | Machine: TP-Link TL-WR1043N/ND v1                            |
 | Uptime: 20d, 03:46:36, Now: 2013-05-21 16:13:15              |
 | Load: 0.02,0.03,0.05                                         |
 | Flash: free: 936KB, total: 2MB, used: 47.8%                  |
 | Memory: free: 8MB, total: 29MB, used: 72.6%                  |
 | WAN: 172.22.255.28, subnet: 172.22.255.28/24                 |
 | gateway: 172.22.255.1, protocol: dhcp, rx:2GB,tx:2GB         |
 | dns: 8.8.4.4 8.8.8.8                                         |
 | LAN: 192.168.1.1, subnet: 192.168.1.1/24                     |
 | WLAN: Gargoyle(ap), ch: 13, conn: 2 rx:2GB,tx:2GB            |
 ----------------------------------------------------------------
RB760iGS + RB260GS / Ryzen 5 2660 / 16G DDR4 / MiniITX - Inea 1G (https://i.imgur.com/TLbJVDw.png)
RB951-2HnD / Celeron J1900 / 4G DDR3 / MiniITX - Satpol 100M

20

Odp: Skrypt /sbin/sysinfo.sh

Zastanawiam się nad %.2f czy nie było by lepiej.

PS. Mała literówka: local Macine=""

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

21

Odp: Skrypt /sbin/sysinfo.sh

zdzichu6969 napisał/a:

A skąd wezme twoją bieżącą wersję, bo nie uzywam najnowszej wersji twojego Gargulca

https://github.com/obsy/packages/tree/master/sysinfo

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

22

Odp: Skrypt /sbin/sysinfo.sh

Cezary,
zmieniłem formatowanie, też mi to chodziło po głowie.

#!/bin/sh
#
# sysinfo.sh dla OpenWRT AA Cezary Jackiewicz 2013
# 
#    1.00    CJ    Pierwsza wersja kodu
#    1.01    RD    Drobna przebudowa
#    1.02    RD    Korekta bledu wysw. zajetosci Flash-a, dodanie kolorow
#    1.03    RD    Dodanie nazwy routera, zmiana formatowania
#
. /lib/functions/network.sh

local NormalColor="\e[0;37m"
local MachineColor="\e[0;33m"
local ValueColor="\e[1;36m"
local AddrColor="\e[1;31m"
local RXTXColor="\e[2;32m"

human_readable() {
    if [ $1 -gt 0 ]; then
        printf "$(awk -v n=$1 'BEGIN{for(i=split("B KB MB GB TB PB",suffix);s<1;i--)s=n/(2**(10*i));printf (int(s)=s)?"%.0f%s":"%.2f%s",s,suffix[i+2]}')"
    else
        printf "0"
    fi
}

device_rx_tx() {
    local RXTX=$(awk -v Device=$1 '$1==Device ":"{printf "%d\t%d",$2,$10}' /proc/net/dev)
    [ "$RXTX" != "" ] && printf "rx:$RXTXColor$(human_readable $(echo "$RXTX" | cut -f 1))$NormalColor,tx:$RXTXColor$(human_readable $(echo "$RXTX" | cut -f 2))$NormalColor"
}

print_line() {
    printf " | %-60s |\r | $1\n"
}

print_horizontal_ruler() {
    printf " ----------------------------------------------------------------\n"
}

print_machine() {
    local Machine=""
    local HostName=$(uci -q get system.@system[0].hostname)
    [ -e /tmp/sysinfo/model ] && Machine=$(cat /tmp/sysinfo/model)
    print_line "Machine: $MachineColor$Machine$NormalColor, Name: $MachineColor$HostName$NormalColor"
}

print_uptime() {
    local Uptime=$(cut -d. -f1 /proc/uptime)
    local Days=$(expr $Uptime / 60 / 60 / 24)
    local Hours=$(expr $Uptime / 60 / 60 % 24)
    local Minutes=$(expr $Uptime / 60 % 60)
    local Seconds=$(expr $Uptime % 60)
    print_line "Uptime: $ValueColor$(printf '%dd, %02d:%02d:%02d' $Days $Hours $Minutes $Seconds)$NormalColor, Now: $ValueColor$(date +'%Y-%m-%d %H:%M:%S')$NormalColor"
}

print_loadavg() {
    local LoadAvg=$(awk '{printf"%s,%s,%s",$1,$2,$3}' /proc/loadavg)
    print_line "Load: $ValueColor$LoadAvg$NormalColor"
}

print_flash() {
    local Flash=$(df -k /overlay | awk '/overlay/{printf "%d\t%d\t%.1f",$4*1024,$2*1024,($2>0)?$3/$2*100:0}')
    local Free=$(echo "$Flash" | cut -f 1)
    local Total=$(echo "$Flash" | cut -f 2)
    local Used=$(echo "$Flash" | cut -f 3)
    print_line "Flash: free: $ValueColor$(human_readable $Free)$NormalColor, total: $ValueColor$(human_readable $Total)$NormalColor, used: $ValueColor$Used$NormalColor%%"
}

print_memory() {
    local Memory=$(awk 'BEGIN{Total=0;Free=0}$1~/^MemTotal:/{Total=$2}$1~/^MemFree:|^Buffers:|^Cached:/{Free+=$2}END{printf"%d\t%d\t%.1f",Free*1024,Total*1024,(Total>0)?(((Total-Free)/Total)*100):0}' /proc/meminfo)
    local Free=$(echo "$Memory" | cut -f 1)
    local Total=$(echo "$Memory" | cut -f 2)
    local Used=$(echo "$Memory" | cut -f 3)
    print_line "Memory: free: $ValueColor$(human_readable $Free)$NormalColor, total: $ValueColor$(human_readable $Total)$NormalColor, used: $ValueColor$Used$NormalColor%%"
}

print_wan() {
    local Device
    local Iface
    local IP
    local Subnet
    local Gateway
    local DNS
    local Protocol
    network_find_wan Device
    if [ "$Device" != "" ]; then
        Iface=$(uci -q -P /var/state get network.$Device.ifname)
        network_get_ipaddr IP $Device
        network_get_subnet Subnet $Device
        network_get_gateway Gateway $Device
        network_get_dnsserver DNS $Device
        Protocol=$(uci -q get network.$Device.proto)
        print_line "WAN: $AddrColor$IP$NormalColor, subnet: $AddrColor$Subnet$NormalColor"
        print_line "gateway: $AddrColor$Gateway$NormalColor, protocol: $ValueColor$Protocol$NormalColor, $(device_rx_tx $Iface)"
        print_line "dns: $AddrColor$DNS$NormalColor"
    fi
    network_find_wan6 Device
    if [ "$Device" != "" ]; then
        Iface=$(uci -q -P /var/state get network.$Device.ifname)
        network_get_ipaddr6 IP $Device
        network_get_subnet6 Subnet $Device
        network_get_gateway6 Gateway $Device
        network_get_dnsserver DNS $Device
        Protocol=$(uci -q get network.$Device.proto)
        print_line "WAN6: $AddrColor$IP$NormalColor, subnet: $AddrColor$Subnet$NormalColor"
        print_line "gateway: $AddrColor$Gateway$NormalColor, protocol: $ValueColor$Protocol$NormalColor, $(device_rx_tx $Iface)"
        print_line "dns: $AddrColor$DNS$NormalColor"
    fi
}

print_lan() {
    local Device="lan"
    local IP
    local Subnet
    network_get_ipaddr IP $Device
    network_get_subnet Subnet $Device
    print_line "LAN: $AddrColor$IP$NormalColor, subnet: $AddrColor$Subnet$NormalColor"
}

print_wlan() {
    local Iface
    for Iface in $(uci -q show wireless | grep device=radio | cut -f2 -d.); do
        local Device=$(uci -q get wireless.$Iface.device)
        local SSID=$(uci -q get wireless.$Iface.ssid)
        local IfaceDisabled=$(uci -q get wireless.$Iface.disabled)
        local DeviceDisabled=$(uci -q get wireless.$Device.disabled)
        if [ -n "$SSID" ] && [ "$IfaceDisabled" != "1" ] && [ "$DeviceDisabled" != "1" ]; then
            local Mode=$(uci -q -P /var/state get wireless.$Iface.mode)
            local Channel=$(uci -q get wireless.$Device.channel)
            local RadioIface=$(uci -q -P /var/state get wireless.$Iface.ifname)
            local Info
            if [ -n "$RadioIface" ]; then
                if [ "$Mode" == "ap" ]; then
                    Connection="$(iw dev $RadioIface station dump | grep Station | wc -l)"
                else
                    Connection="$(iw dev $RadioIface link | awk 'BEGIN{FS=": ";Signal="";Bitrate=""} $1~/signal/ {Signal=$2} $1~/tx bitrate/ {Bitrate=$2}END{print Signal" "Bitrate}')"
                fi
            fi
            print_line "WLAN: $ValueColor$SSID$NormalColor($Mode), ch: $ValueColor$Channel$NormalColor, conn: $ValueColor$Connection$NormalColor $(device_rx_tx $RadioIface)"
        fi
    done
}

print_vpn() {
    local VPN
    for VPN in $(uci -q show openvpn | grep .ca= | cut -f2 -d.); do
        local Device=$(uci -q get openvpn.$VPN.dev)
        local Enabled=$(uci -q get openvpn.$VPN.enabled)
        if [ "$Enabled" == "1" ] || [ "$Enabled" == "" ]; then
            Mode=$(uci -q get openvpn.$VPN.mode)
            if [ "$Mode" == "server" ]; then
                Mode="$ValueColor$VPN$NormalColor($Mode):$(uci -q get openvpn.$VPN.port)"
                Status=$(uci -q get openvpn.$VPN.status)
                Connection=$(awk 'BEGIN{FS=",";c=0;l=0}{if($1=="Common Name")l=1;else if($1=="ROUTING TABLE")exit;else if (l==1) c=c+1}END{print c}' $Status)
            else
                Mode="$ValueColor$VPN$NormalColor(client)"
                Connection="Down"
                ifconfig $Device &>/dev/null && Connection="Up"
            fi
            print_line "VPN: $Mode, conn: $ValueColor$Connection$NormalColor, $(device_rx_tx $Device)"
        fi
    done
}

print_machine
print_uptime
print_loadavg
print_flash
print_memory
print_wan
print_lan
print_wlan
print_vpn
print_horizontal_ruler
exit 0
install.sh - Aktualizacja systemu, sysinfo.sh - Info.o systemie, openvpn-auth.sh - Login dla OpenVPN
Tu moje skrypty na GitHub

23

Odp: Skrypt /sbin/sysinfo.sh

I tak się długo szuka. Chyba rezygnacja ze skryptów nas czeka.

PS. Co rozumiesz za wan? Coś co maskaradę robi?

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

24

Odp: Skrypt /sbin/sysinfo.sh

Dzieki Cezary za skrypt. Dostosowalem juz do siebie.

Apropo myslenia przy pobieraniu adresu, moze dorzuce coś od siebie ?

na tym mi ruter nie zacina:

/sbin/ifconfig | sed '/Bcast/!d' | awk '{print $2}'
RB760iGS + RB260GS / Ryzen 5 2660 / 16G DDR4 / MiniITX - Inea 1G (https://i.imgur.com/TLbJVDw.png)
RB951-2HnD / Celeron J1900 / 4G DDR3 / MiniITX - Satpol 100M

25 (edytowany przez mikhnal 2013-05-22 07:20:22)

Odp: Skrypt /sbin/sysinfo.sh

Ja zaproponuję kosmetyczne zmiany: spacje i przecinki w odpowiednich miejscach, bo raz jest tak a raz jest siak. Jak robić to porządnie:

--- sysinfo-new.sh
+++ sysinfo.sh
@@ -25,7 +25,7 @@
 
 device_rx_tx() {
     local RXTX=$(awk -v Device=$1 '$1==Device ":"{printf "%d\t%d",$2,$10}' /proc/net/dev)
-    [ "$RXTX" != "" ] && printf "rx: $RXTXColor$(human_readable $(echo "$RXTX" | cut -f 1))$NormalColor, tx: $RXTXColor$(human_readable $(echo "$RXTX" | cut -f 2))$NormalColor"
+    [ "$RXTX" != "" ] && printf "rx:$RXTXColor$(human_readable $(echo "$RXTX" | cut -f 1))$NormalColor,tx:$RXTXColor$(human_readable $(echo "$RXTX" | cut -f 2))$NormalColor"
 }
 
 print_line() {
@@ -49,11 +49,11 @@
     local Hours=$(expr $Uptime / 60 / 60 % 24)
     local Minutes=$(expr $Uptime / 60 % 60)
     local Seconds=$(expr $Uptime % 60)
-    print_line "Uptime: $ValueColor$(printf '%dd %02d:%02d:%02d' $Days $Hours $Minutes $Seconds)$NormalColor, Now: $ValueColor$(date +'%Y-%m-%d %H:%M:%S')$NormalColor"
+    print_line "Uptime: $ValueColor$(printf '%dd, %02d:%02d:%02d' $Days $Hours $Minutes $Seconds)$NormalColor, Now: $ValueColor$(date +'%Y-%m-%d %H:%M:%S')$NormalColor"
 }
 
 print_loadavg() {
-    local LoadAvg=$(awk '{printf"%s, %s, %s", $1, $2, $3}' /proc/loadavg)
+    local LoadAvg=$(awk '{printf"%s,%s,%s",$1,$2,$3}' /proc/loadavg)
     print_line "Load: $ValueColor$LoadAvg$NormalColor"
 }
 
@@ -135,7 +135,7 @@
                     Connection="$(iw dev $RadioIface link | awk 'BEGIN{FS=": ";Signal="";Bitrate=""} $1~/signal/ {Signal=$2} $1~/tx bitrate/ {Bitrate=$2}END{print Signal" "Bitrate}')"
                 fi
             fi
-            print_line "WLAN: $ValueColor$SSID$NormalColor ($Mode), ch: $ValueColor$Channel$NormalColor, conn: $ValueColor$Connection$NormalColor, $(device_rx_tx $RadioIface)"
+            print_line "WLAN: $ValueColor$SSID$NormalColor($Mode), ch: $ValueColor$Channel$NormalColor, conn: $ValueColor$Connection$NormalColor $(device_rx_tx $RadioIface)"
         fi
     done
 }

Wywaliłbym sekcję RX/TX z WAN'u, bo zawsze pokazuje 2.00GB

Gargoyle fanatic user
WR1043ND v2 16MB / WR902AC v3 / MR3020 16MB+64MB / WR703N / WT3020 / E3372