testsAndMisc/linux_configuration/i3-configuration/i3blocks/pc_startup_status.sh

72 lines
1.4 KiB
Bash
Executable File

#!/bin/bash
# PC Startup Monitor status script for i3blocks.
set -euo pipefail
get_now_epoch() {
if [[ -n ${NOW_EPOCH:-} ]]; then
printf '%s\n' "$NOW_EPOCH"
else
printf '%(%s)T\n' -1
fi
}
get_uptime_seconds() {
local uptime_line
if [[ -n ${UPTIME_SECONDS:-} ]]; then
printf '%s\n' "$UPTIME_SECONDS"
return 0
fi
read -r uptime_line _ < /proc/uptime || uptime_line='0'
printf '%s\n' "${uptime_line%%.*}"
}
is_monitored_day() {
local epoch=$1 day_of_week
printf -v day_of_week '%(%u)T' "$epoch"
case $day_of_week in
1 | 5 | 6 | 7)
return 0
;;
*)
return 1
;;
esac
}
hour_in_window() {
local epoch=$1 hour
printf -v hour '%(%H)T' "$epoch"
((10#$hour >= 5 && 10#$hour < 8))
}
was_booted_in_window_today() {
local now_epoch=$1 boot_epoch now_day boot_day
boot_epoch=$((now_epoch - $(get_uptime_seconds)))
printf -v now_day '%(%Y-%m-%d)T' "$now_epoch"
printf -v boot_day '%(%Y-%m-%d)T' "$boot_epoch"
[[ $boot_day == "$now_day" ]] || return 1
hour_in_window "$boot_epoch"
}
now_epoch=$(get_now_epoch)
if ! is_monitored_day "$now_epoch"; then
echo "PC:skip"
echo
echo "#888888"
elif hour_in_window "$now_epoch"; then
echo "PC:live"
echo
echo "#00FF00"
elif was_booted_in_window_today "$now_epoch"; then
echo "PC:ok"
echo
echo "#00FF00"
else
echo "PC:warn"
echo
echo "#FF0000"
fi