Files
steampipe/pkg/options/general.go
2025-03-06 16:34:18 +05:30

116 lines
2.9 KiB
Go

package options
import (
"fmt"
"strings"
"github.com/turbot/go-kit/helpers"
"github.com/turbot/pipe-fittings/v2/constants"
"github.com/turbot/pipe-fittings/v2/options"
)
type General struct {
UpdateCheck *string `hcl:"update_check" cty:"update_check"`
MaxParallel *int `hcl:"max_parallel" cty:"max_parallel"`
Telemetry *string `hcl:"telemetry" cty:"telemetry"`
LogLevel *string `hcl:"log_level" cty:"log_level"`
MemoryMaxMb *int `hcl:"memory_max_mb" cty:"memory_max_mb"`
}
// TODO KAI what is the difference between merge and SetBaseProperties
func (g *General) SetBaseProperties(otherOptions options.Options) {
if helpers.IsNil(otherOptions) {
return
}
if o, ok := otherOptions.(*General); ok {
if g.UpdateCheck == nil && o.UpdateCheck != nil {
g.UpdateCheck = o.UpdateCheck
}
if g.MaxParallel == nil && o.MaxParallel != nil {
g.MaxParallel = o.MaxParallel
}
if g.Telemetry == nil && o.Telemetry != nil {
g.Telemetry = o.Telemetry
}
if g.LogLevel == nil && o.LogLevel != nil {
g.LogLevel = o.LogLevel
}
if g.MemoryMaxMb == nil && o.MemoryMaxMb != nil {
g.MemoryMaxMb = o.MemoryMaxMb
}
}
}
// ConfigMap creates a config map that can be merged with viper
func (g *General) ConfigMap() map[string]interface{} {
// only add keys which are non null
res := map[string]interface{}{}
if g.UpdateCheck != nil {
res[constants.ArgUpdateCheck] = g.UpdateCheck
}
if g.Telemetry != nil {
res[constants.ArgTelemetry] = g.Telemetry
}
if g.MaxParallel != nil {
res[constants.ArgMaxParallel] = g.MaxParallel
}
if g.LogLevel != nil {
res[constants.ArgLogLevel] = g.LogLevel
}
if g.MemoryMaxMb != nil {
res[constants.ArgMemoryMaxMb] = g.MemoryMaxMb
}
return res
}
// Merge merges other options over the top of this options object
// i.e. if a property is set in otherOptions, it takes precedence
func (g *General) Merge(otherOptions options.Options) {
// TODO KAI this seems incomplete - check all merge
// also who uses this???
switch o := otherOptions.(type) {
case *General:
if o.UpdateCheck != nil {
g.UpdateCheck = o.UpdateCheck
}
}
}
func (g *General) String() string {
if g == nil {
return ""
}
var str []string
if g.UpdateCheck == nil {
str = append(str, " UpdateCheck: nil")
} else {
str = append(str, fmt.Sprintf(" UpdateCheck: %s", *g.UpdateCheck))
}
if g.MaxParallel == nil {
str = append(str, " MaxParallel: nil")
} else {
str = append(str, fmt.Sprintf(" MaxParallel: %d", *g.MaxParallel))
}
if g.Telemetry == nil {
str = append(str, " Telemetry: nil")
} else {
str = append(str, fmt.Sprintf(" Telemetry: %s", *g.Telemetry))
}
if g.LogLevel == nil {
str = append(str, " LogLevel: nil")
} else {
str = append(str, fmt.Sprintf(" LogLevel: %s", *g.LogLevel))
}
if g.MemoryMaxMb == nil {
str = append(str, " MemoryMaxMb: nil")
} else {
str = append(str, fmt.Sprintf(" MemoryMaxMb: %d", *g.MemoryMaxMb))
}
return strings.Join(str, "\n")
}