github.com/observiq/carbon@v0.9.11-0.20200820160507-1b872e368a5e/operator/builtin/transformer/metadata.go (about) 1 package transformer 2 3 import ( 4 "context" 5 6 "github.com/observiq/carbon/entry" 7 "github.com/observiq/carbon/errors" 8 "github.com/observiq/carbon/operator" 9 "github.com/observiq/carbon/operator/helper" 10 ) 11 12 func init() { 13 operator.Register("metadata", func() operator.Builder { return NewMetadataOperatorConfig("") }) 14 } 15 16 // NewMetadataOperatorConfig creates a new metadata config with default values 17 func NewMetadataOperatorConfig(operatorID string) *MetadataOperatorConfig { 18 return &MetadataOperatorConfig{ 19 TransformerConfig: helper.NewTransformerConfig(operatorID, "metadata"), 20 LabelerConfig: helper.NewLabelerConfig(), 21 IdentifierConfig: helper.NewIdentifierConfig(), 22 } 23 } 24 25 // MetadataOperatorConfig is the configuration of a metadata operator 26 type MetadataOperatorConfig struct { 27 helper.TransformerConfig `yaml:",inline"` 28 helper.LabelerConfig `yaml:",inline"` 29 helper.IdentifierConfig `yaml:",inline"` 30 } 31 32 // Build will build a metadata operator from the supplied configuration 33 func (c MetadataOperatorConfig) Build(context operator.BuildContext) (operator.Operator, error) { 34 transformerOperator, err := c.TransformerConfig.Build(context) 35 if err != nil { 36 return nil, errors.Wrap(err, "failed to build transformer") 37 } 38 39 labeler, err := c.LabelerConfig.Build() 40 if err != nil { 41 return nil, errors.Wrap(err, "failed to build labeler") 42 } 43 44 identifier, err := c.IdentifierConfig.Build() 45 if err != nil { 46 return nil, errors.Wrap(err, "failed to build identifier") 47 } 48 49 metadataOperator := &MetadataOperator{ 50 TransformerOperator: transformerOperator, 51 Labeler: labeler, 52 Identifier: identifier, 53 } 54 55 return metadataOperator, nil 56 } 57 58 // MetadataOperator is an operator that can add metadata to incoming entries 59 type MetadataOperator struct { 60 helper.TransformerOperator 61 helper.Labeler 62 helper.Identifier 63 } 64 65 // Process will process an incoming entry using the metadata transform. 66 func (p *MetadataOperator) Process(ctx context.Context, entry *entry.Entry) error { 67 return p.ProcessWith(ctx, entry, p.Transform) 68 } 69 70 // Transform will transform an entry using the labeler and tagger. 71 func (p *MetadataOperator) Transform(entry *entry.Entry) (*entry.Entry, error) { 72 if err := p.Label(entry); err != nil { 73 return entry, errors.Wrap(err, "failed to add labels to entry") 74 } 75 76 if err := p.Identify(entry); err != nil { 77 return entry, errors.Wrap(err, "failed to add resource keys to entry") 78 } 79 80 return entry, nil 81 }