iprobes.lisp - 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 iprobes.lisp (4338B) Err bitreich.org 70 i--- Err bitreich.org 70 i 1 (create-probe Err bitreich.org 70 i 2 check-file-exists Err bitreich.org 70 i 3 (let ((result (probe-file (getf params :path)))) Err bitreich.org 70 i 4 (if result Err bitreich.org 70 i 5 t Err bitreich.org 70 i 6 (list nil "file not found")))) Err bitreich.org 70 i 7 Err bitreich.org 70 i 8 (create-probe Err bitreich.org 70 i 9 file-updated Err bitreich.org 70 i 10 (if (probe-file (getf params :path)) Err bitreich.org 70 i 11 (with-open-file (file (getf params :path)) Err bitreich.org 70 i 12 (let* ((write-date (file-write-date file)) Err bitreich.org 70 i 13 (now (get-universal-time)) Err bitreich.org 70 i 14 (result (floor (- now write-date) 60))) Err bitreich.org 70 i 15 (if (> (getf params :limit) result) Err bitreich.org 70 i 16 t Err bitreich.org 70 i 17 (list nil result)))) Err bitreich.org 70 i 18 (list nil "file not found"))) Err bitreich.org 70 i 19 Err bitreich.org 70 i 20 (create-probe Err bitreich.org 70 i 21 service Err bitreich.org 70 i 22 (command-return-code Err bitreich.org 70 i 23 #+openbsd Err bitreich.org 70 i 24 (list "/usr/sbin/rcctl" "check" (getf params :name)) Err bitreich.org 70 i 25 #+freebsd Err bitreich.org 70 i 26 (list "/usr/sbin/service" (getf params :name) "status") Err bitreich.org 70 i 27 #+linux Err bitreich.org 70 i 28 (if (probe-file "/etc/portage/make.conf") Err bitreich.org 70 i 29 ;; gentoo Err bitreich.org 70 i 30 (list "/sbin/rc-service" (getf params :name) "status") Err bitreich.org 70 i 31 ;; most linux Err bitreich.org 70 i 32 (if (probe-file "/usr/sbin/service") Err bitreich.org 70 i 33 (list "/usr/sbin/service" (getf params :name) "status") Err bitreich.org 70 i 34 ;; other linux with systemd only Err bitreich.org 70 i 35 (list "/usr/bin/systemctl" "status" (getf params :name)))))) Err bitreich.org 70 i 36 Err bitreich.org 70 i 37 (create-probe Err bitreich.org 70 i 38 pid-running Err bitreich.org 70 i 39 (if (probe-file (getf params :path)) Err bitreich.org 70 i 40 (let ((pid-number (with-open-file (stream (getf params :path)) (read-line stream)))) Err bitreich.org 70 i 41 (command-return-code (list "ps" "-p" pid-number))) Err bitreich.org 70 i 42 (list nil "file not found"))) Err bitreich.org 70 i 43 Err bitreich.org 70 i 44 (create-probe Err bitreich.org 70 i 45 disk-usage Err bitreich.org 70 i 46 (let* ((output (uiop:run-program (list "df" (getf params :path)) :output :lines)) (line (second output))) Err bitreich.org 70 i 47 (let ((percent-character-pos (position #\% line))) Err bitreich.org 70 i 48 (let ((used-disk Err bitreich.org 70 i 49 (parse-integer Err bitreich.org 70 i 50 (subseq line Err bitreich.org 70 i 51 (position #\Space line :end percent-character-pos :from-end t) Err bitreich.org 70 i 52 percent-character-pos)))) Err bitreich.org 70 i 53 (if (< used-disk (getf params :limit)) Err bitreich.org 70 i 54 t Err bitreich.org 70 i 55 (list nil used-disk)))))) Err bitreich.org 70 i 56 Err bitreich.org 70 i 57 (defun system-load(time) Err bitreich.org 70 i 58 (read-from-string Err bitreich.org 70 i 59 (let ((command (strcat Err bitreich.org 70 i 60 "uptime | awk '{ print $(NF-" Err bitreich.org 70 i 61 (princ-to-string time) Err bitreich.org 70 i 62 ") }'"))) Err bitreich.org 70 i 63 (uiop:run-program command :output :string)))) Err bitreich.org 70 i 64 Err bitreich.org 70 i 65 (create-probe Err bitreich.org 70 i 66 load-average-1 Err bitreich.org 70 i 67 (let ((load (system-load 2))) Err bitreich.org 70 i 68 (if (< load (getf params :limit)) Err bitreich.org 70 i 69 t Err bitreich.org 70 i 70 (list nil load)))) Err bitreich.org 70 i 71 Err bitreich.org 70 i 72 (create-probe Err bitreich.org 70 i 73 load-average-5 Err bitreich.org 70 i 74 (let ((load (system-load 1))) Err bitreich.org 70 i 75 (if (< load (getf params :limit)) Err bitreich.org 70 i 76 t Err bitreich.org 70 i 77 (list nil load)))) Err bitreich.org 70 i 78 Err bitreich.org 70 i 79 (create-probe Err bitreich.org 70 i 80 load-average-15 Err bitreich.org 70 i 81 (let ((load (system-load 0))) Err bitreich.org 70 i 82 (if (< load (getf params :limit)) Err bitreich.org 70 i 83 t Err bitreich.org 70 i 84 (list nil load)))) Err bitreich.org 70 i 85 Err bitreich.org 70 i 86 (create-probe Err bitreich.org 70 i 87 file-more-than Err bitreich.org 70 i 88 (if (probe-file (getf params :path)) Err bitreich.org 70 i 89 (let ((result (get-file-size (getf params :path)))) Err bitreich.org 70 i 90 (if (< result (getf params :limit)) Err bitreich.org 70 i 91 t Err bitreich.org 70 i 92 (list nil result))) Err bitreich.org 70 i 93 "file not found")) Err bitreich.org 70 i 94 Err bitreich.org 70 i 95 (create-probe Err bitreich.org 70 i 96 file-less-than Err bitreich.org 70 i 97 (if (probe-file (getf params :path)) Err bitreich.org 70 i 98 (let ((result (get-file-size (getf params :path)))) Err bitreich.org 70 i 99 (if (> result (getf params :limit)) Err bitreich.org 70 i 100 t Err bitreich.org 70 i 101 (list nil result))) Err bitreich.org 70 i 102 "file not found")) Err bitreich.org 70 i 103 Err bitreich.org 70 i 104 (create-probe Err bitreich.org 70 i 105 command Err bitreich.org 70 i 106 (command-return-code (getf params :command))) Err bitreich.org 70 i 107 Err bitreich.org 70 i 108 (create-probe Err bitreich.org 70 i 109 ping Err bitreich.org 70 i 110 (command-return-code Err bitreich.org 70 i 111 #+openbsd Err bitreich.org 70 i 112 (list "ping" "-w1" "-c2" (getf params :host)) Err bitreich.org 70 i 113 #+freebsd Err bitreich.org 70 i 114 (list "ping" "-W1" "-c2" (getf params :host)) Err bitreich.org 70 i 115 #+linux Err bitreich.org 70 i 116 (list "ping" "-W1" "-c2" (getf params :host)))) Err bitreich.org 70 i 117 Err bitreich.org 70 i 118 (create-probe Err bitreich.org 70 i 119 number-of-processes Err bitreich.org 70 i 120 (let* ((output (uiop:run-program (list "ps" "aux") :output :lines)) Err bitreich.org 70 i 121 (result (length output))) Err bitreich.org 70 i 122 (if (> (getf params :limit) result) Err bitreich.org 70 i 123 t Err bitreich.org 70 i 124 (list nil result)))) Err bitreich.org 70 i 125 Err bitreich.org 70 i 126 (create-probe Err bitreich.org 70 i 127 curl-http-status Err bitreich.org 70 i 128 (command-return-code Err bitreich.org 70 i 129 (list "curl" "-f" Err bitreich.org 70 i 130 (format nil "-m~a" (getf params :timeout 5)) Err bitreich.org 70 i 131 (getf params :url)))) Err bitreich.org 70 i 132 Err bitreich.org 70 i 133 (create-probe Err bitreich.org 70 i 134 ssl-expiration Err bitreich.org 70 i 135 (command-return-code Err bitreich.org 70 i 136 (let ((host (getf params :host)) Err bitreich.org 70 i 137 (port (princ-to-string (getf params :port 443))) Err bitreich.org 70 i 138 (seconds (princ-to-string (getf params :seconds))) Err bitreich.org 70 i 139 (starttls (getf params :starttls))) Err bitreich.org 70 i 140 (strcat Err bitreich.org 70 i 141 "echo | openssl s_client -showcerts -servername " host Err bitreich.org 70 i 142 " -connect " host ":" port " 2>/dev/null |" Err bitreich.org 70 i 143 "openssl x509 -inform pem -noout " Err bitreich.org 70 i 144 (when starttls (strcat " -starttls " starttls)) Err bitreich.org 70 i 145 " -checkend " seconds)))) Err bitreich.org 70 i 146 Err bitreich.org 70 i 147 (create-probe Err bitreich.org 70 i 148 write-to-file Err bitreich.org 70 i 149 (let ((filepath (getf params :path nil)) Err bitreich.org 70 i 150 (text (getf params :text Err bitreich.org 70 i 151 (princ-to-string Err bitreich.org 70 i 152 (get-universal-time))))) Err bitreich.org 70 i 153 (when filepath Err bitreich.org 70 i 154 (with-open-file Err bitreich.org 70 i 155 (stream-out filepath Err bitreich.org 70 i 156 :direction :output Err bitreich.org 70 i 157 :if-exists :supersede) Err bitreich.org 70 i 158 (format stream-out "~a~%" text)) Err bitreich.org 70 i 159 t))) Err bitreich.org 70 .