From 65cea7a3cbb9c7783981dcf7a50f47c02421ec04 Mon Sep 17 00:00:00 2001 From: Codyjackson0321 Date: Mon, 7 Sep 2026 21:59:09 -0400 Subject: [PATCH 01/16] chore: updated django/pytest/sqlparse --- pyproject.toml | 7 +++++-- uv.lock | 43 +++++++++++++++++++++++-------------------- 2 files changed, 28 insertions(+), 22 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 7f76d8d1..2add8f53 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -11,7 +11,7 @@ license = { file = "LICENSE.txt" } requires-python = ">=3.12" dependencies = [ "cryptography>=46.0.6", - "django>=6.0.3", + "django>=6.0.8,<6.1", "django-browser-reload>=1.21.0", "django-htmx>=1.27.0", "django-login-required-middleware>=0.9.0", @@ -57,6 +57,9 @@ otel = [ [tool.uv] package = true +override-dependencies = [ + "sqlparse>=0.6.0", +] [tool.hatch.build.targets.sdist] include = [ @@ -104,7 +107,7 @@ exclude = [ [dependency-groups] dev = [ "pre-commit>=4.5.1", - "pytest>=9.0.2", + "pytest>=9.0.3", "pytest-cov>=7.1.0", "pytest-django>=4.10.0", "testcontainers[postgres]>=4.15.0", diff --git a/uv.lock b/uv.lock index f1613ce1..54243ace 100644 --- a/uv.lock +++ b/uv.lock @@ -2,6 +2,9 @@ version = 1 revision = 3 requires-python = ">=3.12" +[manifest] +overrides = [{ name = "sqlparse", specifier = ">=0.6.0" }] + [[package]] name = "anyio" version = "4.13.0" @@ -326,16 +329,16 @@ wheels = [ [[package]] name = "django" -version = "6.0.3" +version = "6.0.8" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "asgiref" }, { name = "sqlparse" }, { name = "tzdata", marker = "sys_platform == 'win32'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/80/e1/894115c6bd70e2c8b66b0c40a3c367d83a5a48c034a4d904d31b62f7c53a/django-6.0.3.tar.gz", hash = "sha256:90be765ee756af8a6cbd6693e56452404b5ad15294f4d5e40c0a55a0f4870fe1", size = 10872701, upload-time = "2026-03-03T13:55:15.026Z" } +sdist = { url = "https://files.pythonhosted.org/packages/3c/28/5fee292e588dbdb782582436d1eb62ac8809ec55b98ef27f5b9676a00e9a/django-6.0.8.tar.gz", hash = "sha256:cb0bd962d27fc866f3c514b20aae6a7df56ec80b488f9899da46d675cd051526", size = 10924565, upload-time = "2026-08-04T15:03:39.469Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/72/b1/23f2556967c45e34d3d3cf032eb1bd3ef925ee458667fb99052a0b3ea3a6/django-6.0.3-py3-none-any.whl", hash = "sha256:2e5974441491ddb34c3f13d5e7a9f97b07ba03bf70234c0a9c68b79bbb235bc3", size = 8358527, upload-time = "2026-03-03T13:55:10.552Z" }, + { url = "https://files.pythonhosted.org/packages/2e/b4/23e74d261eebfa9c8baed5e8810f09858b9afd613d1037f42ff7aa95c87f/django-6.0.8-py3-none-any.whl", hash = "sha256:9b98b7e1902e0e575ea4f42c175fc9512784f7f2580898286aee3388b322219d", size = 8376956, upload-time = "2026-08-04T15:03:35.138Z" }, ] [[package]] @@ -556,11 +559,11 @@ wheels = [ [[package]] name = "idna" -version = "3.11" +version = "3.19" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/0703ccc57f3a7233505399edb88de3cbd678da106337b9fcde432b65ed60/idna-3.11.tar.gz", hash = "sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902", size = 194582, upload-time = "2025-10-12T14:55:20.501Z" } +sdist = { url = "https://files.pythonhosted.org/packages/5f/f7/abb373e5757eaec4b922b92f97ec8d6d7e057cf06778247604fbc4e7c3f3/idna-3.19.tar.gz", hash = "sha256:5e0811a4383b21dc5838069f801c4fb62113b7447663d2530d2bd6e77b49bf15", size = 215237, upload-time = "2026-08-18T05:14:24.27Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea", size = 71008, upload-time = "2025-10-12T14:55:18.883Z" }, + { url = "https://files.pythonhosted.org/packages/57/b0/0e52c878c53f245edd3a11020f20979b3f490f245af532c7cae3027754b5/idna-3.19-py3-none-any.whl", hash = "sha256:815e7be7a7806d54abb586dc943addc79e8b2ee16915059658cbeff4b1b43bf4", size = 68550, upload-time = "2026-08-18T05:14:22.343Z" }, ] [[package]] @@ -635,7 +638,7 @@ dev = [ [package.metadata] requires-dist = [ { name = "cryptography", specifier = ">=46.0.6" }, - { name = "django", specifier = ">=6.0.3" }, + { name = "django", specifier = ">=6.0.8,<6.1" }, { name = "django-browser-reload", specifier = ">=1.21.0" }, { name = "django-htmx", specifier = ">=1.27.0" }, { name = "django-login-required-middleware", specifier = ">=0.9.0" }, @@ -665,7 +668,7 @@ provides-extras = ["postgres", "mysql", "databases", "otel"] [package.metadata.requires-dev] dev = [ { name = "pre-commit", specifier = ">=4.5.1" }, - { name = "pytest", specifier = ">=9.0.2" }, + { name = "pytest", specifier = ">=9.0.3" }, { name = "pytest-cov", specifier = ">=7.1.0" }, { name = "pytest-django", specifier = ">=4.10.0" }, { name = "testcontainers", extras = ["mysql"], specifier = ">=4.15.0" }, @@ -959,11 +962,11 @@ wheels = [ [[package]] name = "pyasn1" -version = "0.6.3" +version = "0.6.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/5c/5f/6583902b6f79b399c9c40674ac384fd9cd77805f9e6205075f828ef11fb2/pyasn1-0.6.3.tar.gz", hash = "sha256:697a8ecd6d98891189184ca1fa05d1bb00e2f84b5977c481452050549c8a72cf", size = 148685, upload-time = "2026-03-17T01:06:53.382Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a4/9a/23310166d960def5897e91fe20e5b724601b02a22e84ba1f94232c0b7f67/pyasn1-0.6.4.tar.gz", hash = "sha256:9c447d8431c947fe4c8febc4ed9e760bc29011a5b01e5c74b67025bd9fb8ce81", size = 151262, upload-time = "2026-07-09T01:12:33.988Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/5d/a0/7d793dce3fa811fe047d6ae2431c672364b462850c6235ae306c0efd025f/pyasn1-0.6.3-py3-none-any.whl", hash = "sha256:a80184d120f0864a52a073acc6fc642847d0be408e7c7252f31390c0f4eadcde", size = 83997, upload-time = "2026-03-17T01:06:52.036Z" }, + { url = "https://files.pythonhosted.org/packages/9a/3b/6163796d69c3977d1e4287bea4a6979161cbbdd170ebb430511e8e1999ce/pyasn1-0.6.4-py3-none-any.whl", hash = "sha256:deda9277cfd454080ec40b207fb6df82206a3a2688735233cdcd8d3d565f088b", size = 84410, upload-time = "2026-07-09T01:12:32.92Z" }, ] [[package]] @@ -1030,7 +1033,7 @@ wheels = [ [[package]] name = "pytest" -version = "9.0.2" +version = "9.1.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, @@ -1039,9 +1042,9 @@ dependencies = [ { name = "pluggy" }, { name = "pygments" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d1/db/7ef3487e0fb0049ddb5ce41d3a49c235bf9ad299b6a25d5780a89f19230f/pytest-9.0.2.tar.gz", hash = "sha256:75186651a92bd89611d1d9fc20f0b4345fd827c41ccd5c299a868a05d70edf11", size = 1568901, upload-time = "2025-12-06T21:30:51.014Z" } +sdist = { url = "https://files.pythonhosted.org/packages/e4/47/b9efed96c114afcfa3c9d3fe98a76a1d14c74a9e266d397cf6eb64be5e01/pytest-9.1.1.tar.gz", hash = "sha256:1088fbde8f2b49d95a549a195707afa7a76a3ce9bcadc26b6d71f0ffda5fe313", size = 1636369, upload-time = "2026-06-19T10:58:32.857Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl", hash = "sha256:711ffd45bf766d5264d487b917733b453d917afd2b0ad65223959f59089f875b", size = 374801, upload-time = "2025-12-06T21:30:49.154Z" }, + { url = "https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl", hash = "sha256:37a86b45efb9a47a61a36449063e8e18d0cab3161329fc099eb21783169c4f0c", size = 386536, upload-time = "2026-06-19T10:58:31.347Z" }, ] [[package]] @@ -1327,11 +1330,11 @@ wheels = [ [[package]] name = "sqlparse" -version = "0.5.5" +version = "0.6.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/90/76/437d71068094df0726366574cf3432a4ed754217b436eb7429415cf2d480/sqlparse-0.5.5.tar.gz", hash = "sha256:e20d4a9b0b8585fdf63b10d30066c7c94c5d7a7ec47c889a2d83a3caa93ff28e", size = 120815, upload-time = "2025-12-19T07:17:45.073Z" } +sdist = { url = "https://files.pythonhosted.org/packages/5f/d3/3f06a1006f2261d1342aefb3c71eed02f5d4ca5bdbecd86ebc12ad38306e/sqlparse-0.6.0.tar.gz", hash = "sha256:113c35c75365ab9cc9c7231d68c6428fb11c085fc8e9eb1ad659b7ddbf6cd2b9", size = 178477, upload-time = "2026-08-13T19:16:06.396Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/49/4b/359f28a903c13438ef59ebeee215fb25da53066db67b305c125f1c6d2a25/sqlparse-0.5.5-py3-none-any.whl", hash = "sha256:12a08b3bf3eec877c519589833aed092e2444e68240a3577e8e26148acc7b1ba", size = 46138, upload-time = "2025-12-19T07:17:46.573Z" }, + { url = "https://files.pythonhosted.org/packages/d9/50/f00935da0ec7cbf325f8dc4f772ae46fbc7b672dd62876e73f0a94adda57/sqlparse-0.6.0-py3-none-any.whl", hash = "sha256:b861c0288ce2fa56209a9a6412d2e066ac664b3873b89c26c9d8415e8e32996f", size = 50070, upload-time = "2026-08-13T19:16:04.062Z" }, ] [[package]] @@ -1376,11 +1379,11 @@ wheels = [ [[package]] name = "urllib3" -version = "2.6.3" +version = "2.7.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c7/24/5f1b3bdffd70275f6661c76461e25f024d5a38a46f04aaca912426a2b1d3/urllib3-2.6.3.tar.gz", hash = "sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed", size = 435556, upload-time = "2026-01-07T16:24:43.925Z" } +sdist = { url = "https://files.pythonhosted.org/packages/53/0c/06f8b233b8fd13b9e5ee11424ef85419ba0d8ba0b3138bf360be2ff56953/urllib3-2.7.0.tar.gz", hash = "sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c", size = 433602, upload-time = "2026-05-07T16:13:18.596Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl", hash = "sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4", size = 131584, upload-time = "2026-01-07T16:24:42.685Z" }, + { url = "https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl", hash = "sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897", size = 131087, upload-time = "2026-05-07T16:13:17.151Z" }, ] [[package]] From 2f9312002a6cd8d4e23ce509e9c00db4a5510724 Mon Sep 17 00:00:00 2001 From: Cody Date: Wed, 9 Sep 2026 02:11:46 +0000 Subject: [PATCH 02/16] refactor: initial simulation panel refresh --- .../templates/pipeline_editor.html | 135 ++++++++++++------ 1 file changed, 93 insertions(+), 42 deletions(-) diff --git a/src/logstashui/PipelineManager/templates/pipeline_editor.html b/src/logstashui/PipelineManager/templates/pipeline_editor.html index d60089db..2b59cc66 100644 --- a/src/logstashui/PipelineManager/templates/pipeline_editor.html +++ b/src/logstashui/PipelineManager/templates/pipeline_editor.html @@ -141,7 +141,7 @@

Pipeline Logs - slot${currentSlotId } /** - * Compact sim status light: colored circle + tooltip; message is sr-only. + * Compact labelled simulation status; full message is mirrored into its detail popover. * @param {'ok'|'warn'|'err'|'busy'} kind */ function setSimStatusLight(containerId, iconId, messageId, kind, title) { @@ -149,7 +149,7 @@

Pipeline Logs - slot${currentSlotId const msg = document.getElementById(messageId); if (!el) return; const base = - 'sim-status-light inline-flex items-center justify-center w-8 h-8 rounded-full border'; + 'sim-status-light inline-flex items-center gap-1 px-1.5 h-7 rounded-md border'; const styles = { ok: `${base} border-green-600 bg-green-900/40`, warn: `${base} border-yellow-600 bg-yellow-900/40`, @@ -161,7 +161,7 @@

Pipeline Logs - slot${currentSlotId el.setAttribute('aria-label', title || ''); const icons = { - ok: ``, + ok: ``, warn: ``, err: ``, busy: ``, @@ -862,8 +862,9 @@

{{ pipeline_name }}
- -
+ +
+ Simulation
@@ -886,48 +887,60 @@

{{ pipeline_name }}

- -
- - Checking agent… + +
+
+ + Agent + Checking agent… +
+
- -
- - Checking Logstash health… + +
+
+ + Logstash + Checking Logstash health… +
+
-
- - Unallocated +
+
+ + Unallocated +
+
-
+
@@ -1335,12 +1348,36 @@

Output

-{% endblock %} \ No newline at end of file +{% endblock %} From 65f9d5ea64ad8e15077191d15e0574dff15496dd Mon Sep 17 00:00:00 2001 From: Cody Date: Wed, 9 Sep 2026 13:16:53 +0000 Subject: [PATCH 08/16] refactor: refactor buttons --- .../templates/pipeline_editor.html | 35 ++++++++++++++----- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/src/logstashui/PipelineManager/templates/pipeline_editor.html b/src/logstashui/PipelineManager/templates/pipeline_editor.html index 2358b0da..7a07568b 100644 --- a/src/logstashui/PipelineManager/templates/pipeline_editor.html +++ b/src/logstashui/PipelineManager/templates/pipeline_editor.html @@ -990,30 +990,41 @@

{{ pipeline_name }}

@@ -1413,10 +1424,16 @@

Output

#uiModeBtn, #textModeBtn, #graphModeBtn { - display: inline-flex; flex-direction: column; align-items: center; justify-content: center; - gap: 2px; width: 64px; height: 48px; padding: 4px; font-size: 11px; line-height: 13px; + display: inline-flex; align-items: center; justify-content: center; + gap: 6px; width: 68px; height: 36px; padding: 4px 7px; border: 1px solid transparent; + font-size: 11px; line-height: 13px; + } + .editor-mode-icon { width: 16px; height: 16px; flex-shrink: 0; } + .editor-mode-switcher .mode-toggle-active { + animation: none; background: #16a34a; + border: 1px solid rgba(74, 222, 128, 0.6); + box-shadow: 0 0 0 1px rgba(34, 197, 94, 0.18), 0 3px 10px rgba(0, 0, 0, 0.28); } - .editor-mode-icon { width: 18px; height: 18px; flex-shrink: 0; } @media (max-width: 480px) { .simulation-panel { gap: 3px; padding-inline: 4px; } .simulation-target-wrap { gap: 4px; padding-right: 4px; } From b4ebdd19b1c9c2f203e31457c1117eb0ad46fd89 Mon Sep 17 00:00:00 2001 From: Cody Date: Wed, 9 Sep 2026 13:24:59 +0000 Subject: [PATCH 09/16] refactor: finish new sim/switcher/button style --- .../templates/pipeline_editor.html | 39 ++++++++++++++----- 1 file changed, 29 insertions(+), 10 deletions(-) diff --git a/src/logstashui/PipelineManager/templates/pipeline_editor.html b/src/logstashui/PipelineManager/templates/pipeline_editor.html index 7a07568b..741ee0e9 100644 --- a/src/logstashui/PipelineManager/templates/pipeline_editor.html +++ b/src/logstashui/PipelineManager/templates/pipeline_editor.html @@ -866,8 +866,8 @@

{{ pipeline_name }} - -
+ +
@@ -983,8 +983,8 @@

{{ pipeline_name }} -
-
+
+ {% csrf_token %} @@ -1013,7 +1013,7 @@

{{ pipeline_name }}

- - -
+ + +

@@ -1388,8 +1388,8 @@

Output