diff --git a/core/api.go b/core/api.go index ffa02a28..24a4b946 100644 --- a/core/api.go +++ b/core/api.go @@ -146,6 +146,7 @@ func debugInfo(ar *api.Request) (data []byte, err error) { compat.AddToDebugInfo(di) di.AddLastReportedModuleError() di.AddLastUnexpectedLogs() + updates.AddToDebugInfo(di) di.AddGoroutineStack() // Return data. diff --git a/updates/export.go b/updates/export.go index 0c03b365..fe29f464 100644 --- a/updates/export.go +++ b/updates/export.go @@ -2,12 +2,16 @@ package updates import ( "context" + "fmt" + "sort" + "strings" "sync" "github.com/safing/portbase/database/record" "github.com/safing/portbase/info" "github.com/safing/portbase/log" "github.com/safing/portbase/updater" + "github.com/safing/portbase/utils/debug" "github.com/safing/portmaster/updates/helper" ) @@ -131,3 +135,46 @@ func export(_ context.Context, _ interface{}) error { } return GetSimpleVersions().save() } + +// AddToDebugInfo adds the update system status to the given debug.Info. +func AddToDebugInfo(di *debug.Info) { + // Get resources from registry. + resources := registry.Export() + platformPrefix := helper.PlatformIdentifier("") + + // Collect data for debug info. + var active, selected []string + var activeCnt, totalCnt int + for id, r := range resources { + // Ignore resources for other platforms. + if !strings.HasPrefix(id, "all/") && !strings.HasPrefix(id, platformPrefix) { + continue + } + + totalCnt++ + if r.ActiveVersion != nil { + activeCnt++ + active = append(active, fmt.Sprintf("%s: %s", id, r.ActiveVersion.VersionNumber)) + } + if r.SelectedVersion != nil { + selected = append(selected, fmt.Sprintf("%s: %s", id, r.SelectedVersion.VersionNumber)) + } + } + sort.Strings(active) + sort.Strings(selected) + + // Compile to one list. + lines := make([]string, 0, len(active)+len(selected)+3) + lines = append(lines, "Active:") + lines = append(lines, active...) + lines = append(lines, "") + lines = append(lines, "Selected:") + lines = append(lines, selected...) + + // Add section. + di.AddSection( + fmt.Sprintf("Updates: %s (%d/%d)", initialReleaseChannel, activeCnt, totalCnt), + debug.UseCodeSection|debug.AddContentLineBreaks, + lines..., + ) +}