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 <solene@perso.pw> 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
.
Response:
text/plain