hub v0.123.0: app_stopped_unhealthy (decision 28); 09 decisions 26-28 recorded
gates / gates (push) Successful in 31s
gates / gates (push) Successful in 31s
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
This commit is contained in:
@@ -398,6 +398,8 @@ var perAppCooldownEvents = map[string]bool{
|
||||
// v0.122.0 (R-659): a held app with no whole copy on its box is one app's event with no digest —
|
||||
// two apps stranded on one night are two alarms, and the second must not be swallowed.
|
||||
"app_hold_no_whole_copy": true,
|
||||
// v0.123.0 (decision 28): one app's stop, no digest behind it.
|
||||
"app_stopped_unhealthy": true,
|
||||
}
|
||||
|
||||
// perAppCustomerCooldownEvents is the CUSTOMER-leg sibling of perAppCooldownEvents (v0.120.0). The
|
||||
@@ -407,6 +409,8 @@ var perAppCooldownEvents = map[string]bool{
|
||||
var perAppCustomerCooldownEvents = map[string]bool{
|
||||
"app_update_undone": true,
|
||||
"app_update_held": true,
|
||||
// v0.123.0 (decision 28): two apps stopped on one night are two mails.
|
||||
"app_stopped_unhealthy": true,
|
||||
}
|
||||
|
||||
// cooldownStackSuffix returns ":"+stack_name when the event's details carry a non-empty `stack_name`
|
||||
|
||||
@@ -70,7 +70,8 @@ func TestR389_StackSuffixIsAllowListedAndFailSoft(t *testing.T) {
|
||||
func TestR389_TheAllowListHasExactlyOneMember(t *testing.T) {
|
||||
// v0.121.0 widened it again, on purpose (R-636): an OOM storm is one app's event with no digest.
|
||||
// v0.122.0 once more (R-659): a stranded held app is one app's event with no digest.
|
||||
want := []string{"app_hold_no_whole_copy", "app_oom_storm", "app_start_failed", "app_update_held", "app_update_undone"}
|
||||
// v0.123.0 once more (decision 28): an unhealthy stop is one app's event with no digest.
|
||||
want := []string{"app_hold_no_whole_copy", "app_oom_storm", "app_start_failed", "app_stopped_unhealthy", "app_update_held", "app_update_undone"}
|
||||
ok := len(perAppCooldownEvents) == len(want)
|
||||
for _, w := range want {
|
||||
ok = ok && perAppCooldownEvents[w]
|
||||
@@ -80,7 +81,7 @@ func TestR389_TheAllowListHasExactlyOneMember(t *testing.T) {
|
||||
for k := range perAppCooldownEvents {
|
||||
got = append(got, k)
|
||||
}
|
||||
t.Fatalf("perAppCooldownEvents = %v, want exactly [app_hold_no_whole_copy app_oom_storm app_start_failed app_update_held app_update_undone]. Adding a member is the "+
|
||||
t.Fatalf("perAppCooldownEvents = %v, want exactly [app_hold_no_whole_copy app_oom_storm app_start_failed app_stopped_unhealthy app_update_held app_update_undone]. Adding a member is the "+
|
||||
"fenced act: the backup family's cooldown is coarse ON PURPOSE (R-97a, R-182) so one full "+
|
||||
"disk sends one digest, not one mail per app. Read the fence before widening this.", got)
|
||||
}
|
||||
|
||||
@@ -383,6 +383,8 @@ func trimRepeatedUsage(reason, targetPath string) string {
|
||||
var appNamedMailEvents = map[string]bool{
|
||||
"app_update_undone": true,
|
||||
"app_update_held": true,
|
||||
// v0.123.0 (`09` §3 decision 28): the box stopped an app that kept crashing / ran out of memory.
|
||||
"app_stopped_unhealthy": true,
|
||||
}
|
||||
|
||||
// stackNameOf reads `stack_name` from an event's details, "" when absent or unreadable.
|
||||
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
SUBJECT: [Felhom] Warning: ?: the app was stopped because it kept crashing
|
||||
---
|
||||
Dear Customer,
|
||||
|
||||
Your Felhom system sent the following notification:
|
||||
|
||||
?: the app was stopped because it kept crashing
|
||||
|
||||
Details:
|
||||
- Server: demo-fixture
|
||||
- Time: 2026-01-15 10:30
|
||||
- Level: Warning
|
||||
- Type: app_stopped_unhealthy
|
||||
|
||||
If you have any questions, contact your operator.
|
||||
|
||||
Best regards,
|
||||
Felhom.eu monitoring
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
SUBJECT: [Felhom] Figyelmeztetés: ?: az alkalmazást leállítottuk, mert újra és újra összeomlott
|
||||
---
|
||||
Kedves Ügyfél!
|
||||
|
||||
A Felhom rendszered a következő értesítést küldte:
|
||||
|
||||
?: az alkalmazást leállítottuk, mert újra és újra összeomlott
|
||||
|
||||
Részletek:
|
||||
- Szerver: demo-fixture
|
||||
- Időpont: 2026-01-15 10:30
|
||||
- Szint: Figyelmeztetés
|
||||
- Típus: app_stopped_unhealthy
|
||||
|
||||
Ha kérdésed van, vedd fel a kapcsolatot az üzemeltetővel.
|
||||
|
||||
Üdvözlettel,
|
||||
Felhom.eu monitoring
|
||||
Reference in New Issue
Block a user