SMOLNET PORTAL home about changes
iinit - 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 9410e05e37aefd2e1880178e655a8bd64173c645	/scm/reed-alert/commit/9410e05e37aefd2e1880178e655a8bd64173c645.gph	bitreich.org	70
hAuthor: solene rapenne <solene@dataswamp.org>	URL:mailto:solene@dataswamp.org	bitreich.org	70
iDate:   Fri,  7 Oct 2016 12:25:49 +0200	Err	bitreich.org	70
i	Err	bitreich.org	70
iinit	Err	bitreich.org	70
i	Err	bitreich.org	70
iDiffstat:	Err	bitreich.org	70
i  A example.lisp                        |      50 +++++++++++++++++++++++++++++++	Err	bitreich.org	70
i  A functions.lisp                      |      49 +++++++++++++++++++++++++++++++	Err	bitreich.org	70
i  A probes.lisp                         |      92 +++++++++++++++++++++++++++++++	Err	bitreich.org	70
i	Err	bitreich.org	70
i3 files changed, 191 insertions(+), 0 deletions(-)	Err	bitreich.org	70
i---	Err	bitreich.org	70
1diff --git a/example.lisp b/example.lisp	/scm/reed-alert/file/example.lisp.gph	bitreich.org	70
i@@ -0,0 +1,50 @@	Err	bitreich.org	70
i+(defvar *alerts*	Err	bitreich.org	70
i+  (list	Err	bitreich.org	70
i+   '(dont-use-it ("REMINDER" function params date hostname description level os newline _ space result))	Err	bitreich.org	70
i+   '(void nil)	Err	bitreich.org	70
i+   '(mail nil)	Err	bitreich.org	70
i+   '(sms ("echo -n '" date _ function " CRITICAL " hostname "' | curl http://somewebservice";))	Err	bitreich.org	70
i+   '(mail ("echo -n '" date _ hostname " had problem on " function newline params _ " values " result newline	Err	bitreich.org	70
i+           description "' | mail -s '[Error] " function  " - " hostname "' foo@bar.com"))	Err	bitreich.org	70
i+   '(with-plus ("echo -n '" + date + _ + hostname + " had problem on " + function + newline + params + newline	Err	bitreich.org	70
i+                + description + "' | mail -s '[Error] " + function +  " - " + hostname + "' foo@bar.com"))))	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+(load "functions.lisp")	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+;; check if used percent :path partition is more than :limit	Err	bitreich.org	70
i+(=> mail disk-usage   (:path "/"    :limit 90))	Err	bitreich.org	70
i+(=> mail disk-usage   (:path "/usr" :limit 85))	Err	bitreich.org	70
i+(=> mail disk-usage   (:path "/tmp" :limit 1)) ;; failure	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+;; check if :path file exists	Err	bitreich.org	70
i+(=> mail file-exists  (:path "/bsd.rd" :desc "OpenBSD kernel /bsd.rd"))	Err	bitreich.org	70
i+(=> void file-exists  (:path "/non-existant-file")) ;; failure file not found	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+;; check if :path file exists and has been updated since :limit minutes	Err	bitreich.org	70
i+(=> void file-updated (:path "/var/log/messages" :limit 400))	Err	bitreich.org	70
i+(=> mail file-updated (:path "/bsd.rd"           :limit 1 :desc "OpenBSD kernel")) ;; failure	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+;; check if :path pid file process is running	Err	bitreich.org	70
i+(=> mail pid-running  (:path "/var/run/xdm.pid" :desc "XDM pid"))	Err	bitreich.org	70
i+(=> mail pid-running  (:path "/home/user/test.pid")) ;; failure	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+;; check if number of processes on the system is more than :limit	Err	bitreich.org	70
i+(=> mail number-of-processes (:limit 200))	Err	bitreich.org	70
i+(=> mail number-of-processes (:limit 1)) ;; failure	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+;; check if load average on (1/5/15) minutes is more than :limit	Err	bitreich.org	70
i+(=> mail load-average-1  (:limit 4))	Err	bitreich.org	70
i+(=> mail load-average-5  (:limit 2))	Err	bitreich.org	70
i+(=> mail load-average-15 (:limit 1))	Err	bitreich.org	70
i+(=> mail load-average-1  (:limit 0.2)) ;; should trigger error	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+;; check if :host host is reachable	Err	bitreich.org	70
i+(=> mail ping (:host "8.8.8.8"      :desc "Google DNS"))	Err	bitreich.org	70
i+(=> void ping (:host "2.3.4.256"    :desc "Not valid ipv4 address")) ;; fail error	Err	bitreich.org	70
i+(=> void ping (:host "127.40.30.21" :desc "Certainly not used address")) ;; fail time out	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+;; check if :command command return 0 (success) or something else (error)	Err	bitreich.org	70
i+(=> void command (:command "echo hello")) ;; success	Err	bitreich.org	70
i+(=> void command (:command "ls /non-existent-file")) ;; fail	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+(quit)	Err	bitreich.org	70
1diff --git a/functions.lisp b/functions.lisp	/scm/reed-alert/file/functions.lisp.gph	bitreich.org	70
i@@ -0,0 +1,49 @@	Err	bitreich.org	70
i+(load "probes.lisp")	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+(defun trigger-alert(level function params result)	Err	bitreich.org	70
i+  (format nil "~{~a~}"	Err	bitreich.org	70
i+          (mapcar #'(lambda(x)	Err	bitreich.org	70
i+                      (if (symbolp x)	Err	bitreich.org	70
i+                          (case x	Err	bitreich.org	70
i+                            (+ "")	Err	bitreich.org	70
i+                            (result result)	Err	bitreich.org	70
i+                            (hostname (machine-instance))	Err	bitreich.org	70
i+                            (date (multiple-value-bind	Err	bitreich.org	70
i+                                        (second minute hour day month year)	Err	bitreich.org	70
i+                                      (get-decoded-time)	Err	bitreich.org	70
i+                                    (format nil "~a/~a/~a ~a:~a:~a" year month day hour minute second)))	Err	bitreich.org	70
i+                            (os (software-type))	Err	bitreich.org	70
i+                            (function function)	Err	bitreich.org	70
i+                            (space " ")	Err	bitreich.org	70
i+                            (_ " ")	Err	bitreich.org	70
i+                            (params params)	Err	bitreich.org	70
i+                            (desc (getf params :desc ""))	Err	bitreich.org	70
i+                            (newline #\Newline)	Err	bitreich.org	70
i+                            (level level))	Err	bitreich.org	70
i+                          x))	Err	bitreich.org	70
i+                  (cadr (assoc level *alerts*)))))	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+(defmacro stop-if-error(&body body)	Err	bitreich.org	70
i+  `(progn	Err	bitreich.org	70
i+     (and ,@body)))	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+(defmacro =>(level fonction params)	Err	bitreich.org	70
i+  `(progn	Err	bitreich.org	70
i+     (format t "[~a~a ~20A~a] ~35A" *yellow* ',level ',fonction *white* (getf ',params :desc ',params))	Err	bitreich.org	70
i+     (let ((result (funcall ',fonction ',params)))	Err	bitreich.org	70
i+       (if (not (listp result))	Err	bitreich.org	70
i+           (progn	Err	bitreich.org	70
i+             (format t " => ~asuccess~a~%" *green* *white*)	Err	bitreich.org	70
i+             t)	Err	bitreich.org	70
i+           (progn	Err	bitreich.org	70
i+             (format t " => ~aerror~a~%" *red* *white*)	Err	bitreich.org	70
i+             (uiop:run-program (trigger-alert ',level ',fonction ',params (cadr result)) :output t)	Err	bitreich.org	70
i+             nil)))))	Err	bitreich.org	70
1diff --git a/probes.lisp b/probes.lisp	/scm/reed-alert/file/probes.lisp.gph	bitreich.org	70
i@@ -0,0 +1,92 @@	Err	bitreich.org	70
i+(defmacro create-probe(name &body code)	Err	bitreich.org	70
i+  `(progn (defun ,name(params) ,@code)))	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+(defun command-return-code(command)	Err	bitreich.org	70
i+  (let ((code (nth-value 2 (uiop:run-program command :ignore-error-status t))))	Err	bitreich.org	70
i+    (if (= 0 code)	Err	bitreich.org	70
i+        t	Err	bitreich.org	70
i+        (list nil (format nil "return code = ~a" code)))))	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+(create-probe	Err	bitreich.org	70
i+ file-exists	Err	bitreich.org	70
i+ (let ((result (probe-file (getf params :path))))	Err	bitreich.org	70
i+   (if result	Err	bitreich.org	70
i+       t	Err	bitreich.org	70
i+       (list nil "file not found"))))	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+(create-probe	Err	bitreich.org	70
i+ file-updated	Err	bitreich.org	70
i+ (if (probe-file (getf params :path))	Err	bitreich.org	70
i+     (with-open-file (file (getf params :path))	Err	bitreich.org	70
i+       (let* ((write-date (file-write-date file))	Err	bitreich.org	70
i+              (now (get-universal-time))	Err	bitreich.org	70
i+              (result (floor (- now write-date) 60)))	Err	bitreich.org	70
i+         (if (> (getf params :limit) result)	Err	bitreich.org	70
i+             t	Err	bitreich.org	70
i+             (list nil result))))	Err	bitreich.org	70
i+     (list nil "file not found")))	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+(create-probe	Err	bitreich.org	70
i+ pid-running	Err	bitreich.org	70
i+ (if (probe-file (getf params :path))	Err	bitreich.org	70
i+     (let ((pid-number (with-open-file (stream (getf params :path)) (read-line stream))))	Err	bitreich.org	70
i+       (command-return-code (list "ps" "-p" pid-number)))	Err	bitreich.org	70
i+     (list nil "file not found")))	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+(create-probe	Err	bitreich.org	70
i+ disk-usage	Err	bitreich.org	70
i+ (let* ((output (uiop:run-program (list "df" (getf params :path)) :output :lines)) (line (second output)))	Err	bitreich.org	70
i+   (let ((percent-character-pos (position #\% line)))	Err	bitreich.org	70
i+     (let ((used-disk	Err	bitreich.org	70
i+            (parse-integer	Err	bitreich.org	70
i+             (subseq line	Err	bitreich.org	70
i+                     (position #\Space line :end percent-character-pos :from-end t)	Err	bitreich.org	70
i+                     percent-character-pos))))	Err	bitreich.org	70
i+       (if (< used-disk (getf params :limit))	Err	bitreich.org	70
i+           t	Err	bitreich.org	70
i+           (list nil "used-disk"))))))	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+(defun system-load(time)	Err	bitreich.org	70
i+  (read-from-string	Err	bitreich.org	70
i+   (let ((command (concatenate 'string	Err	bitreich.org	70
i+                               "uptime | awk '{ print $"	Err	bitreich.org	70
i+                               (princ-to-string time)	Err	bitreich.org	70
i+                               " }'")))	Err	bitreich.org	70
i+     (uiop:run-program command :output :string))))	Err	bitreich.org	70
i+    	Err	bitreich.org	70
i+(create-probe	Err	bitreich.org	70
i+ load-average-1	Err	bitreich.org	70
i+ (let ((load (system-load 10)))	Err	bitreich.org	70
i+   (if (< load (getf params :limit))	Err	bitreich.org	70
i+       t	Err	bitreich.org	70
i+       (list nil load))))	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+(create-probe	Err	bitreich.org	70
i+ load-average-5	Err	bitreich.org	70
i+ (let ((load (system-load 11)))	Err	bitreich.org	70
i+   (if (< load (getf params :limit))	Err	bitreich.org	70
i+       t	Err	bitreich.org	70
i+       (list nil load))))	Err	bitreich.org	70
i+ 	Err	bitreich.org	70
i+(create-probe	Err	bitreich.org	70
i+ load-average-15	Err	bitreich.org	70
i+ (let ((load (system-load 12)))	Err	bitreich.org	70
i+   (if (< load (getf params :limit))	Err	bitreich.org	70
i+       t	Err	bitreich.org	70
i+       (list nil load))))	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+(create-probe	Err	bitreich.org	70
i+ command	Err	bitreich.org	70
i+ (command-return-code (getf params :command)))	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+(create-probe	Err	bitreich.org	70
i+ ping	Err	bitreich.org	70
i+ (command-return-code (list "ping" "-c2" (getf params :host))))	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+(create-probe	Err	bitreich.org	70
i+ number-of-processes	Err	bitreich.org	70
i+ (let* ((output (uiop:run-program (list "ps" "aux") :output :lines))	Err	bitreich.org	70
i+        (result (length output)))	Err	bitreich.org	70
i+   (if (> (getf params :limit) result)	Err	bitreich.org	70
i+       t	Err	bitreich.org	70
i+       (list nil result))))	Err	bitreich.org	70
.
Response: text/plain
Original URLgopher://bitreich.org/0/scm/reed-alert/commit/9410e05e37a...
Content-Typetext/plain; charset=utf-8