Fix check function return value - reed-alert - Lightweight agentless alerting system for server HTML git clone git://bitreich.org/reed-alert/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/reed-alert/ DIR Log DIR Files DIR Refs DIR Tags DIR README DIR LICENSE --- DIR commit 9698c24926a46f573d376851a397799f4f0fc41d DIR parent b890363bf7bc8dbae4ac17dd0e65396969e09f2d HTML Author: Solene Rapenne <solene@perso.pw> Date: Tue, 9 Jul 2019 16:55:01 +0200 Fix check function return value Diffstat: M functions.lisp | 21 +++++++++++++-------- M test/test.lisp | 10 ++++++++++ 2 files changed, 23 insertions(+), 8 deletions(-) --- DIR diff --git a/functions.lisp b/functions.lisp @@ -94,8 +94,8 @@ (result (funcall fonction params)) (filename (format nil "~a-~a-~a" level fonction hash)) (filepath (format nil "~a/~a" *states-dir* filename)) - (current-state 'failure) ;; default state is a failure - (previous-state 'success) + (current-state nil) ;; default state is a failure + (previous-state nil) (trigger-state 'no)) ;; we open the file to read the number of tries @@ -109,10 +109,12 @@ ;; if result is a list then the check had fail a return both nil and the error value ;; if result is not a list, then it was successful (if (not (listp result)) + + ;; SUCCESS HANDLING (progn ;; mark state as success - (setf current-state 'success) + (setf current-state t) ;; we delete the file with previous states (when (probe-file filepath) @@ -121,11 +123,11 @@ ;; it was a failure and then it's back to normal state (when triggered-before? (uiop:run-program (trigger-alert level fonction params t 'success) :output t) - (setf previous-state 'failure)) + (setf previous-state nil)) ;; in any case we return t because it's ok t) - ;; failure handling + ;; FAILURE HANDLING (let ((trigger-now? (or ;; we add +1 to tries because it's failing right now (and (= (+ 1 tries) (getf params :try *tries*)) @@ -138,7 +140,7 @@ ;; more error than limit, send alert once (when trigger-now? - (setf trigger-state 'notified) + (setf trigger-state 'YES) (uiop:run-program (trigger-alert level fonction params (cadr result) trigger-now?))) ;; increment the number of tries by 1 (with-open-file (stream-out filepath :direction :output @@ -146,9 +148,12 @@ (format stream-out "~a~%~a~%" (+ 1 tries) params)) nil)) - (format t "~a ~A ~A ~A ~A ~A~%" + (format t "~a ~A ~A ~A ~A ~A ~A~%" level fonction (format nil "~{~A ~}" params) - previous-state current-state trigger-state)))) + (if previous-state "SUCCESS" "ERROR") + (if current-state "SUCCESS" "ERROR") + trigger-state (+ 1 tries))) + current-state)) ;; abort when using ctrl+c instead of dropping to debugger #+ecl DIR diff --git a/test/test.lisp b/test/test.lisp @@ -12,3 +12,13 @@ (=> notification disk-usage :path "/" :limit 1 :reminder 2) (=> notification disk-usage :path "/" :limit 1 :reminder 2) (=> notification disk-usage :path "/" :limit 1 :reminder 2) + +(and + (=> notification disk-usage :path "/" :limit 99 :reminder 2 :desc "always OK") + (=> notification disk-usage :path "/" :limit 1 :reminder 2 :desc "always error") + (=> notification disk-usage :path "/" :limit 1 :reminder 2 :desc "always error, should not be displayed")) + + +(or + (=> notification disk-usage :path "/" :limit 1 :reminder 2 :desc "always error, should be followed by always ok") + (=> notification disk-usage :path "/" :limit 99 :reminder 2 :desc "always OK"))