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