mirror of
https://github.com/gotenberg/gotenberg.git
synced 2026-08-08 16:42:15 +01:00
72 lines
1.6 KiB
Go
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
|
|
)
|