mirror of
https://github.com/Retropex/apolloapi-v2.git
synced 2025-05-15 12:40:47 +02:00
171 lines
4.7 KiB
Bash
Executable File
171 lines
4.7 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Collects system performance statistics such as CPU, memory, and disk
|
|
# usage as well as top processes ran by users.
|
|
#
|
|
# All size values are in KiB (memory, disk, etc).
|
|
|
|
# EXAMPLE USAGE:
|
|
# ./os_stats.sh
|
|
|
|
# Debugging and error handling
|
|
# Stop this script on any error. Unless you want to get data by any means
|
|
# this is a good option.
|
|
set -e
|
|
# Debugging options:
|
|
# set -x
|
|
# set -v
|
|
|
|
# Validate command line arguments
|
|
if [[ "$#" == 1 || "$#" > 2 ]]; then
|
|
echo "Wrong number of arguments supplied. Expects 2 arguments: <cpu>, <mem>, or none."
|
|
exit 1
|
|
fi
|
|
|
|
# General OS props
|
|
HOST=$HOSTNAME
|
|
#OS=$(uname -a)
|
|
OS=$(lsb_release -s -i -c -r | sed ':a;N;$!ba;s/\n/ /g')
|
|
UPTIME=$(uptime -s)
|
|
LOADAVG=$(cat /proc/loadavg)
|
|
ARCHITECTURE=$(uname -m)
|
|
if [ -f "/sys/devices/virtual/thermal/thermal_zone0/temp" ]; then
|
|
TEMP=$(cat /sys/devices/virtual/thermal/thermal_zone0/temp)
|
|
else
|
|
TEMP="0"
|
|
fi
|
|
ACTIVE_WIFI=$(nmcli -t -f name c show --active | sed -z 's/\n/,/g;s/,$/\n/')
|
|
|
|
MINER_TEMP="0"
|
|
|
|
if [ -e "/var/local/apollo/hwmon/pcb_temp" ]
|
|
then
|
|
MINER_TEMP=$(cat /var/local/apollo/hwmon/pcb_temp)
|
|
fi
|
|
|
|
MINER_FAN_SPEED="0"
|
|
|
|
if [ -e "/var/local/apollo/hwmon/fan_speed" ]
|
|
then
|
|
MINER_FAN_SPEED=$(cat /var/local/apollo/hwmon/fan_rpm)
|
|
fi
|
|
|
|
# Function to check if an interface is up or down
|
|
get_interface_status() {
|
|
local interface=$1
|
|
ip link show "$interface" | grep -q "state UP"
|
|
if [ $? -eq 0 ]; then
|
|
echo "true"
|
|
else
|
|
echo "false"
|
|
fi
|
|
}
|
|
|
|
# Retrieve IP, MAC and status of eth0 and wlan0 interfaces
|
|
ETH_IP=$(ip addr show eth0 | awk '/inet / {print $2}' | cut -d/ -f 1)
|
|
ETH_MAC=$(ip link show eth0 | awk '/ether/ {print $2}')
|
|
ETH_STATUS=$(get_interface_status eth0)
|
|
|
|
WLAN_IP=$(ip addr show wlan0 | awk '/inet / {print $2}' | cut -d/ -f 1)
|
|
WLAN_MAC=$(ip link show wlan0 | awk '/ether/ {print $2}')
|
|
WLAN_STATUS=$(get_interface_status wlan0)
|
|
|
|
# Variable to track the first IP of wlx interfaces
|
|
FIRST_WLX_IP=""
|
|
FIRST_WLX_MAC=""
|
|
FIRST_WLX_STATUS=""
|
|
|
|
# Retrieve IP, MAC and status of WiFi interfaces starting with wlx
|
|
for interface in $(ip -o link show | awk -F': ' '{print $2}' | grep ^wlx); do
|
|
WLX_IP=$(ip addr show "$interface" | awk '/inet / {print $2}' | cut -d/ -f 1)
|
|
WLX_MAC=$(ip link show "$interface" | awk '/ether/ {print $2}')
|
|
WLX_STATUS=$(get_interface_status "$interface")
|
|
|
|
# If WLAN_IP is empty and FIRST_WLX_IP is not yet assigned, use WLX_IP
|
|
if [ -z "$WLAN_IP" ] && [ -z "$FIRST_WLX_IP" ] && [ -n "$WLX_IP" ]; then
|
|
FIRST_WLX_IP=$WLX_IP
|
|
FIRST_WLX_MAC=$WLX_MAC
|
|
FIRST_WLX_STATUS=$WLX_STATUS
|
|
WLAN_IP=$WLX_IP
|
|
WLAN_MAC=$WLX_MAC
|
|
WLAN_STATUS=$WLX_STATUS
|
|
fi
|
|
done
|
|
|
|
# Memory
|
|
memTotal=$(egrep '^MemTotal:' /proc/meminfo | awk '{print $2}')
|
|
memFree=$(egrep '^MemAvailable:' /proc/meminfo | awk '{print $2}')
|
|
memCached=$(egrep '^Cached:' /proc/meminfo | awk '{print $2}')
|
|
memAvailable=$(expr "$memFree" + "$memCached")
|
|
memUsed=$(($memTotal - $memFree))
|
|
swapTotal=$(egrep '^SwapTotal:' /proc/meminfo | awk '{print $2}')
|
|
swapFree=$(egrep '^SwapFree:' /proc/meminfo | awk '{print $2}')
|
|
swapUsed=$(($swapTotal - $swapFree))
|
|
|
|
# CPU
|
|
cpuThreads=$(grep processor /proc/cpuinfo | wc -l)
|
|
#cpuUtilization=$(top -bn3 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1}' | tail -1)
|
|
cpuUtilization=$((100 - $(vmstat 1 2 | tail -1 | awk '{print $15}' | sed 's/%//')))
|
|
|
|
# Disk
|
|
disksJson=$(for d in $(df -P -x tmpfs -x devtmpfs -x ecryptfs -x nfs -x cifs -T | tail -n+2 | awk '{print "{" "\"total\":" $3 ", \"used\":" $4 ", \"mountPoint\":" "\""$7"\"" "},"}'); do echo $d; done | sed '$s/.$//')
|
|
|
|
# Bfgminer log
|
|
bfgminerLog=""
|
|
if [ -e "/tmp/bfgminer.log" ]
|
|
then
|
|
bfgminerLog=`sudo tail -10 /tmp/bfgminer.log | tr '\n' '|'`
|
|
fi
|
|
|
|
# Processes
|
|
|
|
# Final result in JSON
|
|
JSON="{
|
|
\"hostname\": \"$HOST\",
|
|
\"operatingSystem\": \"$OS\",
|
|
\"uptime\": \"$UPTIME\",
|
|
\"loadAverage\": \"$LOADAVG\",
|
|
\"architecture\": \"$ARCHITECTURE\",
|
|
\"temperature\": \"$TEMP\",
|
|
\"minerTemperature\": \"$MINER_TEMP\",
|
|
\"minerFanSpeed\": \"$MINER_FAN_SPEED\",
|
|
\"activeWifi\": \"$ACTIVE_WIFI\",
|
|
\"network\": [{
|
|
\"name\": \"eth0\",
|
|
\"address\": \"$ETH_IP\",
|
|
\"mac\": \"$ETH_MAC\",
|
|
\"status\": \"$ETH_STATUS\"
|
|
}, {
|
|
\"name\": \"wlan0\",
|
|
\"address\": \"$WLAN_IP\",
|
|
\"mac\": \"$WLAN_MAC\",
|
|
\"status\": \"$WLAN_STATUS\"
|
|
}],
|
|
\"memory\":
|
|
{
|
|
\"total\": $memTotal,
|
|
\"available\": $memAvailable,
|
|
\"used\": $memUsed,
|
|
\"cache\": $memCached,
|
|
\"swap\": $swapUsed
|
|
},
|
|
\"cpu\":
|
|
{
|
|
\"threads\": $cpuThreads,
|
|
\"usedPercent\": $cpuUtilization
|
|
},
|
|
\"disks\": [
|
|
$disksJson
|
|
],
|
|
\"bfgminerLog\": \"$bfgminerLog\"
|
|
}"
|
|
|
|
echo "$JSON"
|
|
|
|
# Result output: STDOUT or HTTP
|
|
#if [ -z "$3" ]; then
|
|
# echo "$JSON"
|
|
#else
|
|
# curl -X POST -H "Content-Type: application/json" -d "$JSON" "$3"
|
|
#fi
|