Fix/alert log column order - #366
Closed
bmfmancini wants to merge 44 commits into
Closed
bmfmancini wants to merge 44 commits into
bmfmancini wants to merge 44 commits into
Conversation
…arallel processing The master poller aggregated worker statistics through the per process cached read_config_option() helper. It had already read the same stats_syslog_child_N keys while waiting out the references phase, where the moved count is always zero, so the transfer aggregation re-read those cached numbers and the 'Records processed' figure on the Syslog Status tab stayed at zero. Move syslog_aggregate_worker_stats() next to the other worker helpers in functions.php and read the settings rows with a dedicated fresh SELECT, ignoring rows outside the configured worker range. Add regression tests pinning the fresh read, pruning, malformed-row handling, and the source scan that bans read_config_option() from the aggregation helper.
…ndling - Serialize panel expressions through syslogBuilderSync() so the DSL string (not the builder's structured JSON) reaches the backend, fixing 'Invalid logical search' errors on every panel save - Rebuild the chart select per panel kind (donut for breakdowns) and refresh selectmenu widgets after programmatic value changes so dropdowns show and submit the right values - Import saved searches from a server-parsed tree instead of wiping the builder model, restoring working saved-search dropdown seeding - Auto-select the first owned dashboard on tab entry so Add Panel is reachable and the correct empty state shows - Embed panel trees for editing so the dialog rehydrates exactly what was saved; guard Save against invalid builder rows
- Backtick the interval column in panel INSERT/UPDATE: it is a MySQL reserved word, so unquoted use made every panel save fail silently (the reported 'dropdowns do nothing' was saves never persisting) - Treat empty result arrays as not-found in dashboard/panel loads: some Cacti builds return [] instead of false from prepared row fetches, which had misreported every panel as an invalid source - Resolve new dashboard/panel ids by owner/name lookup when the connection's insert id is unavailable - Scope .syslogDashboardEmpty[hidden] to display:none so the theme cannot override the empty-state visibility
The dialog's expression builder rendered its field/operator selects as plain native controls because the builder element lacked the 'cacti' theme marker, making interaction inconsistent (native OS popups, and perceived unresponsive clicks) with the themed selects around it
The modal dialog's focus containment blurs menus that live outside its wrapper, which corrupts the selectmenu open/close state after the first selection — the next click on the same button toggled internal state without ever rendering the menu, so the dropdown worked exactly once Move each selectmenu's menu wrap into the dialog's own stacking context on open, the same way autocomplete suggestion menus are already handled
…board All-records timeseries panels emitted a double comma in each UNION branch (the bucket select already ends with a comma), producing invalid SQL. Breakdown panels crashed chart init in billboard.js: empty or duplicate sanitized labels become falsy/colliding legend ids, and getLegendItemTextBox() returns undefined for falsy ids. Blank labels now render as 'Unknown' and duplicate labels merge their counts
Panels can now be rearranged by dragging their header: drop targets show a placement line above or below the hovered card, and the drop posts the new absolute position, which the server renumbers gaplessly. Horizontal resizing gets a dedicated full-height edge strip (ew-resize) alongside the corner handle, so widening a panel does not require grabbing the tiny diagonal grip
Cacti 1.2 ships Font Awesome 5, which has no fa-pencil rule, so the edit icon rendered as an empty 14px void and the button appeared missing
- add admin page for dashboards - add user/group permissions to enable/.disable dashboarding
New syslog_dashboards_perm and syslog_saved_searches_perm tables store explicit user and group grants, managed from the admin Dashboards and Saved Search Templates pages with Cacti's jQuery multiselect widget. Visibility checks honor the grants: granted items appear in a new "Shared With Me" group of the viewer's selects, granted dashboards are view-only with "Save as my copy", and share rows are cleared when their item is deleted. Co-Authored-By: Claude Code <noreply@anthropic.com>
The dashboard tab already persisted a refresh value in the session and set_page_refresh() reloaded it, but there was no control to change it. Add a Refresh select beside Time Range using Cacti's page_refresh_interval options, wire its change through the same full-page nav as the timespan select so the interval lands in sess_sl_dashboard_refresh, and style it to match the existing dashboard bar. Co-Authored-By: Claude Code <noreply@anthropic.com>
- Alert Logs tab: initialize the value filter buttons, which rendered but had no click handlers bound on that tab - Alert Rules, Removal Rules, and Reports pages: point the Enabled and Rows selects at their per-page filter functions instead of the log viewer's global applyFilter(), which navigated away to syslog.php - URL-encode the search term in applyFilterAlerts/Removal/Reports so terms containing &, #, +, or % survive the round trip - Drop silently discarded extra arguments from html_escape() in the grouped message detail rows Co-Authored-By: Claude Code <noreply@anthropic.com>
…rting import of legacy xml files
…ted as alerts. Saved-search and dashboard imports now reach the correct handler and report failures visibly. Nullable alert email fields no longer trigger substr_count() deprecation warnings.
- PHPDoc with assumed types + native return types added across all plugin
files; hook-boundary params PHPDoc-only
- Genuine bug fixes uncovered by typing: division-by-zero on missing
poller_interval, malformed LIMIT on missing num_rows_table, saved-rule
id never returned, dashboard time-range selection never applied,
foreach over false db results, undefined-variable notices
- Rename per-page syslog_filter() to syslog_{alerts,reports,removal}_filter
to fix cross-file signature collision
- Widen syslog_apply_selected_items_action() action_map to int|string keys
PHPStan: 1020 -> 0 errors. Pest: 107 passed / 532 assertions.
(Local-only dev tooling: composer.json/lock and phpstan config stay untracked.)
# Conflicts: # functions.php # syslog_alerts.php # syslog_dashboards.php # syslog_removal.php # syslog_saved_searches.php
- Alert Logs table order: date, device, severity, alert name, message, count, facility, priority (device moved left, facility/priority left- aligned to match the syslog tab) - Alert rows reuse the syslog Kiwi pastel tint classes (logInfo/ logWarning/logAlert) instead of the hard-coded syslogAlertRow border; dead CSS rule removed and legend updated to match - Alert log CSV export reordered to match the table
Device now precedes Date in both the Alert Logs table and CSV export
Wrap the alert name in a green pill badge like the device/program labels, with dark theme variant; keep the link to the message view
Render the alert severity with the same syslogSeverity pill used in the syslog tab; add a critical severity color variant
Header now uses Cacti's nosort key so Alert Name renders as a plain visual column and can no longer be sorted
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.