PMM-14109 Improve Advisor UX - #5656
Draft
ademidoff wants to merge 169 commits into
Draft
Conversation
- Implemented MarkCheckResultsRead function in the service layer to update the read state of check results. - Added corresponding API endpoint for marking check results as read. - Introduced new parameters and response structures for the API. - Updated settings model to include Advisor notification settings. - Enhanced environment variable parsing to support new Advisor notification feature. - Added tests for the new functionality to ensure proper behavior.
…verity threshold
…d Advisor Notifications
…y Fields - Introduced CheckSeverity and CheckTriggeredBy types to represent the severity levels and initiators of advisor checks. - Updated CheckResult model to include Severity (CheckSeverity) and TriggeredBy (CheckTriggeredBy) fields. - Modified database schema to accommodate new fields in the check_results table. - Adjusted related services and models to handle the new fields, including changes in the execution flow of advisor checks. - Updated API services to support the new fields in requests and responses. - Enhanced tests to cover new functionality and ensure proper handling of severity and triggered by information.
… components - Introduced new fields: environment, cluster, replication_set, and outcome to CheckResultHistoryItem in advisors.proto. - Updated validation logic in advisors.pb.validate.go to include new fields. - Modified JSON representations in list_check_results_history_responses.go and v1.json to accommodate new fields. - Adjusted database schema and models to reflect new fields in CheckResult. - Enhanced tests to validate new fields and ensure proper functionality in AdvisorInsights components.
…, updating labels, and enhancing test coverage
MySQL 8.0.30 sizes the redo log with innodb_redo_log_capacity and ignores innodb_log_file_size/innodb_log_files_in_group, which keep reporting their defaults. The check multiplied the legacy pair, so it under-reported the redo log size: measured on MySQL 8.4.10, 48M * 2 = 96M against an actual capacity of 100M, and the gap grows for anyone who sets capacity explicitly. The query now prefers the capacity variable and falls back to the legacy pair for older servers. The written and size values also went through int() on strings that increase() and avg() render as floats, which fails with "invalid literal with base 10"; they are parsed with int(float(...)) now. The missing-metrics insight no longer claims the gap is transient: checkpoint age comes from a Percona Server status variable that vanilla MySQL does not expose, so on those servers the condition is permanent. Signed-off-by: Alex Demidoff <a@demidoff.me>
Stakeholder review found the menu items under Advisors repetitive: the parent already says Advisors, so every child repeated the word. They are now Insights, Catalog and Run history. The page headings and document titles keep the Advisor prefix. There are no breadcrumbs, so the full name is what distinguishes a browser tab, and it keeps the canonical "Advisor checks" term visible on the page that the documentation, the tour and the email report all refer to by that name. The routing table in ui/AGENTS.md also gains the /advisors/runs row that was missed when the page was added. Signed-off-by: Alex Demidoff <a@demidoff.me>
Reviewing the catalog for the category rework surfaced metadata that
misdescribes the check on screen.
mysql_configuration_innodb_strict_mode carried the description of
mysql_security_password_lifetime ("This check warns about password
lifetime"), and that check in turn was summarized as "InnoDB password
lifetime". Both now describe themselves.
Three checks shared the summary "MySQL configuration check" and two more
shared "Server is not configured to enforce data integrity", so the
catalog listed them as indistinguishable rows. Each now names the
condition it reports, matching the wording of the insight it raises.
mysql_require_secure_transport also cited a variable that does not
exist: it reads require_secure_transport, not mysql_secure_transport_only.
Also fixes the "Unspported" typo in the mongodb_unsupported_version
summary.
Signed-off-by: Alex Demidoff <a@demidoff.me>
Removing the subcategory leaves the category as the only grouping, and the categories as authored do not survive that: Configuration held 66 of the 109 checks and said nothing about any of them, while Query held schema and index checks. Each check is now filed under what it actually examines: Security (27), Durability (12), Replication (11), Versions (11), Performance (11), Resources (11), Maintenance (7), Schema & indexes (7), Connections (6) and Logging (6). Grouping follows the risk rather than the feature, so for example sync_binlog is Durability rather than Replication, and the replication grant checks stay in Security. The subcategory field is dropped from every check file and from the three example templates. Signed-off-by: Alex Demidoff <a@demidoff.me>
With the catalog recategorized, the category groups the checks on its own and the second level only added a column to scan past. Subcategory is removed from the check format, the advisor_checks and advisor_insights tables, the API and the UI: the catalog loses its Sub category column and filter, the check form its field, and both details panes their row. An advisor group is now identified by its category alone. Migrations 119-121 are unreleased, so they are edited in place rather than followed by a drop-column migration. The four Prometheus check metrics labelled a check by its subcategory; the label is renamed to category and carries the category now. The only dashboard query on those metrics sums without a label selector. Removing the field left holes in three messages, so AdvisorCheck, Advisor and Insight are renumbered to close them, and the buf breaking baseline in api/descriptor.bin is refreshed accordingly. Signed-off-by: Alex Demidoff <a@demidoff.me>
The check name is the longest value on the pane and was truncating in a quarter-width column while Source, which holds either "Builtin" or "Custom", had a column to itself on the first row. Check name now spans two columns and Source moves down to sit with Interval and Status. Signed-off-by: Alex Demidoff <a@demidoff.me>
PMM has no SMTP configuration of its own: the sender reads the GF_SMTP_* variables it inherits from Grafana. Nothing in the UI told an operator whether those are set, so the only way to find out was to configure an unrelated Alerting contact point, or wait for a run to produce findings and hope the summary arrived. Settings -> Advisors now offers "Send test email" below the recipients field. It emails the addresses currently in the field, unsaved edits included, since verifying delivery is what the operator is about to rely on, and is disabled until they parse. The message is the real report: it goes through the same builder the scheduler uses, with one made-up finding per severity filtered by the configured threshold, so the recipient sees the format they will get. The subject is prefixed with [Test] and the body opens by saying the findings are samples and nothing was recorded, so a recipient who did not press the button cannot mistake them for real. Since SMTP cannot be fixed from this page, an unconfigured server has to say so: the sender wraps a new services.ErrSMTPNotConfigured naming the missing variable, and the endpoint returns it as a precondition failure. Signed-off-by: Alex Demidoff <a@demidoff.me>
The row menu already acts on one insight, whose service the surrounding items name, so "for this service" spent two words to say what the row already said. Signed-off-by: Alex Demidoff <a@demidoff.me>
…isor-ux Signed-off-by: Alex Demidoff <a@demidoff.me> # Conflicts: # api/advisors/v1/advisors.pb.gw.go # managed/cmd/pmm-managed-starlark/main_test.go # ui/apps/pmm/src/App.tsx
A run shows no duration until it finishes, so the list went stale with no sign the run had completed. Refetch once a minute while any run on the page is still open, and stop once none is. The interval belongs to the query, so concurrent runs cost one request per minute, not one each. Signed-off-by: Alex Demidoff <a@demidoff.me>
Run all ignores the active filters, so offering it next to a narrowed list invited running every check by accident. The two run actions are now mutually exclusive: Run all unfiltered, Run selected once a filter or the search box applies. Signed-off-by: Alex Demidoff <a@demidoff.me>
The advisors list gave no at-a-glance signal for a check that is off, beyond the Status toggle. Dim those rows at the same 0.5 opacity the insights table already uses. Signed-off-by: Alex Demidoff <a@demidoff.me>
Regroup the topology fields so each row reads as one idea: Category / Service / Technology / Node, then Environment / Cluster / Replication set / Region. Technology renders the insight's service type through a new MANAGED_SERVICE_TYPE label map. Signed-off-by: Alex Demidoff <a@demidoff.me>
Signed-off-by: Alex Demidoff <a@demidoff.me>
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.
Ticket number: PMM-14109
Feature build: SUBMODULES-4478
Refs: