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