From 95a4702ef15438ea82a0d644dd8c84e7686a855f Mon Sep 17 00:00:00 2001 From: Ilona Podliashanyk Date: Wed, 19 Jun 2024 11:46:12 +0200 Subject: [PATCH 1/9] Add properties to EventSort enum that are relevant for UI --- src/howitz/endpoints.py | 34 +++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/src/howitz/endpoints.py b/src/howitz/endpoints.py index 7fa377d..c6ba541 100644 --- a/src/howitz/endpoints.py +++ b/src/howitz/endpoints.py @@ -42,25 +42,29 @@ class EventColor(StrEnum): # Inspired by https://stackoverflow.com/a/54732120 class EventSort(Enum): - AGE = "age", "opened", True # Newest events first - AGE_REV = "age-rev", "opened", False # Oldest events first - UPD = "upd", "updated", False # Events with the oldest update date first - UPD_REV = "upd-rev", "updated", True # Events with the most recent update date first - DOWN = "down", "get_downtime", True # Longest downtime first - DOWN_REV = "down-rev", "get_downtime", False # Shortest/none downtime first - - LASTTRANS = "lasttrans", "updated", True # Newest transaction first, all IGNORED at the bottom. Default sorting at SSC - SEVERITY = "severity", "", True # Events of same color grouped together. The most severe (red) at the top and ignored at the bottom - DEFAULT = "raw", "", None # Unchanged order in which Zino server sends events (by ID ascending) + # Name, relevant event attribute, is_reversed, displayed name, description + AGE = "age", "opened", True, "Age", "Newest events first" + AGE_REV = "age-rev", "opened", False, "Age reversed", "Oldest events first" + UPD = "upd", "updated", False, "Activity", "Events with the oldest update date first" + UPD_REV = "upd-rev", "updated", True, "Activity reversed", "Events with the most recent update date first" + DOWN = "down", "get_downtime", True, "Downtime", "Events with longest downtime first" + DOWN_REV = "down-rev", "get_downtime", False, "Downtime reversed", "Events with shortest/none downtime first" + + LASTTRANS = ("lasttrans", "updated", True, "Last transaction", + "Events with the most recent update date first, all IGNORED events are at the bottom") + SEVERITY = "severity", "", True, "Severity", "Events with highest priority first, grouped by event type" + DEFAULT = "raw", "", None, "Raw", "Unchanged order in which Zino server sends events (by ID ascending)" def __new__(cls, *args, **kwds): obj = object.__new__(cls) obj._value_ = args[0] return obj - def __init__(self, _: str, attribute: str = None, reversed: bool = None): + def __init__(self, _: str, attribute: str = None, reversed: bool = None, display_name: str = None, description: str = None): self._attribute = attribute self._reversed = reversed + self._display_name = display_name + self._description = description def __str__(self): return self.value @@ -73,6 +77,14 @@ def attribute(self): def reversed(self): return self._reversed + @property + def display_name(self): + return self._display_name + + @property + def description(self): + return self._description + def auth_handler(username, password): # check user credentials in database From e6412982dddeb43288ad40adc99f9d7ecfb9d5b0 Mon Sep 17 00:00:00 2001 From: Ilona Podliashanyk Date: Wed, 19 Jun 2024 11:48:15 +0200 Subject: [PATCH 2/9] Implement component to fill content of events sort modal --- .../popups/modals/forms/sort-table-form.html | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 src/howitz/templates/components/popups/modals/forms/sort-table-form.html diff --git a/src/howitz/templates/components/popups/modals/forms/sort-table-form.html b/src/howitz/templates/components/popups/modals/forms/sort-table-form.html new file mode 100644 index 0000000..fbac511 --- /dev/null +++ b/src/howitz/templates/components/popups/modals/forms/sort-table-form.html @@ -0,0 +1,45 @@ +
+
+
+
+ Change the order in which events are displayed in the + table + +

Sort events by:

+
+ {% for sort in sort_methods %} +
+
+ +
+
+ +

{{ sort.description }}

+
+
+ {% endfor %} +
+
+
+
+ +
+ + +

+ Updating events order... +

+
+
From 5b20cc70f10797202366f1ab8b9a327719ab9ed4 Mon Sep 17 00:00:00 2001 From: Ilona Podliashanyk Date: Wed, 19 Jun 2024 11:49:56 +0200 Subject: [PATCH 3/9] Polish generic table operation modal Make spacing prettier, add id to content div (for HTMX) --- .../popups/modals/table-operation-modal.html | 23 +++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/src/howitz/templates/components/popups/modals/table-operation-modal.html b/src/howitz/templates/components/popups/modals/table-operation-modal.html index f39c2f0..492b142 100644 --- a/src/howitz/templates/components/popups/modals/table-operation-modal.html +++ b/src/howitz/templates/components/popups/modals/table-operation-modal.html @@ -19,15 +19,20 @@ id="modal-title">{{ modal_title }} -
- {% if path_to_content %} - {% include path_to_content %} - {% else %} -

- Nothing to display -

- {% endif %} - +
+
+
+ +
+
From 67e80667c9b8de6c6f7811681bc3a9f67804e6d4 Mon Sep 17 00:00:00 2001 From: Ilona Podliashanyk Date: Wed, 19 Jun 2024 11:51:38 +0200 Subject: [PATCH 4/9] Call separate endpoint when clicking on sort events button --- src/howitz/endpoints.py | 8 ++++++++ .../templates/components/toolbar/table-sort-btn.html | 4 ++++ 2 files changed, 12 insertions(+) diff --git a/src/howitz/endpoints.py b/src/howitz/endpoints.py index c6ba541..bc0bde3 100644 --- a/src/howitz/endpoints.py +++ b/src/howitz/endpoints.py @@ -764,6 +764,14 @@ def clear_flapping(i): raise MethodNotAllowed(description='Cant clear flapping on a non-port event.') + +@main.route('/events/table/change_sort_by', methods=['GET', 'POST']) +def change_events_order(): + if request.method == 'GET': + return render_template('/components/popups/modals/forms/sort-table-form.html', sort_methods=EventSort, + current_sort=EventSort(session["sort_by"])) + + @main.route('/navbar/show-user-menu', methods=["GET"]) def show_user_menu(): return render_template('/responses/show-user-menu.html') diff --git a/src/howitz/templates/components/toolbar/table-sort-btn.html b/src/howitz/templates/components/toolbar/table-sort-btn.html index 702d822..b0589f0 100644 --- a/src/howitz/templates/components/toolbar/table-sort-btn.html +++ b/src/howitz/templates/components/toolbar/table-sort-btn.html @@ -3,6 +3,10 @@ hx-on:mouseenter="htmx.removeClass(htmx.find('#sort-popover'), 'invisible')" hx-on:mouseleave="htmx.addClass(htmx.find('#sort-popover'), 'invisible')" hx-on:click="htmx.removeClass(htmx.find('#sort-menu-dropdown'), 'invisible')" + hx-get="/events/table/change_sort_by" + hx-target="#sort-menu-dropdown-content" + hx-swap="innerHTML" + hx-trigger="click" aria-describedby="sort-popover" > Date: Wed, 19 Jun 2024 12:17:48 +0200 Subject: [PATCH 5/9] Make events sort updateable via modal --- src/howitz/endpoints.py | 18 ++++++++++++++++-- .../popups/modals/forms/sort-table-form.html | 8 ++++---- .../popups/modals/table-operation-modal.html | 1 + .../templates/responses/resort-events.html | 7 +++++++ 4 files changed, 28 insertions(+), 6 deletions(-) create mode 100644 src/howitz/templates/responses/resort-events.html diff --git a/src/howitz/endpoints.py b/src/howitz/endpoints.py index bc0bde3..d6bd2b6 100644 --- a/src/howitz/endpoints.py +++ b/src/howitz/endpoints.py @@ -764,10 +764,24 @@ def clear_flapping(i): raise MethodNotAllowed(description='Cant clear flapping on a non-port event.') - @main.route('/events/table/change_sort_by', methods=['GET', 'POST']) def change_events_order(): - if request.method == 'GET': + if request.method == 'POST': + # Get new sort method from the request + new_sort = request.form['sort-method'] + session["sort_by"] = new_sort + session.modified = True + + # Rerender whole events table + events = current_app.cache.get("events") + if events: + table_events = get_sorted_table_event_list(events) + else: + table_events = get_current_events() + + return render_template('/responses/resort-events.html', event_list=table_events) + + elif request.method == 'GET': return render_template('/components/popups/modals/forms/sort-table-form.html', sort_methods=EventSort, current_sort=EventSort(session["sort_by"])) diff --git a/src/howitz/templates/components/popups/modals/forms/sort-table-form.html b/src/howitz/templates/components/popups/modals/forms/sort-table-form.html index fbac511..6bd3f8a 100644 --- a/src/howitz/templates/components/popups/modals/forms/sort-table-form.html +++ b/src/howitz/templates/components/popups/modals/forms/sort-table-form.html @@ -10,7 +10,7 @@ {% for sort in sort_methods %}
-
@@ -29,9 +29,9 @@