URI: 
       Change output to a tab separated output to make it parseable - 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 e6d5e1bcf78191f5c5e8810564033eab29f7f686
   DIR parent 17024e3560369b58c274e68fdd6128ad12fccd49
  HTML Author: Solene Rapenne <solene@perso.pw>
       Date:   Tue,  9 Jul 2019 09:05:40 +0200
       
       Change output to a tab separated output to make it parseable
       
       Diffstat:
         M functions.lisp                      |      37 +++++++++++++------------------
       
       1 file changed, 16 insertions(+), 21 deletions(-)
       ---
   DIR diff --git a/functions.lisp b/functions.lisp
       @@ -8,14 +8,6 @@
        (defparameter *states-dir* "~/.reed-alert/states/")
        (ensure-directories-exist *states-dir*)
        
       -(defun color(num1 num2)
       -  (format nil "~a[~a;~am" #\Escape num1 num2))
       -
       -(defparameter *red*    (color 1 31))
       -(defparameter *white*  (color 0 70))
       -(defparameter *green*  (color 1 32))
       -(defparameter *yellow* (color 0 33))
       -
        ;; simple hash function (Fowler Noll Vo)
        ;; https://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function
        (defun fnv-hash(string)
       @@ -98,11 +90,13 @@
             (or ,@body)))
        
        (defun =>(level fonction &rest params)
       -  (format t "[~a~10a ~20A~a] ~45A" *yellow* level fonction *white* (getf params :desc params))
          (let* ((hash (fnv-hash (format nil "~{~a~}" (remove-if #'symbolp params))))
                 (result (funcall fonction params))
                 (filename (format nil "~a-~a-~a" level fonction hash))
       -         (filepath (format nil "~a/~a" *states-dir* filename)))
       +         (filepath (format nil "~a/~a" *states-dir* filename))
       +         (current-state 'failure) ;; default state is a failure
       +         (previous-state 'success)
       +         (trigger-state 'no))
        
            ;; we open the file to read the number of tries
            ;; if no fail then we have 0 try
       @@ -117,18 +111,17 @@
              (if (not (listp result))
                  (progn
        
       +            ;; mark state as success
       +            (setf current-state 'success)
       +
                    ;; we delete the file with previous states
                    (when (probe-file filepath)
                      (delete-file filepath))
        
                    ;; it was a failure and then it's back to normal state
       -            (if triggered-before?
       -                (progn
       -                  (uiop:run-program (trigger-alert level fonction params t 'success) :output t)
       -                  (format t " => ~afailure => success~a~%" *green* *white*))
       -                (progn
       -                  ;; last time was a success
       -                  (format t " => ~asuccess~a~%" *green* *white*)))
       +            (when triggered-before?
       +              (uiop:run-program (trigger-alert level fonction params t 'success) :output t)
       +              (setf previous-state 'failure))
                    ;; in any case we return t because it's ok
                    t)
        
       @@ -143,16 +136,18 @@
                                         (and (= 0 (mod (+ 1 tries) (getf params :reminder *reminder*)))
                                              'REMINDER)))))  ;; do we need to remind it's failing?
        
       -            (format t " => ~aerror (~a failure(s) before)~a~a~%" *red* tries *white* (if trigger-now? " NOTIFIED" ""))
       -
                    ;; more error than limit, send alert once
                    (when trigger-now?
       -              (uiop:run-program (trigger-alert level fonction params (cadr result) trigger-now?) :output t))
       +              (setf trigger-state 'notified)
       +              (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
                                                :if-exists :supersede)
                      (format stream-out "~a~%~a~%" (+ 1 tries) params))
       -            nil)))))
       +            nil))
       +
       +      (format t "~a        ~A        ~A        ~A        ~A        ~A~%"
       +              level fonction params previous-state current-state trigger-state))))
        
        ;; abort when using ctrl+c instead of dropping to debugger
        #+ecl