blob: 01f6cfde04892aa813e797ea987ed7f38eab8567 [file] [log] [blame]
Lorenz Brun1b2df232022-06-14 12:42:03 +02001package main
2
3import (
4 "context"
5
6 "source.monogon.dev/metropolis/pkg/pstore"
7 "source.monogon.dev/metropolis/pkg/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 // Retrying this is extremely unlikely to result in any change and is most
16 // likely just going to generate large amounts of useless logs obscuring
17 // errors.
18 supervisor.Signal(ctx, supervisor.SignalDone)
19 dumps, err := pstore.GetKmsgDumps()
20 if err != nil {
21 logger.Errorf("Failed to recover logs from pstore: %v", err)
22 return nil
23 }
24 for _, dump := range dumps {
25 logger.Errorf("Recovered log from %v at %v. Reconstructed log follows.", dump.Reason, dump.OccurredAt)
26 for _, line := range dump.Lines {
27 logger.Warning(line)
28 }
29 }
30 cleanErr := pstore.ClearAll()
31 if cleanErr != nil {
32 logger.Errorf("Failed to clear pstore: %v", err)
33 }
34 return nil
35}