(defvar *alerts* (list '(dont-use-it ("REMINDER" function params date hostname desc level os newline _ space result)) '(void nil) '(mail nil) '(sms ("echo -n '" date _ function " CRITICAL " hostname "' | curl http://somewebservice")) '(mail ("echo -n '" date _ hostname " had problem on " function newline params _ " values " result newline desc "' | mail -s '[Error] " function " - " hostname "' foo@bar.com")) '(with-plus ("echo -n '" + date + _ + hostname + " had problem on " + function + newline + params + newline + desc + "' | mail -s '[Error] " + function + " - " + hostname + "' foo@bar.com")))) (load "functions.lisp") ;; check if used percent :path partition is more than :limit (=> mail disk-usage (:path "/" :limit 90)) (=> mail disk-usage (:path "/usr" :limit 85)) (=> mail disk-usage (:path "/tmp" :limit 1)) ;; failure ;; check if :path file exists (=> mail file-exists (:path "/bsd.rd" :desc "OpenBSD kernel /bsd.rd")) (=> void file-exists (:path "/non-existant-file")) ;; failure file not found ;; check if :path file exists and has been updated since :limit minutes (=> void file-updated (:path "/var/log/messages" :limit 400)) (=> mail file-updated (:path "/bsd.rd" :limit 1 :desc "OpenBSD kernel")) ;; failure ;; check if :path pid file process is running (=> mail pid-running (:path "/var/run/xdm.pid" :desc "XDM pid")) (=> mail pid-running (:path "/home/user/test.pid")) ;; failure ;; check if number of processes on the system is more than :limit (=> mail number-of-processes (:limit 200)) (=> mail number-of-processes (:limit 1)) ;; failure ;; check if load average on (1/5/15) minutes is more than :limit (=> mail load-average-1 (:limit 4)) (=> mail load-average-5 (:limit 2)) (=> mail load-average-15 (:limit 1)) (=> mail load-average-1 (:limit 0.2)) ;; should trigger error ;; check if :host host is reachable (=> mail ping (:host "8.8.8.8" :desc "Google DNS")) (=> void ping (:host "2.3.4.256" :desc "Not valid ipv4 address")) ;; fail error (=> void ping (:host "127.40.30.21" :desc "Certainly not used address")) ;; fail time out ;; check if :command command return 0 (success) or something else (error) (=> void command (:command "echo hello")) ;; success (=> void command (:command "ls /non-existent-file")) ;; fail (quit)