@checkstack/healthcheck-ping-backend 0.3.18 → 0.3.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +47 -0
- package/package.json +5 -5
- package/src/ping-collector.ts +8 -0
- package/src/strategy.ts +11 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,52 @@
|
|
|
1
1
|
# @checkstack/healthcheck-ping-backend
|
|
2
2
|
|
|
3
|
+
## 0.3.19
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- c55d7c6: Unify the healthcheck chart system on the `@checkstack/ui` SVG kit and
|
|
8
|
+
redesign the HealthCheck drawer.
|
|
9
|
+
|
|
10
|
+
- `@checkstack/ui` gains six chart primitives (each with a Storybook story):
|
|
11
|
+
`StackedTimeline` (stacked status counts per bucket on the colorblind-safe
|
|
12
|
+
status triad), `ChartTooltip` + `useBandHover` (the one shared chart
|
|
13
|
+
tooltip and its cursor hit-testing), `ChartCard` / `chartCardChromeClass`
|
|
14
|
+
(the premium gradient card chrome, flat on low-power devices), `StatTile`
|
|
15
|
+
(number-led metric tile with delta chip, sparkline/ribbon footer, and
|
|
16
|
+
click-to-expand disclosure), `DistributionBar` (stacked horizontal
|
|
17
|
+
distribution + legend, replaces pies), and `CategoryRibbon` (categorical
|
|
18
|
+
history ribbon). `TimeSeriesChart` gains a hover tooltip with a crosshair
|
|
19
|
+
marker.
|
|
20
|
+
- `@checkstack/common` adds four optional chart metadata keys to
|
|
21
|
+
`BaseHealthResultMeta`: `x-chart-priority` (tile sort weight, lower first,
|
|
22
|
+
default 100), `x-chart-good-direction` (`"up" | "down"`, which direction
|
|
23
|
+
of change is an improvement; consumers fall back to
|
|
24
|
+
`x-anomaly-direction`), and `x-chart-true-label` / `x-chart-false-label`
|
|
25
|
+
(prose for a boolean field's values wherever they surface in text, e.g. a
|
|
26
|
+
dominance chip reading "Usually successful (98%)" instead of "Usually
|
|
27
|
+
true"). Built-in collector backends annotate their headline metrics and
|
|
28
|
+
boolean fields accordingly (purely additive metadata).
|
|
29
|
+
- `@checkstack/healthcheck-frontend` rebuilds the drawer: a hero status
|
|
30
|
+
banner (status pill, healthy %, avg latency, interval, last run with the
|
|
31
|
+
exact datetime on hover, full-width status ribbon) replaces the metric
|
|
32
|
+
tiles; the status timeline and latency heroes share the `ChartCard`
|
|
33
|
+
chrome; the auto-generated charts become a prioritized, click-to-expand
|
|
34
|
+
2-up tile grid (collector ids demoted to hover titles); the anomaly
|
|
35
|
+
Expected/Trend derivation is consolidated into one tested module shared by
|
|
36
|
+
the latency hero and the tiles.
|
|
37
|
+
|
|
38
|
+
BREAKING CHANGES: `recharts` is removed from `@checkstack/healthcheck-frontend`
|
|
39
|
+
(and the unused dependency from `@checkstack/ui`); the
|
|
40
|
+
`HealthCheckStatusTimeline` and `SparklineTooltip` components are deleted.
|
|
41
|
+
Extensions rendering into `HealthCheckDiagramSlot` should build on the
|
|
42
|
+
`@checkstack/ui` chart primitives instead.
|
|
43
|
+
|
|
44
|
+
- Updated dependencies [c55d7c6]
|
|
45
|
+
- Updated dependencies [c55d7c6]
|
|
46
|
+
- @checkstack/healthcheck-common@1.13.0
|
|
47
|
+
- @checkstack/common@0.21.0
|
|
48
|
+
- @checkstack/backend-api@0.29.1
|
|
49
|
+
|
|
3
50
|
## 0.3.18
|
|
4
51
|
|
|
5
52
|
### Patch Changes
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@checkstack/healthcheck-ping-backend",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.19",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "src/index.ts",
|
|
6
6
|
"checkstack": {
|
|
@@ -14,15 +14,15 @@
|
|
|
14
14
|
"pack": "bunx @checkstack/scripts plugin-pack"
|
|
15
15
|
},
|
|
16
16
|
"dependencies": {
|
|
17
|
-
"@checkstack/backend-api": "0.29.
|
|
18
|
-
"@checkstack/common": "0.
|
|
19
|
-
"@checkstack/healthcheck-common": "1.
|
|
17
|
+
"@checkstack/backend-api": "0.29.1",
|
|
18
|
+
"@checkstack/common": "0.21.0",
|
|
19
|
+
"@checkstack/healthcheck-common": "1.13.0"
|
|
20
20
|
},
|
|
21
21
|
"devDependencies": {
|
|
22
22
|
"@types/bun": "^1.0.0",
|
|
23
23
|
"typescript": "^5.0.0",
|
|
24
24
|
"@checkstack/tsconfig": "0.0.7",
|
|
25
|
-
"@checkstack/scripts": "0.7.
|
|
25
|
+
"@checkstack/scripts": "0.7.2"
|
|
26
26
|
},
|
|
27
27
|
"description": "Checkstack healthcheck-ping-backend plugin",
|
|
28
28
|
"author": {
|
package/src/ping-collector.ts
CHANGED
|
@@ -49,6 +49,7 @@ const pingResultSchema = healthResultSchema({
|
|
|
49
49
|
packetsSent: healthResultNumber({
|
|
50
50
|
"x-chart-type": "counter",
|
|
51
51
|
"x-chart-label": "Packets Sent",
|
|
52
|
+
"x-chart-priority": 90,
|
|
52
53
|
"x-anomaly-enabled": false,
|
|
53
54
|
}),
|
|
54
55
|
// Absolute twin of packetLoss. The percent form (packetLoss) is the better
|
|
@@ -57,6 +58,7 @@ const pingResultSchema = healthResultSchema({
|
|
|
57
58
|
packetsReceived: healthResultNumber({
|
|
58
59
|
"x-chart-type": "counter",
|
|
59
60
|
"x-chart-label": "Packets Received",
|
|
61
|
+
"x-chart-priority": 90,
|
|
60
62
|
"x-anomaly-enabled": false,
|
|
61
63
|
}),
|
|
62
64
|
// Primary saturation signal: packet loss as a percent. Confirmation window
|
|
@@ -66,6 +68,7 @@ const pingResultSchema = healthResultSchema({
|
|
|
66
68
|
"x-chart-type": "gauge",
|
|
67
69
|
"x-chart-label": "Packet Loss",
|
|
68
70
|
"x-chart-unit": "%",
|
|
71
|
+
"x-chart-priority": 20,
|
|
69
72
|
"x-anomaly-enabled": true,
|
|
70
73
|
"x-anomaly-direction": "lower-is-better",
|
|
71
74
|
"x-anomaly-sensitivity": 1.5,
|
|
@@ -78,6 +81,7 @@ const pingResultSchema = healthResultSchema({
|
|
|
78
81
|
"x-chart-type": "line",
|
|
79
82
|
"x-chart-label": "Min Latency",
|
|
80
83
|
"x-chart-unit": "ms",
|
|
84
|
+
"x-chart-good-direction": "down",
|
|
81
85
|
"x-anomaly-enabled": false,
|
|
82
86
|
}).optional(),
|
|
83
87
|
// Representative latency signal. Wider band plus a confirmation window and
|
|
@@ -86,6 +90,7 @@ const pingResultSchema = healthResultSchema({
|
|
|
86
90
|
"x-chart-type": "line",
|
|
87
91
|
"x-chart-label": "Avg Latency",
|
|
88
92
|
"x-chart-unit": "ms",
|
|
93
|
+
"x-chart-priority": 10,
|
|
89
94
|
"x-anomaly-enabled": true,
|
|
90
95
|
"x-anomaly-direction": "lower-is-better",
|
|
91
96
|
"x-anomaly-sensitivity": 1.5,
|
|
@@ -99,6 +104,7 @@ const pingResultSchema = healthResultSchema({
|
|
|
99
104
|
"x-chart-type": "line",
|
|
100
105
|
"x-chart-label": "Max Latency",
|
|
101
106
|
"x-chart-unit": "ms",
|
|
107
|
+
"x-chart-good-direction": "down",
|
|
102
108
|
"x-anomaly-enabled": false,
|
|
103
109
|
}).optional(),
|
|
104
110
|
});
|
|
@@ -111,6 +117,7 @@ const pingAggregatedFields = {
|
|
|
111
117
|
"x-chart-type": "gauge",
|
|
112
118
|
"x-chart-label": "Avg Packet Loss",
|
|
113
119
|
"x-chart-unit": "%",
|
|
120
|
+
"x-chart-priority": 20,
|
|
114
121
|
"x-anomaly-enabled": true,
|
|
115
122
|
"x-anomaly-direction": "lower-is-better",
|
|
116
123
|
"x-anomaly-sensitivity": 1.5,
|
|
@@ -121,6 +128,7 @@ const pingAggregatedFields = {
|
|
|
121
128
|
"x-chart-type": "line",
|
|
122
129
|
"x-chart-label": "Avg Latency",
|
|
123
130
|
"x-chart-unit": "ms",
|
|
131
|
+
"x-chart-priority": 10,
|
|
124
132
|
"x-anomaly-enabled": true,
|
|
125
133
|
"x-anomaly-direction": "lower-is-better",
|
|
126
134
|
"x-anomaly-sensitivity": 1.5,
|
package/src/strategy.ts
CHANGED
|
@@ -64,6 +64,7 @@ const pingResultSchema = healthResultSchema({
|
|
|
64
64
|
packetsSent: healthResultNumber({
|
|
65
65
|
"x-chart-type": "counter",
|
|
66
66
|
"x-chart-label": "Packets Sent",
|
|
67
|
+
"x-chart-priority": 90,
|
|
67
68
|
"x-anomaly-enabled": false,
|
|
68
69
|
}),
|
|
69
70
|
// Absolute twin of packetLoss. The percent form (packetLoss) is the better
|
|
@@ -72,6 +73,7 @@ const pingResultSchema = healthResultSchema({
|
|
|
72
73
|
packetsReceived: healthResultNumber({
|
|
73
74
|
"x-chart-type": "counter",
|
|
74
75
|
"x-chart-label": "Packets Received",
|
|
76
|
+
"x-chart-priority": 90,
|
|
75
77
|
"x-anomaly-enabled": false,
|
|
76
78
|
}),
|
|
77
79
|
// Primary saturation signal: packet loss as a percent. Confirmation window
|
|
@@ -81,6 +83,7 @@ const pingResultSchema = healthResultSchema({
|
|
|
81
83
|
"x-chart-type": "gauge",
|
|
82
84
|
"x-chart-label": "Packet Loss",
|
|
83
85
|
"x-chart-unit": "%",
|
|
86
|
+
"x-chart-priority": 20,
|
|
84
87
|
"x-anomaly-enabled": true,
|
|
85
88
|
"x-anomaly-direction": "lower-is-better",
|
|
86
89
|
"x-anomaly-sensitivity": 1.5,
|
|
@@ -93,6 +96,7 @@ const pingResultSchema = healthResultSchema({
|
|
|
93
96
|
"x-chart-type": "line",
|
|
94
97
|
"x-chart-label": "Min Latency",
|
|
95
98
|
"x-chart-unit": "ms",
|
|
99
|
+
"x-chart-good-direction": "down",
|
|
96
100
|
"x-anomaly-enabled": false,
|
|
97
101
|
}).optional(),
|
|
98
102
|
// Representative latency signal. Wider band plus a confirmation window and
|
|
@@ -101,6 +105,7 @@ const pingResultSchema = healthResultSchema({
|
|
|
101
105
|
"x-chart-type": "line",
|
|
102
106
|
"x-chart-label": "Avg Latency",
|
|
103
107
|
"x-chart-unit": "ms",
|
|
108
|
+
"x-chart-priority": 10,
|
|
104
109
|
"x-anomaly-enabled": true,
|
|
105
110
|
"x-anomaly-direction": "lower-is-better",
|
|
106
111
|
"x-anomaly-sensitivity": 1.5,
|
|
@@ -114,6 +119,7 @@ const pingResultSchema = healthResultSchema({
|
|
|
114
119
|
"x-chart-type": "line",
|
|
115
120
|
"x-chart-label": "Max Latency",
|
|
116
121
|
"x-chart-unit": "ms",
|
|
122
|
+
"x-chart-good-direction": "down",
|
|
117
123
|
"x-anomaly-enabled": false,
|
|
118
124
|
}).optional(),
|
|
119
125
|
error: healthResultString({
|
|
@@ -131,6 +137,7 @@ const pingAggregatedFields = {
|
|
|
131
137
|
"x-chart-type": "gauge",
|
|
132
138
|
"x-chart-label": "Avg Packet Loss",
|
|
133
139
|
"x-chart-unit": "%",
|
|
140
|
+
"x-chart-priority": 20,
|
|
134
141
|
"x-anomaly-enabled": true,
|
|
135
142
|
"x-anomaly-direction": "lower-is-better",
|
|
136
143
|
"x-anomaly-sensitivity": 1.5,
|
|
@@ -141,6 +148,7 @@ const pingAggregatedFields = {
|
|
|
141
148
|
"x-chart-type": "line",
|
|
142
149
|
"x-chart-label": "Avg Latency",
|
|
143
150
|
"x-chart-unit": "ms",
|
|
151
|
+
"x-chart-priority": 10,
|
|
144
152
|
"x-anomaly-enabled": true,
|
|
145
153
|
"x-anomaly-direction": "lower-is-better",
|
|
146
154
|
"x-anomaly-sensitivity": 1.5,
|
|
@@ -154,6 +162,8 @@ const pingAggregatedFields = {
|
|
|
154
162
|
"x-chart-type": "line",
|
|
155
163
|
"x-chart-label": "Max Latency",
|
|
156
164
|
"x-chart-unit": "ms",
|
|
165
|
+
"x-chart-priority": 30,
|
|
166
|
+
"x-chart-good-direction": "down",
|
|
157
167
|
"x-anomaly-enabled": false,
|
|
158
168
|
}),
|
|
159
169
|
// Count of runs in the bucket that errored. Clear direction and a meaningful
|
|
@@ -162,6 +172,7 @@ const pingAggregatedFields = {
|
|
|
162
172
|
errorCount: aggregatedCounter({
|
|
163
173
|
"x-chart-type": "counter",
|
|
164
174
|
"x-chart-label": "Errors",
|
|
175
|
+
"x-chart-priority": 40,
|
|
165
176
|
"x-anomaly-enabled": true,
|
|
166
177
|
"x-anomaly-direction": "lower-is-better",
|
|
167
178
|
"x-anomaly-sensitivity": 1.5,
|