Files
gotenberg/pkg/gotenberg/debug.go
2026-02-20 21:21:19 +01:00

72 lines
1.6 KiB
Go

package gotenberg
import (
"runtime"
"sort"
"sync"
"time"
flag "github.com/spf13/pflag"
)
// DebugInfo gathers data for debugging.
type DebugInfo struct {
Version string `json:"version"`
Timezone string `json:"timezone"`
Architecture string `json:"architecture"`
Modules []string `json:"modules"`
ModulesAdditionalData map[string]map[string]any `json:"modules_additional_data"`
Flags map[string]any `json:"flags"`
}
// BuildDebug builds the debug data from modules.
func BuildDebug(ctx *Context) {
debugMu.Lock()
defer debugMu.Unlock()
debug = &DebugInfo{
Version: Version,
Timezone: time.Now().Location().String(),
Architecture: runtime.GOARCH,
Modules: make([]string, len(ctx.moduleInstances)),
ModulesAdditionalData: make(map[string]map[string]any),
Flags: make(map[string]any),
}
i := 0
for ID, mod := range ctx.moduleInstances {
debug.Modules[i] = ID
i++
debuggable, ok := mod.(Debuggable)
if !ok {
continue
}
debug.ModulesAdditionalData[ID] = debuggable.Debug()
}
sort.Sort(AlphanumericSort(debug.Modules))
ctx.ParsedFlags().VisitAll(func(f *flag.Flag) {
debug.Flags[f.Name] = f.Value.String()
})
}
// Debug returns the debug data.
func Debug() DebugInfo {
debugMu.Lock()
defer debugMu.Unlock()
if debug == nil {
return DebugInfo{}
}
return *debug
}
var (
debug *DebugInfo
debugMu sync.Mutex
)