summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--emacs/custom/my-ui.el2
-rw-r--r--emacs/elisp/my-uptime.el55
-rw-r--r--emacs/init.el1
3 files changed, 57 insertions, 1 deletions
diff --git a/emacs/custom/my-ui.el b/emacs/custom/my-ui.el
index 59d0b46..1dabcea 100644
--- a/emacs/custom/my-ui.el
+++ b/emacs/custom/my-ui.el
@@ -106,7 +106,7 @@
 	     (window-width . 0.4)
 	     (side . left)
 	     (slot . 0))
-        ("\\*\\(wclock\\).*"
+        ("\\*\\(wclock\\|slo-calculator\\).*"
          (display-buffer-in-side-window)
          (window-width . 0.35)
          (side . left)
diff --git a/emacs/elisp/my-uptime.el b/emacs/elisp/my-uptime.el
new file mode 100644
index 0000000..3522f91
--- /dev/null
+++ b/emacs/elisp/my-uptime.el
@@ -0,0 +1,55 @@
+;;; my-uptime.el --- calculates uptime for SLOs
+
+;;; Commentary:
+
+;; Calculate how much downtime is allowed for different period of time
+;; based on a given SLO.
+
+;;; Code:
+
+(defconst my-uptime/buffer-name "*slo-calculator*")
+
+(defconst my-uptime/seconds-per-hour 3600
+  "Number of seconds in an hour.")
+(defconst my-uptime/seconds-per-day (* my-uptime/seconds-per-hour 24)
+  "Number of seconds in a day.")
+(defconst my-uptime/seconds-per-week (* my-uptime/seconds-per-day 7)
+  "Number of seconds in a week.")
+(defconst my-uptime/seconds-per-month (* my-uptime/seconds-per-day 30)
+  "Number of seconds in a month.")
+(defconst my-uptime/seconds-per-quarter (* my-uptime/seconds-per-month 3)
+  "Number of seconds in a quarter.")
+(defconst my-uptime/seconds-per-year (* my-uptime/seconds-per-month 12)
+  "Number of seconds in a year.")
+
+(defun my-uptime/is (slo)
+  "Return the amount of allowed downtime for a given SLO."
+  (interactive "nSLO:")
+  (let* ((slo (cond ((< slo 0) 0)
+                    ((> slo 100) 100)
+                    (t slo)))
+         (allowed (/ (- (* 100 100) (* slo 100.0)) (* 100 100))))
+    (my-uptime/message allowed slo)))
+
+(defun my-uptime/message (seconds slo)
+  "Insert buffer text with allowed downtime based on SECONDS (derived from SLO)."
+  (let ((inhibit-read-only t)
+	(buffer-undo-list t))
+    (pop-to-buffer my-uptime/buffer-name)
+    (erase-buffer)
+    (insert (format "calculated allowed downtime for %s%% availability.\n" slo))
+    (insert
+     (format "daily:     %s\n" (format-seconds "%H %M %S" (seconds-to-time (* my-uptime/seconds-per-day seconds)))))
+    (insert
+     (format "weekly:    %s\n" (format-seconds "%H %M %S" (seconds-to-time (* my-uptime/seconds-per-week seconds)))))
+    (insert
+     (format "monthly:   %s\n" (format-seconds "%D %H %M %S" (seconds-to-time (* my-uptime/seconds-per-month seconds)))))
+    (insert
+     (format "quarterly: %s\n" (format-seconds "%D %H %M %S" (seconds-to-time (* my-uptime/seconds-per-quarter seconds)))))
+    (insert
+     (format "yearly:    %s\n" (format-seconds "%D %H %M %S" (seconds-to-time (* my-uptime/seconds-per-year seconds))))))
+  (special-mode))
+
+(provide 'my-uptime)
+
+;;; my-uptime.el ends here
diff --git a/emacs/init.el b/emacs/init.el
index 46d7e3e..399aab1 100644
--- a/emacs/init.el
+++ b/emacs/init.el
@@ -100,6 +100,7 @@ Missing packages are installed automatically."
 (require 'my-strings)
 (require 'my-web)
 (require 'my-work)
+(require 'my-uptime)
 (require 'my-packages-extra)
 
 ;;; init.el ends here