R-101 + F-DIAG: the restore dialog names the last SUCCESSFUL copy (v0.182.0)
Tier2LastRun is the attempt clock and was rendered as 'Legutóbbi másolat' in the restore confirm dialog. New LastSuccess + SuccessTracked anchor; tier2Update makes the three rebuild sites safe by construction. F-DIAG: six distinct causes, target-aware redaction.
This commit is contained in:
@@ -1022,15 +1022,24 @@ type AppBackupRow struct {
|
||||
Tier1DBStatus string // "ok", "error", "" — separate DB dump status for warning
|
||||
|
||||
// Tier 2: Cross-drive backup (configurable for all apps)
|
||||
Tier2Configured bool
|
||||
Tier2Dest string // destination label
|
||||
Tier2Schedule string // "Naponta", "Hetente"
|
||||
Tier2LastRun string
|
||||
Tier2LastStatus string // "ok", "error", "running", ""
|
||||
Tier2LastError string
|
||||
Tier2LastWarning string // 3b: capture-gap / state-only notice on an otherwise-ok run
|
||||
Tier2StatusBadge string // "Sikeres", "Hiba", "Fut...", "—"
|
||||
Tier2SizeHuman string
|
||||
Tier2Configured bool
|
||||
Tier2Dest string // destination label
|
||||
Tier2Schedule string // "Naponta", "Hetente"
|
||||
Tier2LastRun string
|
||||
Tier2LastStatus string // "ok", "error", "running", ""
|
||||
// R-101 — the customer may only be shown a timestamp as evidence of a COPY when a copy actually
|
||||
// succeeded. Tier2LastRun is the ATTEMPT clock (written on failure too), so these three drive the
|
||||
// display instead:
|
||||
// Tier2LastSuccess the anchor ("" = none known)
|
||||
// Tier2SuccessTracked false = this row predates the anchor → render exactly as before, once-logged
|
||||
// Tier2StaleCopy the newest attempt FAILED while an older success exists → disclose both
|
||||
Tier2LastSuccess string
|
||||
Tier2SuccessTracked bool
|
||||
Tier2StaleCopy bool
|
||||
Tier2LastError string
|
||||
Tier2LastWarning string // 3b: capture-gap / state-only notice on an otherwise-ok run
|
||||
Tier2StatusBadge string // "Sikeres", "Hiba", "Fut...", "—"
|
||||
Tier2SizeHuman string
|
||||
|
||||
// Drive disconnected — app's home drive is currently disconnected
|
||||
DriveDisconnected bool
|
||||
@@ -1180,6 +1189,14 @@ func (s *Server) buildAppBackupRows(status *backup.FullBackupStatus) []AppBackup
|
||||
row.Tier2Schedule = "Naponta"
|
||||
row.Tier2LastRun = cd.LastRun
|
||||
row.Tier2LastStatus = cd.LastStatus
|
||||
row.Tier2LastSuccess = cd.LastSuccess
|
||||
row.Tier2SuccessTracked = cd.SuccessTracked
|
||||
// Disclose, do not hide: an older good copy AND the fact that the newest attempt failed.
|
||||
// Suppressing the failure to keep the surface calm is a quieter version of the same lie.
|
||||
row.Tier2StaleCopy = cd.SuccessTracked && cd.LastSuccess != "" && cd.LastStatus == "error"
|
||||
if !cd.SuccessTracked {
|
||||
s.noteTier2LegacyOnce(app.StackName)
|
||||
}
|
||||
row.Tier2LastError = cd.LastError
|
||||
row.Tier2LastWarning = cd.LastWarning
|
||||
row.Tier2SizeHuman = cd.LastSizeHuman
|
||||
|
||||
Reference in New Issue
Block a user