118 lines
3.1 KiB
Go
118 lines
3.1 KiB
Go
// Copyright (c) 2024 Celestino Amoroso (celestino.amoroso@gmail.com).
|
|
// All rights reserved.
|
|
|
|
// report.go
|
|
package logimpl
|
|
|
|
import (
|
|
"fmt"
|
|
"slices"
|
|
"strings"
|
|
|
|
"git.portale-stac.it/go-pkg/logger"
|
|
"git.portale-stac.it/go-pkg/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) PutBrownWithPadRawCase(name string, value any, fieldSize int) {
|
|
name = utils.PadStringRight(name, rep.pad, fieldSize, rep.valueTempl)
|
|
rep.log.VerboseBrownf(name, value)
|
|
}
|
|
|
|
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) PutVar(name string, value any) {
|
|
rep.PutBrownWithPadRawCase(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)
|
|
}
|
|
}
|
|
}
|
|
}
|