blob: 857488a0525506d3f14d488397956a1fad359b5c [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)
Lorenz Brun1b2df232022-06-14 12:42:03 +020015 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 cleanErr := pstore.ClearAll()
27 if cleanErr != nil {
28 logger.Errorf("Failed to clear pstore: %v", err)
29 }
Lorenz Brun100e22f2022-06-20 14:23:57 +000030 // Retrying this is extremely unlikely to result in any change and is most
31 // likely just going to generate large amounts of useless logs obscuring
32 // errors.
33 supervisor.Signal(ctx, supervisor.SignalHealthy)
34 supervisor.Signal(ctx, supervisor.SignalDone)
Lorenz Brun1b2df232022-06-14 12:42:03 +020035 return nil
36}