From 16135d8e56e93448987bc01dc7e32e607d414115 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20N=C3=A1jera?= Date: Sun, 28 Aug 2022 20:40:27 +0200 Subject: Refresh filters on livestatus query --- elisp/cmk.el | 62 ++++++++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 46 insertions(+), 16 deletions(-) diff --git a/elisp/cmk.el b/elisp/cmk.el index 4ef87e2..a139258 100644 --- a/elisp/cmk.el +++ b/elisp/cmk.el @@ -118,25 +118,55 @@ Default is \"%Y-%m-%d %H:%M\"." ;; Filter: class = 8 ;; Or: 3\n\n") -(defun cmk-problems () - (interactive) - (let ((cmks (cmk-oneshot 'keep)) - (buffer (get-buffer-create "*CMK Problems*"))) +(defun cmk-livestatus-query (query) + "One shot livestatus QUERY, return network process." + (let ((cmks (cmk-oneshot 'keep))) (with-current-buffer (process-buffer cmks) (erase-buffer)) - (process-send-string cmks - (concat (string-join `("GET services" - ,(cmk-colums-from-spec cmk-problem-col-spec) - "Filter: service_description ~ load") "\n") - "\n\n")) - (with-current-buffer buffer - (tabulated-list-mode) - (setq tabulated-list-format (vconcat cmk-problem-col-spec)) - (setq tabulated-list-sort-key '("STATE" . nil)) + (process-send-string cmks query) + cmks)) + +(defvar-local cmk-livestatus-query "" + "Livestatus query in buffer.") + +(defun cmk-table--refresh () + "Query and reprint the Livestatus query result table." + (let ((cmks (cmk-livestatus-query cmk-livestatus-query))) (accept-process-output cmks 0.1) (setq tabulated-list-entries (cmk-parse-rows (process-buffer cmks) cmk-problem-col-spec)) - (tabulated-list-init-header) - (tabulated-list-print) - (display-buffer (current-buffer))))) + (tabulated-list-print 'remember))) + +(defun cmk-edit-lq (query buffer) + (interactive (list cmk-livestatus-query (current-buffer))) + (with-current-buffer (get-buffer-create "*LQ*") + (prog-mode) + (insert query) + (local-set-key "\C-c\C-c" + (lambda () + (interactive) + (let ((new-query (-> (buffer-string) (string-trim) (concat "\n\n")))) + (kill-buffer) + (switch-to-buffer buffer) + (setq-local cmk-livestatus-query new-query) + (cmk-table--refresh)))) + (switch-to-buffer (current-buffer)))) + +(defun cmk-problems () + (interactive) + (with-current-buffer (get-buffer-create "*CMK Problems*") + (tabulated-list-mode) + (setq-local cmk-livestatus-query + (concat (string-join `("GET services" + ,(cmk-colums-from-spec cmk-problem-col-spec) + "Filter: service_description ~ load") "\n") + "\n\n")) + (setq tabulated-list-format (vconcat cmk-problem-col-spec)) + (setq tabulated-list-sort-key '("STATE" . nil)) + + (local-set-key "Q" #'cmk-edit-lq) + (add-hook 'tabulated-list-revert-hook #'cmk-table--refresh nil t) + (tabulated-list-init-header) + (cmk-table--refresh) + (switch-to-buffer (current-buffer)))) ;;; Get a different csv ;; (let* ((cmks (cmk-oneshot t))) -- cgit v1.2.3