MCPcopy
hub / github.com/crowdsecurity/crowdsec / transform

Function transform

pkg/acquisition/acquisition.go:458–518  ·  view source on GitHub ↗
(
	transformChan chan pipeline.Event,
	output chan pipeline.Event,
	acquisTomb *tomb.Tomb,
	transformRuntime *vm.Program,
	logger *log.Entry,
)

Source from the content-addressed store, hash-verified

456}
457
458func transform(
459 transformChan chan pipeline.Event,
460 output chan pipeline.Event,
461 acquisTomb *tomb.Tomb,
462 transformRuntime *vm.Program,
463 logger *log.Entry,
464) {
465 logger.Info("transformer started")
466
467 for {
468 select {
469 case <-acquisTomb.Dying():
470 logger.Debugf("transformer is dying")
471 return
472 case evt := <-transformChan:
473 logger.Tracef("Received event %s", evt.Line.Raw)
474
475 out, err := expr.Run(transformRuntime, map[string]any{"evt": &evt})
476 if err != nil {
477 logger.Errorf("while running transform expression: %s, sending event as-is", err)
478 output <- evt
479 continue
480 }
481
482 if out == nil {
483 logger.Errorf("transform expression returned nil, sending event as-is")
484 output <- evt
485 continue
486 }
487
488 switch v := out.(type) {
489 case string:
490 logger.Tracef("transform expression returned %s", v)
491 output <- copyEvent(evt, v)
492 case []any:
493 logger.Tracef("transform expression returned %v", v) // We actually want to log the slice content
494
495 for _, line := range v {
496 l, ok := line.(string)
497 if !ok {
498 logger.Errorf("transform expression returned []interface{}, but cannot assert an element to string")
499 output <- evt
500
501 continue
502 }
503
504 output <- copyEvent(evt, l)
505 }
506 case []string:
507 logger.Tracef("transform expression returned %v", v)
508
509 for _, line := range v {
510 output <- copyEvent(evt, line)
511 }
512 default:
513 logger.Errorf("transform expression returned an invalid type %T, sending event as-is", out)
514 output <- evt
515 }

Callers 1

StartAcquisitionFunction · 0.85

Calls 4

copyEventFunction · 0.85
TracefMethod · 0.80
RunMethod · 0.65
InfoMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…