blob: df3b490a4f895150eee04038af540340236f15c4 [file] [log] [blame]
Tim Windelschmidt6d33a432025-02-04 14:34:25 +01001// Copyright The Monogon Project Authors.
2// SPDX-License-Identifier: Apache-2.0
3
Tim Windelschmidt83da4222024-12-16 02:49:50 +01004package bringup
5
6import (
7 "context"
8
9 "source.monogon.dev/osbase/pstore"
10 "source.monogon.dev/osbase/supervisor"
11)
12
13// dumpAndCleanPstore dumps all files accumulated in the pstore into the log
14// and clears them from the pstore. This allows looking at these logs and also
15// keeps the pstore from overflowing the generally limited storage it has.
16func dumpAndCleanPstore(ctx context.Context) error {
17 logger := supervisor.Logger(ctx)
18 dumps, err := pstore.GetKmsgDumps()
19 if err != nil {
20 logger.Errorf("Failed to recover logs from pstore: %v", err)
21 return nil
22 }
23 for _, dump := range dumps {
24 logger.Errorf("Recovered log from %v at %v. Reconstructed log follows.", dump.Reason, dump.OccurredAt)
25 for _, line := range dump.Lines {
26 logger.Warning(line)
27 }
28 }
29 userspaceLines, err := pstore.GetPmsgDump()
30 if err != nil {
31 logger.Errorf("Failed to recover userspace logs from pstore: %v", err)
32 }
33 for _, line := range userspaceLines {
34 logger.Warning(line)
35 }
36 cleanErr := pstore.ClearAll()
37 if cleanErr != nil {
38 logger.Errorf("Failed to clear pstore: %v", err)
39 }
40 // Retrying this is extremely unlikely to result in any change and is most
41 // likely just going to generate large amounts of useless logs obscuring
42 // errors.
43 supervisor.Signal(ctx, supervisor.SignalHealthy)
44 supervisor.Signal(ctx, supervisor.SignalDone)
45 return nil
46}