106 lines
2.7 KiB
Go
106 lines
2.7 KiB
Go
|
// report.go
|
||
|
package logimpl
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"slices"
|
||
|
"strings"
|
||
|
|
||
|
"portale-stac.it/packages/logger"
|
||
|
"portale-stac.it/packages/utils"
|
||
|
)
|
||
|
|
||
|
// Report params
|
||
|
const (
|
||
|
DOT_PAD = "."
|
||
|
VALUE_TEMPL = ": %#v"
|
||
|
NAME_FIELD_SIZE = 30
|
||
|
TOTAL_FIELD_SIZE = 34
|
||
|
)
|
||
|
|
||
|
type Report struct {
|
||
|
pad string
|
||
|
valueTempl string
|
||
|
nameFieldSize int
|
||
|
totalFieldSize int
|
||
|
log logger.VerboseLogger
|
||
|
}
|
||
|
|
||
|
func NewReport(log logger.VerboseLogger) (report *Report) {
|
||
|
report = &Report{
|
||
|
pad: DOT_PAD,
|
||
|
valueTempl: VALUE_TEMPL,
|
||
|
nameFieldSize: NAME_FIELD_SIZE,
|
||
|
totalFieldSize: TOTAL_FIELD_SIZE,
|
||
|
log: log,
|
||
|
}
|
||
|
return
|
||
|
}
|
||
|
|
||
|
func (rep *Report) Log() logger.VerboseLogger {
|
||
|
return rep.log
|
||
|
}
|
||
|
|
||
|
func (rep *Report) PutBrownWithPad(name string, value any, fieldSize int) {
|
||
|
name = strings.Title(name)
|
||
|
name = utils.PadStringRight(name, rep.pad, fieldSize, rep.valueTempl)
|
||
|
rep.log.VerboseBrownf(name, value)
|
||
|
}
|
||
|
|
||
|
func (rep *Report) PutBlueWithPad(name string, value any, fieldSize int) {
|
||
|
name = strings.Title(name)
|
||
|
name = utils.PadStringRight(name, rep.pad, fieldSize, rep.valueTempl)
|
||
|
rep.log.VerboseBluef(name, value)
|
||
|
}
|
||
|
|
||
|
func (rep *Report) PutParam(name string, value any) {
|
||
|
rep.PutBrownWithPad(name, value, rep.nameFieldSize)
|
||
|
}
|
||
|
|
||
|
func (rep *Report) PutParamWithError(name string, err error, value any) {
|
||
|
if err != nil {
|
||
|
tty, _ := rep.log.GetProperty(CONSOLE_LOG_TTY).(*utils.TTYContext)
|
||
|
value = fmt.Sprintf("%v -- %s%v%s", value, tty.RedFg(utils.STDERR), err, tty.Reset(utils.STDERR))
|
||
|
}
|
||
|
rep.PutBrownWithPad(name, value, rep.nameFieldSize)
|
||
|
}
|
||
|
|
||
|
func (rep *Report) PutTotal(name string, value any) {
|
||
|
rep.PutBlueWithPad(name, value, rep.totalFieldSize)
|
||
|
}
|
||
|
|
||
|
func (rep *Report) PutTotalCond(name string, good bool, value any) {
|
||
|
var styledValue string
|
||
|
tty, _ := rep.log.GetProperty(CONSOLE_LOG_TTY).(*utils.TTYContext)
|
||
|
name = utils.PadStringRight(name, DOT_PAD, TOTAL_FIELD_SIZE, rep.valueTempl)
|
||
|
if good {
|
||
|
styledValue = fmt.Sprintf("%s%v%s", tty.GreenFg(utils.STDERR), value, tty.Reset(utils.STDERR))
|
||
|
} else {
|
||
|
styledValue = fmt.Sprintf("%s%v%s", tty.RedFg(utils.STDERR), value, tty.Reset(utils.STDERR))
|
||
|
}
|
||
|
rep.log.VerboseBluef(name, styledValue)
|
||
|
}
|
||
|
|
||
|
func (rep *Report) PutVars(vars map[string]string, sortKeys bool) {
|
||
|
if vars != nil {
|
||
|
if sortKeys {
|
||
|
keys := make([]string, len(vars))
|
||
|
i := 0
|
||
|
for key := range vars {
|
||
|
keys[i] = key
|
||
|
i++
|
||
|
}
|
||
|
slices.Sort(keys)
|
||
|
for _, key := range keys {
|
||
|
name := utils.PadStringRight(key, rep.pad, rep.nameFieldSize, rep.valueTempl)
|
||
|
rep.log.VerboseBrownf(name, vars[key])
|
||
|
}
|
||
|
} else {
|
||
|
for key, value := range vars {
|
||
|
name := utils.PadStringRight(key, rep.pad, rep.nameFieldSize, rep.valueTempl)
|
||
|
rep.log.VerboseBrownf(name, value)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|