[ 
https://issues.apache.org/jira/browse/AMBARI-26631?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Jialiang Cai reassigned AMBARI-26631:
-------------------------------------

    Assignee: Jialiang Cai

> Complete React parity for the Alerts module
> -------------------------------------------
>
>                 Key: AMBARI-26631
>                 URL: https://issues.apache.org/jira/browse/AMBARI-26631
>             Project: Ambari
>          Issue Type: Improvement
>            Reporter: Jialiang Cai
>            Assignee: Jialiang Cai
>            Priority: Major
>          Time Spent: 20m
>  Remaining Estimate: 0h
>
> <!---
>    Licensed to the Apache Software Foundation (ASF) under one or more
>    contributor license agreements.  See the NOTICE file distributed with
>    this work for additional information regarding copyright ownership.
>    The ASF licenses this file to You under the Apache License, Version 2.0
>    (the "License"); you may not use this file except in compliance with
>    the License.  You may obtain a copy of the License at
>        http://www.apache.org/licenses/LICENSE-2.0
>    Unless required by applicable law or agreed to in writing, software
>    distributed under the License is distributed on an "AS IS" BASIS,
>    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
>    See the License for the specific language governing permissions and
>    limitations under the License.
> -->
> h2. Problem
> The React Alerts module provides a substantial list, details, Alert Group, 
> and Alert Notification UI, but several high-risk behaviors do not match the 
> classic Ambari contract. Alert Definition creation and 24-hour instance 
> history are missing. List and action permissions are incorrect, 
> definition/config editing lacks validation and route-leave protection, and 
> common load or save failures are not recoverable.
> Alert Group requests omit notification target IDs and use unsupported pseudo 
> membership resources. Notification builders send incorrect API types and 
> property names for built-in SNMP, Custom SNMP, and Alert Script targets, and 
> authenticated Email edits can overwrite an unchanged sensitive password. 
> Instance response text can also be interpreted as markup when opened in a new 
> window.
> This issue covers the complete non-Metrics Alerts module defined by the 
> corrected Classic baseline. Metric Alert Definition parameters, metric 
> expressions, metric data, and Metrics APIs are excluded.
> h2. Scope
> * Load definitions directly by ID and expose recoverable list, details, 
> instance, group, and notification failures.
> * Use {{CLUSTER.TOGGLE_ALERTS}} for list toggles and 
> {{SERVICE.TOGGLE_ALERTS}} for definition detail edits, toggles, and the 
> direct create route.
> * Keep Manage Groups and Manage Settings visible without an independent 
> permission gate, gate Notifications with 
> {{CLUSTER.MANAGE_ALERT_NOTIFICATIONS}}, and gate the Create menu with 
> {{supports.createAlerts}}.
> * Add the three-step {{/main/alerts/add/:stepNumber}} wizard for Port, Web, 
> Script, and Aggregate definitions, with validation, read-only review, exact 
> request construction, recoverable submission, and back/forward navigation.
> * Keep Metric and RAW creation out of the wizard. Document the working Script 
> and Aggregate paths as intentional repairs beyond broken Classic behavior.
> * Query {{/alert_history}} for the previous 24 hours and map record counts by 
> host instead of using the current instance update timestamp.
> * Validate labels, interval/timeout values, parameters, thresholds, repeat 
> tolerance, and {{DEBUG}}; preserve description and source/config values in 
> update payloads.
> * Coordinate dirty label/config edits with Save, Discard, and Cancel behavior 
> and retain edit state after failed saves.
> * Open and copy Alert Instance response text literally without HTML 
> interpretation.
> * Build complete Alert Group create/update replacement payloads containing 
> name, definition IDs, and notification target IDs.
> * Keep group definition and target changes local until Save; run all deletes 
> first, then updates and creates, wait for every result, aggregate failures, 
> and keep the original editor open after partial failure.
> * Map Email, SNMP, Custom SNMP, and Alert Script UI models to their exact 
> server types and built-in properties.
> * Preserve an unchanged sensitive Email password on edit, support explicit 
> replacement, and reject custom property names that conflict with built-in 
> keys.
> * Await global repeat-tolerance configuration saves, preserve {{DEBUG}}, and 
> retain the dialog after failure.
> * Remove Alerts debugging output from touched code and add focused tests for 
> request shapes, state transitions, validation, permissions, concurrency, and 
> failure recovery.
> h2. Classic UI Baseline
> The acceptance baseline is 
> {{docs/frontend-refactor/ember-baseline/05-alerts.md}}, feature IDs 
> {{ALERT-LIST-001}} through {{ALERT-SET-003}}. The detailed React comparison, 
> reverse API contract, permission matrix, five-pass audit, compatibility 
> decisions, and live runtime matrix are recorded in 
> {{docs/frontend-refactor/react-current/05-alerts-gap.md}}.
> The baseline was corrected during the audit:
> * Classic contains an Alert Definition delete controller method and AJAX 
> definition, but no inspected UI call site. It is unreachable dead code, not a 
> user-facing workflow.
> * Port and Web creation have functional-looking paths. RAW has no renderer; 
> Script dereferences missing wizard data; Aggregate omits common fields and 
> dereferences a missing definition name.
> * Classic Alert Groups contain a name, definitions, and notification targets 
> but no description field.
> The authoritative network comparison includes global AJAX definitions and 
> call sites, direct HTTP and browser entry points, routes, permissions, 
> feature flags, and realtime destinations. Group membership is represented by 
> replacement arrays on Alert Group create/update, not by child membership 
> resources.
> h2. Acceptance Criteria
> * Alert list data remains coherent across polling and navigation, displays 
> load failure and Retry, and applies filters and sorting without losing state.
> * List toggles require {{CLUSTER.TOGGLE_ALERTS}}; details and direct creation 
> require {{SERVICE.TOGGLE_ALERTS}}; Create and Notifications obey their 
> independent feature and permission gates.
> * Groups and Settings remain reachable by users without toggle or 
> notification permissions.
> * Details load the exact definition by ID, including definitions without 
> non-default group membership.
> * Label and non-Metric configuration edits validate input, preserve 
> description/source fields, await saves, keep failed edits retryable, and 
> protect dirty navigation with Save, Discard, and Cancel.
> * Alert Instance polling stops on exit, survives a failed request, and 
> displays exact 24-hour history counts per host.
> * Response text containing markup or script-like content is copied and opened 
> as literal text.
> * Port, Web, Script, and Aggregate creation validates each step, shows the 
> exact payload at review, submits once, and retains the wizard after failure; 
> Metric and RAW types are not offered.
> * Alert Group create/update payloads contain complete numeric {{definitions}} 
> and {{targets}} arrays and never clear associations during rename or copy.
> * Group Save waits for concurrent deletes before concurrent updates/creates, 
> waits for every started request, reports aggregate errors, and preserves 
> pending state after any failure.
> * Email maps to {{EMAIL}}, built-in SNMP to {{AMBARI_SNMP}}, Custom SNMP to 
> {{SNMP}}, and Alert Script to {{ALERT_SCRIPT}} with exact Classic property 
> names.
> * An authenticated Email edit without a replacement password retains the 
> existing sensitive property; custom properties cannot conflict with corrected 
> built-in properties.
> * Notification create, edit, enable/disable, and delete failures retain 
> selection and expose Retry.
> * Per-definition and global repeat tolerance accepts 1 through 99 or 
> {{DEBUG}}, preserves the sentinel, and does not close before a successful 
> save.
> * Focused tests cover exact URLs, methods, queries, payloads, creation, 
> history mapping, validation, dirty decisions, permission policy, safe 
> response handling, group sequencing, notification conversion, sensitive 
> edits, and rejected operations.
> * The applicable runtime matrix in 
> {{docs/frontend-refactor/react-current/05-alerts-gap.md}} passes against a 
> real Ambari Server.
> h2. Compatibility Decisions
> The React implementation must not reproduce known broken or unsafe Classic 
> behavior:
> * It does not add Alert Definition deletion UI solely because an unreachable 
> Classic controller method exists.
> * It repairs Script and Aggregate creation rather than reproducing their 
> broken Classic wizard data paths; this is identified as 
> {{IMPROVED_BEYOND_CLASSIC}}.
> * It does not add an Alert Group description field that is absent from the 
> inspected Classic UI and request contract.
> * It waits for mutation results and preserves retryable state instead of 
> reproducing Classic's optimistic close or incomplete rollback behavior.
> * It opens server-provided response data through text nodes rather than 
> {{document.write()}}.
> * It preserves unchanged sensitive values instead of submitting empty 
> credentials.
> These are intentional compatibility corrections, not missing parity.
> h2. Out of Scope
> * Metric Alert Definition parameters, metric expressions, metric data, 
> Metrics APIs, Metrics routes, charts, and widgets.
> * RAW creation, because the Classic type is an unimplemented placeholder.
> * New Alert Definition deletion UI, because the Classic method is unreachable 
> dead code.
> * Alert Group descriptions, because the inspected Classic contract has no 
> such field.
> * Host, Service, upgrade, installation, Kerberos, and HA mutation 
> implementations owned by other modules; this issue validates only their 
> documented Alerts presentation boundary.
> h2. Verification Boundary
> Static code and focused tests are not sufficient to complete runtime 
> acceptance. The live matrix must still cover polling and realtime 
> convergence, permission-role combinations, direct URL entry, dirty browser 
> navigation, real Server validation, group partial failures, notification 
> round trips, masked sensitive properties, maintenance interactions, and every 
> supported non-Metric creation type.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to