unbridled-41 opened a new issue, #5888:
URL: https://github.com/apache/rocketmq-dashboard/issues/5888
### Studio Version
branch: `rocketmq-studio` @ `7e7aa344` (the revision verified; the branch is
based on it)
deployed as: not required to reproduce
### Runtime Environment
Reproduced with the backend unit tests (`cd server && mvn -o -B -ntp test
-Dtest='AlertNotificationTemplateTest'`), which need no MySQL and no cluster.
The delivered text is produced by the same renderer in production; the
notification channel does not matter.
### Connected RocketMQ Cluster
Not involved. The value comes from the alert's own collected sample.
### Describe the Bug
`AlertNotificationTemplate` renders `${value}` (for every metric except the
percent branch) and `${threshold}` with `String.valueOf(double)`:
```java
//
server/src/main/java/org/apache/rocketmq/studio/ops/alert/AlertNotificationTemplate.java
values.put("threshold", rule == null ? "" :
String.valueOf(rule.getThreshold()));
...
return String.valueOf(currentValue); // non-ratio branch
```
`Double.toString` switches to computerized scientific notation at 1e7, so a
consumer-lag alert whose current value is 12,500,000 - the number these alerts
exist for - is delivered as
```
[warning] Consumer lag high - 1.25E7 messages pending
```
The rule dialog shows the operator something else. Its live preview builds
the same variables with JavaScript `String(context.value)`
(`web/src/utils/alertTemplatePreview.ts`), which prints `12500000`, and the
threshold unit is appended verbatim, so the delivered text reads
`1.25E7messages`. The same file already fixed exactly this divergence for the
percent branch, with a comment naming the artifact ("plain double arithmetic
renders the stored 0.29 as 28.999999999999996").
### Steps to Reproduce
1. Create a business alert rule on `consumer.lag.total` with a notification
template containing `${value}` and `${threshold}`, threshold 12000000.
2. Let the collected value exceed 12,500,000 (or call
`AlertNotificationTemplate.render` with `currentValue = 12500000.0`).
3. Read the delivered DingTalk/SMS/email body: `1.25E7/1.2E7messages`.
### What Did You Expect to See?
The same decimal the rule dialog previews for those variables, e.g.
`12500000/12000000messages`.
### What Did You See Instead?
Computerized scientific notation, which an operator reading a phone
notification can easily misread, and which does not match the preview shown
next to the template field.
### Evidence
-
`server/src/main/java/org/apache/rocketmq/studio/ops/alert/AlertNotificationTemplate.java`
(`values()` line 54, `formattedValue()` tail).
- `web/src/utils/alertTemplatePreview.ts` (`value: String(context.value ??
defaultContext.value)`).
- `cd server && mvn -o -B -ntp test -Dtest='AlertNotificationTemplateTest'`
- the new case reports `expected: "12500000/12000000messages" but was:
"1.25E7/1.2E7messages"` before the fix.
### Impact
Any rule whose custom template interpolates the measurement and whose value
reaches 1e7 - consumer lag and topic backlog are exactly that - delivers a
notification that contradicts the preview the operator approved. Values below
1e7 are unaffected.
### Acceptance Criteria
- `${value}` and `${threshold}` render in plain decimal for finite values
(the percent branch keeps its existing exact-decimal behaviour), with a
regression test that pins a 1e7-scale value and a non-finite one.
- Values that already rendered correctly (including the pinned `86.5%/85.0`
and `Disk warning: 86.0 on local`) render exactly as before.
**Corresponding PR:** #5888
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]