blob: c8863e50881146f42c0231fe70d7087ddf5e883f [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 }
Lorenz Brund1f82e92024-02-08 19:27:46 +010026 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 }
Lorenz Brun1b2df232022-06-14 12:42:03 +020033 cleanErr := pstore.ClearAll()
34 if cleanErr != nil {
35 logger.Errorf("Failed to clear pstore: %v", err)
36 }
Lorenz Brun100e22f2022-06-20 14:23:57 +000037 // 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)
Lorenz Brun1b2df232022-06-14 12:42:03 +020042 return nil
43}