blob: 01f6cfde04892aa813e797ea987ed7f38eab8567 [file] [log] [blame]
package main
import (
"context"
"source.monogon.dev/metropolis/pkg/pstore"
"source.monogon.dev/metropolis/pkg/supervisor"
)
// dumpAndCleanPstore dumps all files accumulated in the pstore into the log
// and clears them from the pstore. This allows looking at these logs and also
// keeps the pstore from overflowing the generally limited storage it has.
func dumpAndCleanPstore(ctx context.Context) error {
logger := supervisor.Logger(ctx)
// Retrying this is extremely unlikely to result in any change and is most
// likely just going to generate large amounts of useless logs obscuring
// errors.
supervisor.Signal(ctx, supervisor.SignalDone)
dumps, err := pstore.GetKmsgDumps()
if err != nil {
logger.Errorf("Failed to recover logs from pstore: %v", err)
return nil
}
for _, dump := range dumps {
logger.Errorf("Recovered log from %v at %v. Reconstructed log follows.", dump.Reason, dump.OccurredAt)
for _, line := range dump.Lines {
logger.Warning(line)
}
}
cleanErr := pstore.ClearAll()
if cleanErr != nil {
logger.Errorf("Failed to clear pstore: %v", err)
}
return nil
}