diff options
Diffstat (limited to 'remote/modules/hardware-stats/data/opt')
-rwxr-xr-x | remote/modules/hardware-stats/data/opt/openslx/scripts/cron-system_usage_update | 70 | ||||
-rwxr-xr-x | remote/modules/hardware-stats/data/opt/openslx/scripts/systemd-hardware_stats | 44 |
2 files changed, 94 insertions, 20 deletions
diff --git a/remote/modules/hardware-stats/data/opt/openslx/scripts/cron-system_usage_update b/remote/modules/hardware-stats/data/opt/openslx/scripts/cron-system_usage_update index 9ab77f4f..df8dab45 100755 --- a/remote/modules/hardware-stats/data/opt/openslx/scripts/cron-system_usage_update +++ b/remote/modules/hardware-stats/data/opt/openslx/scripts/cron-system_usage_update @@ -10,16 +10,76 @@ UUID=$(cat "/run/system-uuid") [ -z "$UUID" ] && exit 1 USED=0 +Name= for SESSION in $(loginctl | awk '{print $1}'); do unset Display Remote State - eval $(loginctl -p Display -p Remote -p State -p Class show-session "$SESSION") - if [ -n "$Display" ] && [ "$Remote" = "no" ] && [ "$State" = "active" -o "$State" = "online" ] && [ "$Class" = "user" ]; then - USED=1 - break; + eval $(loginctl -p Display -p Remote -p State -p Class -p Name show-session "$SESSION") + if [ "$Display" = ":0" ] && [ "$Remote" = "no" ] && [ "$State" = "active" -o "$State" = "online" ] && [ "$Class" = "user" ]; then + USED=1 # We only consider sessions on the primary display, which should always be the case + break fi done +# Also report usage of /tmp and swap +TMP=$(df -P /tmp | grep -m1 ' /tmp$') +TMP_SIZE=$(echo $TMP | awk '{print $2}') +TMP_FREE=$(echo $TMP | awk '{print $4}') +SWAP_FREE=$(grep -m1 ^SwapFree: /proc/meminfo | awk '{print $2}') + curl -s --data-urlencode "type=~runstate" --data-urlencode "uuid=$UUID" --data-urlencode "used=$USED" \ - "$SLX_REMOTE_LOG" > /dev/null 2>&1 + --data-urlencode "user=$Name" --data-urlencode "tmpsize=$TMP_SIZE" --data-urlencode "tmpfree=$TMP_FREE" \ + --data-urlencode "swapfree=$SWAP_FREE" "$SLX_REMOTE_LOG" > /dev/null 2>&1 + +# Warn user if tmp or swap usage is high; system might crash soon +WARN= +if [ "$SWAP_FREE" -gt 0 ] && [ "$SWAP_FREE" -lt 500000 ]; then # less than 500MB swap + WARN="$WARN +Der Arbeitsspeicher des Computers ist fast voll. +The computer is running out of RAM." +fi +if [ -n "$TMP_FREE" ] && [ "$TMP_FREE" -lt 500000 ]; then + WARN="$WARN +Es verbleibt wenig temporärer Speicher für die Arbeitsdaten der laufenden VM. +Little temporary storage is left for the current VM." +fi + +if [ -n "$WARN" ]; then + WARN="$WARN + +Bitte sichern Sie Ihre Arbeit und starten Sie den PC neu. +Please save your work and reboot this machine. + +Sie können einen bwLehrpool-Admin bitten, eine größere ID-44-Partition einzurichten. +You could ask a bwLehrpool administrator to create a larger ID-44 partition." + for d in $(who | awk '{print $2}' | sort -u); do + if [ "${d:0:1}" = ":" ]; then + # X11 + export DISPLAY=$d + export XAUTHORITY=$(ps a | grep " $DISPLAY " | grep -o -- '-auth.*$' | grep -m1 -v grep | awk '{print $2}') + notify-send -u critical "System instabil" "$WARN" + unset DISPLAY XAUTHORITY + elif [ "${d:0:3}" = "tty" ]; then + # Regular tty + cat > "/dev/$d" <<EOF + * + *************************** + $WARN + *************************** + * +EOF + elif [ "${d:0:3}" = "pts" ]; then + # pts - xterm or ssh session + cat > "/dev/pts/${d:3}" <<EOF + * + *************************** + $WARN + *************************** + * +EOF + fi + done +fi + +exit 0 diff --git a/remote/modules/hardware-stats/data/opt/openslx/scripts/systemd-hardware_stats b/remote/modules/hardware-stats/data/opt/openslx/scripts/systemd-hardware_stats index 94c2094f..6f4e25ec 100755 --- a/remote/modules/hardware-stats/data/opt/openslx/scripts/systemd-hardware_stats +++ b/remote/modules/hardware-stats/data/opt/openslx/scripts/systemd-hardware_stats @@ -40,7 +40,7 @@ fi MAC=${BOOTIF:3} # 2) Get machine UUID, with fallback to MAC address if it fails for some reason -UUID=$(dmidecode -s system-uuid | head -n 1) +UUID=$(dmidecode -q -s system-uuid | grep -v '^#' | head -n 1) if [ "${#UUID}" -ne "36" ]; then echo "Determined UUID (${UUID}) has not expected length of 36, falling back to MAC..." UUID="000000000000000-$BOOTIF" @@ -49,7 +49,10 @@ fi # 3) Uptime in seconds UPTIME=$(grep -o -E '^[0-9]+' /proc/uptime) -# 4) Number of real CPU cores +# 4) Number of real and virtual CPU cores +# Virtual, cheap way +VCORES=$(grep '^processor\s' /proc/cpuinfo | sort -u | wc -l) +# Real cores CPUCORES=$(cat /sys/devices/system/cpu/cpu*/topology/thread_siblings_list | sort -u | wc -l) # Fallback 1... if [ -z "$CPUCORES" ] || [ "$CPUCORES" = "0" ]; then @@ -66,7 +69,7 @@ fi CPUMODEL=$(grep -m1 '^model name\s*:' /proc/cpuinfo | sed 's/^model name\s*:\s*//;s/\s\s*/ /g;s/^ //;s/ $//') # 6) RAM -RAM=$(grep '^MemTotal:' /proc/meminfo | awk '{print $2}') +RAM=$(grep -m1 '^MemTotal:' /proc/meminfo | awk '{print $2}') RAM=$(( $RAM / 1024 )) if [ -z "$RAM" ] || [ "$RAM" -lt 500 ]; then # Fallback to dmidecode @@ -143,24 +146,26 @@ fi # A) Read system model and manufacturer dmidec() { - local LMODEL=$(dmidecode "$@" 2>/dev/null | grep -v '^Invalid' | sed 's/\s\s*/ /g;s/^ //;s/ $//') - case "$LMODEL" in + local RETVAL=$(dmidecode "$@" 2>/dev/null | grep -v '^#' | grep -v '^Invalid' | sed 's/\s\s*/ /g;s/^ //;s/ $//') + case "$RETVAL" in ""|*"Product Name"*|*"be filled"*|"unknown"|*"product name"*) - LMODEL="Unknown" + RETVAL="Unknown" ;; esac - echo "$LMODEL" + echo "$RETVAL" } -MODEL=$(dmidec -s system-product-name) -MANUF=$(dmidec -s system-manufacturer) + +HW_MODEL=$(dmidec -q -s system-product-name) +HW_MANUF=$(dmidec -q -s system-manufacturer) # Try fallback to baseboard -if [ "$MODEL" = "Unknown" ]; then - MODEL=$(dmidec -s baseboard-product-name) - MANUF=$(dmidec -s baseboard-manufacturer) +if [ "$HW_MODEL" = "Unknown" ]; then + HW_MODEL=$(dmidec -q -s baseboard-product-name) + HW_MANUF=$(dmidec -q -s baseboard-manufacturer) fi -if [ "$MANUF" != "Unknown" ]; then - MODEL="$MODEL ($MANUF)" +MODEL="$HW_MODEL" +if [ "$HW_MANUF" != "Unknown" ]; then + MODEL="$MODEL ($HW_MANUF)" fi # n) Dump raw data to a file @@ -169,7 +174,7 @@ cat > "$DATAFILE" <<-EOF ############################### CPU ##################################### Sockets: $(grep '^physical id' /proc/cpuinfo | sort -u | wc -l) Real cores: $CPUCORES -Virtual cores: $(grep '^processor' /proc/cpuinfo | sort -u | wc -l) +Virtual cores: $VCORES ######################## Partition tables ############################### EOF cat "$FDISK" >> "$DATAFILE" @@ -198,11 +203,20 @@ HDDCOUNT=0 for size in $(cat "$FDISK" | grep -E '^Disk /dev.*[0-9]{11,} bytes' | grep -o -E '[0-9]{11,}'); do [ "$size" -gt 50000000000 ] && HDDCOUNT=$(( HDDCOUNT + 1 )) done +bashesc () { + sed s/\'/\'\"\'\"\'/g <<<$* +} +HW_MANUF=$(bashesc "$HW_MANUF") +HW_MODEL=$(bashesc "$HW_MODEL") cat > "/run/hwinfo" <<HORST HW_KVM='${VT}' HW_ID44='${ID44}' HW_MBRAM='${RAM}' HW_HDDCOUNT='${HDDCOUNT}' +HW_MANUF='${HW_MANUF}' +HW_MODEL='${HW_MODEL}' +HW_CORES='${CPUCORES}' +HW_THREADS='${VCORES}' HORST # Fire away |