uptime
« previous entry | next entry »
Dec. 9th, 2006 | 09:42 pm
(defpackage #:zpb
(:use #:cl)
(:export #:uptime))
(in-package #:zpb)
(defun uptime-values ()
(let ((seconds (truncate (get-internal-real-time)
internal-time-units-per-second)))
(multiple-value-bind (days seconds)
(truncate seconds 86400)
(multiple-value-bind (hours seconds)
(truncate seconds 3600)
(multiple-value-bind (minutes seconds)
(truncate seconds 60)
(values days hours minutes seconds))))))
(defun uptime ()
(multiple-value-bind (days hours minutes seconds)
(uptime-values)
(format t "~[~:;~:*~D days ~]~
~[~:;~:*~D hours ~]~
~[~:;~:*~D minutes ~]~
~[~:;~:*~D seconds~]~%"
days hours minutes seconds)))
Here's my best uptime:
PK(13): (zpb:uptime) 146 days 7 hours 50 minutes 36 seconds
That's for PK Bass & Tackle. What's your best image uptime?
Update Oops. get-internal-real-time is not specified to start from 0, it just happens to do so on my implementation. Sorry!
Alternative version
from: anonymous
date: Dec. 12th, 2006 01:51 pm (UTC)
Link
(let ((start-time (get-universal-time))) (defun uptime (&optional suppress-output) "Displays start time and current uptime for this lisp process. Or not. Returns uptime in seconds." (let ((uptime (- (get-universal-time) start-time)) (days '("Mon" "Tue" "Wed" "Thu" "Fri" "Sat" "Sun"))) (unless suppress-output ;; Pretty print start time (multiple-value-bind (second minute hour date month year day daylight-p zone) (decode-universal-time start-time) (flet ((tz-string (zone daylight-p) (multiple-value-bind (hours mins) (truncate (* zone 60) 60) (when daylight-p (setf hours (1- hours))) ; 1+ in the ISO world. (let ((sign (if (minusp zone) ;ISO tz == -CL tz. #\+ #\-))) (format nil "~c~2,'0d~2,'0d" sign (abs hours) (abs mins)))))) (format t "~&Current image started: ~a, ~ ~d-~2,'0d-~2,'0d ~ ~2,'0d:~2,'0d:~2,'0d~ ~a~%" (nth day days) year month date hour minute second (tz-string zone daylight-p)))) ;; Pretty print uptime (multiple-value-bind (days day-part) (truncate uptime 86400) (multiple-value-bind (hours min-secs) (truncate day-part 3600) (multiple-value-bind (minutes seconds) (truncate min-secs 60) (format t "Uptime: ~d days ~2,'0d:~2,'0d:~2,'0d~%" days hours minutes seconds))))) uptime)))Gives output like
I only have this in development images for fun, not delivered apps.
...Peder...
Reply | Thread