Files
mq/handlers/log_handler.go
2025-09-17 06:45:28 +05:45

71 lines
1.4 KiB
Go

package handlers
import (
"context"
"fmt"
"strings"
"github.com/oarkflow/jet"
"github.com/oarkflow/json"
"github.com/oarkflow/mq"
"github.com/oarkflow/mq/dag"
"github.com/oarkflow/log"
)
type LogHandler struct {
dag.Operation
}
func (p *LogHandler) ProcessTask(ctx context.Context, task *mq.Task) mq.Result {
var row map[string]any
data := task.Payload
if data != nil {
err := json.Unmarshal(data, &row)
if err != nil {
return mq.Result{
Ctx: ctx,
Error: err,
}
}
}
var msg string
toReturn := make(map[string]any)
for k, v := range p.Payload.Mapping {
_, val := dag.GetVal(ctx, v, row)
toReturn[k] = val
}
if val, exist := p.Payload.Data["message"]; exist {
_, v := dag.GetVal(ctx, val.(string), toReturn)
if v != nil {
msg = v.(string)
} else {
msg = val.(string)
}
}
logger := log.Info()
if len(toReturn) > 0 {
for k, v := range toReturn {
logger = logger.Any(k, v)
}
}
if strings.Contains(msg, "{{") {
rs, err := jet.Parse(msg, toReturn, true)
if err == nil {
msg = rs
}
}
logger.Msg(msg)
if _, exist := p.Payload.Data["print"]; exist {
fmt.Println(toReturn, msg)
}
return mq.Result{
Ctx: ctx,
Payload: task.Payload,
}
}
func NewLogHandler(id string) *LogHandler {
return &LogHandler{Operation: dag.Operation{Key: "log", ID: id, Type: dag.Function, Tags: []string{"built-in"}}}
}