Rewrite uptime

This commit is contained in:
Dylan Araps 2016-10-21 10:00:09 +11:00
parent 5274d2d54a
commit fb7b3c146e
1 changed files with 27 additions and 46 deletions

View File

@ -268,66 +268,47 @@ getkernel() {
# Uptime {{{ # Uptime {{{
getuptime() { getuptime() {
case "$os" in
"Linux" | "Windows" | "Mac OS X" | "iPhone OS" | "BSD")
# Get uptime in seconds
case "$os" in case "$os" in
"Linux" | "Windows") "Linux" | "Windows")
case "$distro" in seconds="$(< /proc/uptime)"
*"Puppy"* | "Quirky Werewolf"* | "Alpine Linux"* | "OpenWRT"* | "Windows"*) seconds="${seconds/.*}"
uptime="$(uptime | awk -F ':[0-9]{2}+ |(, ){1}+' '{printf $2}')"
;;
"openSUSE"*)
uptime="$(uptime | awk -F ':[0-9]{2}+[a-z][a-z] |(, ){1}+' '{printf $2}')"
;;
*)
uptime="$(uptime -p)"
[ "$uptime" == "up " ] && uptime="up $(awk -F'.' '{print $1}' /proc/uptime) seconds"
;;
esac
;; ;;
"Mac OS X" | "iPhone OS" | "BSD") "Mac OS X" | "iPhone OS" | "BSD")
# Get boot time in seconds
boot="$(sysctl -n kern.boottime)" boot="$(sysctl -n kern.boottime)"
boot="${boot/'{ sec = '}" boot="${boot/'{ sec = '}"
boot="${boot/,*}" boot="${boot/,*}"
# Get current date in seconds # Get current date in seconds
now="$(date +%s)" now="$(date +%s)"
uptime="$((now - boot))" seconds="$((now - boot))"
;;
esac
# Convert uptime to days/hours/mins days="$((seconds / 86400)) days"
minutes="$((uptime / 60%60))" hours="$((seconds / 3600)) hours"
hours="$((uptime / 3600%24))" minutes="$((seconds % 3600 / 60)) minutes"
days="$((uptime / 86400))"
case "$minutes" in case "$days" in
1) minutes="1 minute" ;; "0 days") unset days ;;
0) unset minutes ;; "1 days") days="${days/s}" ;;
*) minutes="$minutes minutes" ;;
esac esac
case "$hours" in case "$hours" in
1) hours="1 hour" ;; "0 hours") unset hours ;;
0) unset hours ;; "1 hours") hours="${hours/s}" ;;
*) hours="$hours hours" ;;
esac esac
case "$days" in case "$minutes" in
1) days="1 day" ;; "0 minutes") unset minutes ;;
0) unset days ;; "1 minutes") minutes="${minutes/s}" ;;
*) days="$days days" ;;
esac esac
[ "$hours" ] && \ uptime="up ${days:+$days,} ${hours:+$hours,} ${minutes}"
[ "$minutes" ] && \ uptime="${uptime%', '}"
hours+=","
[ "$days" ] && \
[ "$hours" ] && \
days+=","
uptime="up $days $hours $minutes"
;; ;;
"Solaris") "Solaris")
@ -353,7 +334,7 @@ getuptime() {
uptime="${uptime/ minutes/m}" uptime="${uptime/ minutes/m}"
uptime="${uptime/ minute/m}" uptime="${uptime/ minute/m}"
uptime="${uptime/ seconds/s}" uptime="${uptime/ seconds/s}"
uptime="${uptime/,}" uptime="${uptime//,}"
;; ;;
esac esac
} }