From ea8daad82ed7ff1d2ff06b2fa1a42bc5e7355428 Mon Sep 17 00:00:00 2001 From: Dan Jaglowski Date: Wed, 23 Oct 2024 12:37:51 -0400 Subject: [PATCH] Add golden test cases and fix bug where conditions were not differentiated --- .chloggen/routing-tests-golden.yaml | 27 ++++ connector/routingconnector/go.mod | 4 + connector/routingconnector/go.sum | 2 + connector/routingconnector/logs_test.go | 92 ++++++++++++ connector/routingconnector/router.go | 4 +- .../all_match_first_only/config.yaml | 10 ++ .../all_match_first_only/input.yaml | 141 ++++++++++++++++++ .../all_match_first_only/sink_0.yaml | 141 ++++++++++++++++++ .../all_match_last_only/config.yaml | 10 ++ .../all_match_last_only/input.yaml | 141 ++++++++++++++++++ .../all_match_last_only/sink_1.yaml | 141 ++++++++++++++++++ .../all_match_once/config.yaml | 11 ++ .../all_match_once/input.yaml | 141 ++++++++++++++++++ .../all_match_once/sink_0.yaml | 141 ++++++++++++++++++ .../each_matches_one/config.yaml | 10 ++ .../each_matches_one/input.yaml | 141 ++++++++++++++++++ .../each_matches_one/sink_0.yaml | 71 +++++++++ .../each_matches_one/sink_1.yaml | 71 +++++++++ .../match_none_with_default/config.yaml | 10 ++ .../match_none_with_default/input.yaml | 141 ++++++++++++++++++ .../match_none_with_default/sink_default.yaml | 141 ++++++++++++++++++ .../match_none_without_default/config.yaml | 10 ++ .../match_none_without_default/input.yaml | 141 ++++++++++++++++++ 23 files changed, 1740 insertions(+), 2 deletions(-) create mode 100644 .chloggen/routing-tests-golden.yaml create mode 100644 connector/routingconnector/testdata/logs/resource_context/all_match_first_only/config.yaml create mode 100644 connector/routingconnector/testdata/logs/resource_context/all_match_first_only/input.yaml create mode 100644 connector/routingconnector/testdata/logs/resource_context/all_match_first_only/sink_0.yaml create mode 100644 connector/routingconnector/testdata/logs/resource_context/all_match_last_only/config.yaml create mode 100644 connector/routingconnector/testdata/logs/resource_context/all_match_last_only/input.yaml create mode 100644 connector/routingconnector/testdata/logs/resource_context/all_match_last_only/sink_1.yaml create mode 100644 connector/routingconnector/testdata/logs/resource_context/all_match_once/config.yaml create mode 100644 connector/routingconnector/testdata/logs/resource_context/all_match_once/input.yaml create mode 100644 connector/routingconnector/testdata/logs/resource_context/all_match_once/sink_0.yaml create mode 100644 connector/routingconnector/testdata/logs/resource_context/each_matches_one/config.yaml create mode 100644 connector/routingconnector/testdata/logs/resource_context/each_matches_one/input.yaml create mode 100644 connector/routingconnector/testdata/logs/resource_context/each_matches_one/sink_0.yaml create mode 100644 connector/routingconnector/testdata/logs/resource_context/each_matches_one/sink_1.yaml create mode 100644 connector/routingconnector/testdata/logs/resource_context/match_none_with_default/config.yaml create mode 100644 connector/routingconnector/testdata/logs/resource_context/match_none_with_default/input.yaml create mode 100644 connector/routingconnector/testdata/logs/resource_context/match_none_with_default/sink_default.yaml create mode 100644 connector/routingconnector/testdata/logs/resource_context/match_none_without_default/config.yaml create mode 100644 connector/routingconnector/testdata/logs/resource_context/match_none_without_default/input.yaml diff --git a/.chloggen/routing-tests-golden.yaml b/.chloggen/routing-tests-golden.yaml new file mode 100644 index 000000000000..2bfc50b3f64d --- /dev/null +++ b/.chloggen/routing-tests-golden.yaml @@ -0,0 +1,27 @@ +# Use this changelog template to create an entry for release notes. + +# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix' +change_type: bug_fix + +# The name of the component, or a single word describing the area of concern, (e.g. filelogreceiver) +component: connector/routing + +# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). +note: Fix detection of duplicate conditions in routing table. + +# Mandatory: One or more tracking issues related to the change. You can use the PR number here if no issue exists. +issues: [35962] + +# (Optional) One or more lines of additional information to render under the primary note. +# These lines will be padded with 2 spaces and then inserted directly into the document. +# Use pipe (|) for multiline entries. +subtext: + +# If your change doesn't affect end users or the exported elements of any package, +# you should instead start your pull request title with [chore] or use the "Skip Changelog" label. +# Optional: The change log or logs in which this entry should be included. +# e.g. '[user]' or '[user, api]' +# Include 'user' if the change is relevant to end users. +# Include 'api' if there is a change to a library API. +# Default: '[user]' +change_logs: [] diff --git a/connector/routingconnector/go.mod b/connector/routingconnector/go.mod index 60497189f701..cd8dc6e089ee 100644 --- a/connector/routingconnector/go.mod +++ b/connector/routingconnector/go.mod @@ -3,7 +3,9 @@ module github.com/open-telemetry/opentelemetry-collector-contrib/connector/routi go 1.22.0 require ( + github.com/open-telemetry/opentelemetry-collector-contrib/pkg/golden v0.112.0 github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl v0.112.0 + github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest v0.112.0 github.com/stretchr/testify v1.9.0 go.opentelemetry.io/collector/component v0.112.0 go.opentelemetry.io/collector/confmap v1.18.0 @@ -21,6 +23,7 @@ require ( github.com/alecthomas/participle/v2 v2.1.1 // indirect github.com/antchfx/xmlquery v1.4.2 // indirect github.com/antchfx/xpath v1.3.2 // indirect + github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/elastic/go-grok v0.3.1 // indirect github.com/elastic/lunes v0.1.0 // indirect @@ -44,6 +47,7 @@ require ( github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.112.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.112.0 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/ua-parser/uap-go v0.0.0-20240611065828-3a4781585db6 // indirect go.opentelemetry.io/collector v0.112.0 // indirect diff --git a/connector/routingconnector/go.sum b/connector/routingconnector/go.sum index 0c9b91060b52..9de0ce62a86f 100644 --- a/connector/routingconnector/go.sum +++ b/connector/routingconnector/go.sum @@ -8,6 +8,8 @@ github.com/antchfx/xmlquery v1.4.2 h1:MZKd9+wblwxfQ1zd1AdrTsqVaMjMCwow3IqkCSe00K github.com/antchfx/xmlquery v1.4.2/go.mod h1:QXhvf5ldTuGqhd1SHNvvtlhhdQLks4dD0awIVhXIDTA= github.com/antchfx/xpath v1.3.2 h1:LNjzlsSjinu3bQpw9hWMY9ocB80oLOWuQqFvO6xt51U= github.com/antchfx/xpath v1.3.2/go.mod h1:i54GszH55fYfBmoZXapTHN8T8tkcHfRgLyVwwqzXNcs= +github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= +github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= diff --git a/connector/routingconnector/logs_test.go b/connector/routingconnector/logs_test.go index ee450a17e4a9..344aa01e07ba 100644 --- a/connector/routingconnector/logs_test.go +++ b/connector/routingconnector/logs_test.go @@ -5,17 +5,24 @@ package routingconnector // import "github.com/open-telemetry/opentelemetry-coll import ( "context" + "os" + "path/filepath" "testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "go.opentelemetry.io/collector/component" "go.opentelemetry.io/collector/component/componenttest" + "go.opentelemetry.io/collector/confmap/confmaptest" "go.opentelemetry.io/collector/connector" "go.opentelemetry.io/collector/connector/connectortest" "go.opentelemetry.io/collector/consumer" "go.opentelemetry.io/collector/consumer/consumertest" "go.opentelemetry.io/collector/pdata/plog" "go.opentelemetry.io/collector/pipeline" + + "github.com/open-telemetry/opentelemetry-collector-contrib/pkg/golden" + "github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest/plogtest" ) func TestLogsRegisterConsumersForValidRoute(t *testing.T) { @@ -465,3 +472,88 @@ func TestLogsConnectorCapabilities(t *testing.T) { require.NoError(t, err) assert.False(t, conn.Capabilities().MutatesData) } + +func TestLogsConnectorDetailed(t *testing.T) { + testCases := []string{ + filepath.Join("testdata", "logs", "resource_context", "all_match_first_only"), + filepath.Join("testdata", "logs", "resource_context", "all_match_last_only"), + filepath.Join("testdata", "logs", "resource_context", "all_match_once"), + filepath.Join("testdata", "logs", "resource_context", "each_matches_one"), + filepath.Join("testdata", "logs", "resource_context", "match_none_with_default"), + filepath.Join("testdata", "logs", "resource_context", "match_none_without_default"), + } + + for _, tt := range testCases { + t.Run(tt, func(t *testing.T) { + + cm, err := confmaptest.LoadConf(filepath.Join(tt, "config.yaml")) + require.NoError(t, err) + factory := NewFactory() + cfg := factory.CreateDefaultConfig() + sub, err := cm.Sub("routing") + require.NoError(t, err) + require.NoError(t, sub.Unmarshal(cfg)) + require.NoError(t, component.ValidateConfig(cfg)) + + var sinkDefault, sink0, sink1 consumertest.LogsSink + router := connector.NewLogsRouter(map[pipeline.ID]consumer.Logs{ + pipeline.NewIDWithName(pipeline.SignalLogs, "default"): &sinkDefault, + pipeline.NewIDWithName(pipeline.SignalLogs, "0"): &sink0, + pipeline.NewIDWithName(pipeline.SignalLogs, "1"): &sink1, + }) + + conn, err := factory.CreateLogsToLogs( + context.Background(), + connectortest.NewNopSettings(), + cfg, + router.(consumer.Logs), + ) + require.NoError(t, err) + + var expected0, expected1, expectedDefault *plog.Logs + if expected, readErr := golden.ReadLogs(filepath.Join(tt, "sink_0.yaml")); readErr == nil { + expected0 = &expected + } else if !os.IsNotExist(readErr) { + t.Fatalf("Error reading sink_0.yaml: %v", readErr) + } + + if expected, readErr := golden.ReadLogs(filepath.Join(tt, "sink_1.yaml")); readErr == nil { + expected1 = &expected + } else if !os.IsNotExist(readErr) { + t.Fatalf("Error reading sink_1.yaml: %v", readErr) + } + + if expected, readErr := golden.ReadLogs(filepath.Join(tt, "sink_default.yaml")); readErr == nil { + expectedDefault = &expected + } else if !os.IsNotExist(readErr) { + t.Fatalf("Error reading sink_default.yaml: %v", readErr) + } + + input, readErr := golden.ReadLogs(filepath.Join(tt, "input.yaml")) + require.NoError(t, readErr) + + require.NoError(t, conn.ConsumeLogs(context.Background(), input)) + + if expected0 == nil { + assert.Empty(t, sink0.AllLogs(), "sink0 should be empty") + } else { + require.Len(t, sink0.AllLogs(), 1, "sink0 should have one plog.Logs") + assert.NoError(t, plogtest.CompareLogs(*expected0, sink0.AllLogs()[0]), "sink0 has unexpected result") + } + + if expected1 == nil { + assert.Empty(t, sink1.AllLogs(), "sink1 should be empty") + } else { + require.Len(t, sink1.AllLogs(), 1, "sink1 should have one plog.Logs") + assert.NoError(t, plogtest.CompareLogs(*expected1, sink1.AllLogs()[0]), "sink1 has unexpected result") + } + + if expectedDefault == nil { + assert.Empty(t, sinkDefault.AllLogs(), "sinkDefault should be empty") + } else { + require.Len(t, sinkDefault.AllLogs(), 1, "sinkDefault should have one plog.Logs") + assert.NoError(t, plogtest.CompareLogs(*expectedDefault, sinkDefault.AllLogs()[0]), "sinkDefault has unexpected result") + } + }) + } +} diff --git a/connector/routingconnector/router.go b/connector/routingconnector/router.go index aef71a743e39..a787c96d7e9d 100644 --- a/connector/routingconnector/router.go +++ b/connector/routingconnector/router.go @@ -113,7 +113,7 @@ func (r *router[C]) registerDefaultConsumer(pipelineIDs []pipeline.ID) error { // for each route func (r *router[C]) registerRouteConsumers() error { for _, item := range r.table { - statement, err := r.getStatementFrom(item) + statement, err := r.getStatementFrom(&item) if err != nil { return err } @@ -147,7 +147,7 @@ func (r *router[C]) registerRouteConsumers() error { // getStatementFrom builds a routing OTTL statement from the provided // routing table entry configuration. If the routing table entry configuration // does not contain a valid OTTL statement then nil is returned. -func (r *router[C]) getStatementFrom(item RoutingTableItem) (*ottl.Statement[ottlresource.TransformContext], error) { +func (r *router[C]) getStatementFrom(item *RoutingTableItem) (*ottl.Statement[ottlresource.TransformContext], error) { var statement *ottl.Statement[ottlresource.TransformContext] if item.Condition != "" { item.Statement = fmt.Sprintf("route() where %s", item.Condition) diff --git a/connector/routingconnector/testdata/logs/resource_context/all_match_first_only/config.yaml b/connector/routingconnector/testdata/logs/resource_context/all_match_first_only/config.yaml new file mode 100644 index 000000000000..0c6ae0f17eca --- /dev/null +++ b/connector/routingconnector/testdata/logs/resource_context/all_match_first_only/config.yaml @@ -0,0 +1,10 @@ +routing: + default_pipelines: + - logs/default + table: + - condition: attributes["resourceName"] != nil + pipelines: + - logs/0 + - condition: attributes["resourceName"] == "resourceY" + pipelines: + - logs/1 diff --git a/connector/routingconnector/testdata/logs/resource_context/all_match_first_only/input.yaml b/connector/routingconnector/testdata/logs/resource_context/all_match_first_only/input.yaml new file mode 100644 index 000000000000..63c6eada6cf9 --- /dev/null +++ b/connector/routingconnector/testdata/logs/resource_context/all_match_first_only/input.yaml @@ -0,0 +1,141 @@ +resourceLogs: + - resource: + attributes: + - key: resourceName + value: + stringValue: resourceA + - key: resourceNameAgain + value: + stringValue: resourceA + schemaUrl: https://opentelemetry.io/schemas/1.6.1 + scopeLogs: + - attributes: + - key: scopeName + value: + stringValue: scopeA + - key: scopeNameAgain + value: + stringValue: scopeA + logRecords: + - attributes: + - key: logName + value: + stringValue: logA + - key: logNameAgain + value: + stringValue: logA + body: + stringValue: logA + - attributes: + - key: logName + value: + stringValue: logB + - key: logNameAgain + value: + stringValue: logB + body: + stringValue: logB + schemaUrl: https://opentelemetry.io/schemas/1.6.1 + scope: + name: scopeA + version: v0.1.0 + - attributes: + - key: scopeName + value: + stringValue: scopeB + - key: scopeNameAgain + value: + stringValue: scopeB + logRecords: + - attributes: + - key: logName + value: + stringValue: logA + - key: logNameAgain + value: + stringValue: logA + body: + stringValue: logA + - attributes: + - key: logName + value: + stringValue: logB + - key: logNameAgain + value: + stringValue: logB + body: + stringValue: logB + schemaUrl: https://opentelemetry.io/schemas/1.6.1 + scope: + name: scopeB + version: v0.1.0 + - resource: + attributes: + - key: resourceName + value: + stringValue: resourceB + - key: resourceNameAgain + value: + stringValue: resourceB + schemaUrl: https://opentelemetry.io/schemas/1.6.1 + scopeLogs: + - attributes: + - key: scopeName + value: + stringValue: scopeA + - key: scopeNameAgain + value: + stringValue: scopeA + logRecords: + - attributes: + - key: logName + value: + stringValue: logA + - key: logNameAgain + value: + stringValue: logA + body: + stringValue: logA + - attributes: + - key: logName + value: + stringValue: logB + - key: logNameAgain + value: + stringValue: logB + body: + stringValue: logB + schemaUrl: https://opentelemetry.io/schemas/1.6.1 + scope: + name: scopeA + version: v0.1.0 + - attributes: + - key: scopeName + value: + stringValue: scopeB + - key: scopeNameAgain + value: + stringValue: scopeB + logRecords: + - attributes: + - key: logName + value: + stringValue: logA + - key: logNameAgain + value: + stringValue: logA + body: + stringValue: logA + - attributes: + - key: logName + value: + stringValue: logB + - key: logNameAgain + value: + stringValue: logB + body: + stringValue: logB + schemaUrl: https://opentelemetry.io/schemas/1.6.1 + scope: + name: scopeB + version: v0.1.0 diff --git a/connector/routingconnector/testdata/logs/resource_context/all_match_first_only/sink_0.yaml b/connector/routingconnector/testdata/logs/resource_context/all_match_first_only/sink_0.yaml new file mode 100644 index 000000000000..63c6eada6cf9 --- /dev/null +++ b/connector/routingconnector/testdata/logs/resource_context/all_match_first_only/sink_0.yaml @@ -0,0 +1,141 @@ +resourceLogs: + - resource: + attributes: + - key: resourceName + value: + stringValue: resourceA + - key: resourceNameAgain + value: + stringValue: resourceA + schemaUrl: https://opentelemetry.io/schemas/1.6.1 + scopeLogs: + - attributes: + - key: scopeName + value: + stringValue: scopeA + - key: scopeNameAgain + value: + stringValue: scopeA + logRecords: + - attributes: + - key: logName + value: + stringValue: logA + - key: logNameAgain + value: + stringValue: logA + body: + stringValue: logA + - attributes: + - key: logName + value: + stringValue: logB + - key: logNameAgain + value: + stringValue: logB + body: + stringValue: logB + schemaUrl: https://opentelemetry.io/schemas/1.6.1 + scope: + name: scopeA + version: v0.1.0 + - attributes: + - key: scopeName + value: + stringValue: scopeB + - key: scopeNameAgain + value: + stringValue: scopeB + logRecords: + - attributes: + - key: logName + value: + stringValue: logA + - key: logNameAgain + value: + stringValue: logA + body: + stringValue: logA + - attributes: + - key: logName + value: + stringValue: logB + - key: logNameAgain + value: + stringValue: logB + body: + stringValue: logB + schemaUrl: https://opentelemetry.io/schemas/1.6.1 + scope: + name: scopeB + version: v0.1.0 + - resource: + attributes: + - key: resourceName + value: + stringValue: resourceB + - key: resourceNameAgain + value: + stringValue: resourceB + schemaUrl: https://opentelemetry.io/schemas/1.6.1 + scopeLogs: + - attributes: + - key: scopeName + value: + stringValue: scopeA + - key: scopeNameAgain + value: + stringValue: scopeA + logRecords: + - attributes: + - key: logName + value: + stringValue: logA + - key: logNameAgain + value: + stringValue: logA + body: + stringValue: logA + - attributes: + - key: logName + value: + stringValue: logB + - key: logNameAgain + value: + stringValue: logB + body: + stringValue: logB + schemaUrl: https://opentelemetry.io/schemas/1.6.1 + scope: + name: scopeA + version: v0.1.0 + - attributes: + - key: scopeName + value: + stringValue: scopeB + - key: scopeNameAgain + value: + stringValue: scopeB + logRecords: + - attributes: + - key: logName + value: + stringValue: logA + - key: logNameAgain + value: + stringValue: logA + body: + stringValue: logA + - attributes: + - key: logName + value: + stringValue: logB + - key: logNameAgain + value: + stringValue: logB + body: + stringValue: logB + schemaUrl: https://opentelemetry.io/schemas/1.6.1 + scope: + name: scopeB + version: v0.1.0 diff --git a/connector/routingconnector/testdata/logs/resource_context/all_match_last_only/config.yaml b/connector/routingconnector/testdata/logs/resource_context/all_match_last_only/config.yaml new file mode 100644 index 000000000000..107c8c59b83b --- /dev/null +++ b/connector/routingconnector/testdata/logs/resource_context/all_match_last_only/config.yaml @@ -0,0 +1,10 @@ +routing: + default_pipelines: + - logs/default + table: + - condition: attributes["resourceName"] == "resourceX" + pipelines: + - logs/0 + - condition: attributes["resourceName"] != nil + pipelines: + - logs/1 diff --git a/connector/routingconnector/testdata/logs/resource_context/all_match_last_only/input.yaml b/connector/routingconnector/testdata/logs/resource_context/all_match_last_only/input.yaml new file mode 100644 index 000000000000..63c6eada6cf9 --- /dev/null +++ b/connector/routingconnector/testdata/logs/resource_context/all_match_last_only/input.yaml @@ -0,0 +1,141 @@ +resourceLogs: + - resource: + attributes: + - key: resourceName + value: + stringValue: resourceA + - key: resourceNameAgain + value: + stringValue: resourceA + schemaUrl: https://opentelemetry.io/schemas/1.6.1 + scopeLogs: + - attributes: + - key: scopeName + value: + stringValue: scopeA + - key: scopeNameAgain + value: + stringValue: scopeA + logRecords: + - attributes: + - key: logName + value: + stringValue: logA + - key: logNameAgain + value: + stringValue: logA + body: + stringValue: logA + - attributes: + - key: logName + value: + stringValue: logB + - key: logNameAgain + value: + stringValue: logB + body: + stringValue: logB + schemaUrl: https://opentelemetry.io/schemas/1.6.1 + scope: + name: scopeA + version: v0.1.0 + - attributes: + - key: scopeName + value: + stringValue: scopeB + - key: scopeNameAgain + value: + stringValue: scopeB + logRecords: + - attributes: + - key: logName + value: + stringValue: logA + - key: logNameAgain + value: + stringValue: logA + body: + stringValue: logA + - attributes: + - key: logName + value: + stringValue: logB + - key: logNameAgain + value: + stringValue: logB + body: + stringValue: logB + schemaUrl: https://opentelemetry.io/schemas/1.6.1 + scope: + name: scopeB + version: v0.1.0 + - resource: + attributes: + - key: resourceName + value: + stringValue: resourceB + - key: resourceNameAgain + value: + stringValue: resourceB + schemaUrl: https://opentelemetry.io/schemas/1.6.1 + scopeLogs: + - attributes: + - key: scopeName + value: + stringValue: scopeA + - key: scopeNameAgain + value: + stringValue: scopeA + logRecords: + - attributes: + - key: logName + value: + stringValue: logA + - key: logNameAgain + value: + stringValue: logA + body: + stringValue: logA + - attributes: + - key: logName + value: + stringValue: logB + - key: logNameAgain + value: + stringValue: logB + body: + stringValue: logB + schemaUrl: https://opentelemetry.io/schemas/1.6.1 + scope: + name: scopeA + version: v0.1.0 + - attributes: + - key: scopeName + value: + stringValue: scopeB + - key: scopeNameAgain + value: + stringValue: scopeB + logRecords: + - attributes: + - key: logName + value: + stringValue: logA + - key: logNameAgain + value: + stringValue: logA + body: + stringValue: logA + - attributes: + - key: logName + value: + stringValue: logB + - key: logNameAgain + value: + stringValue: logB + body: + stringValue: logB + schemaUrl: https://opentelemetry.io/schemas/1.6.1 + scope: + name: scopeB + version: v0.1.0 diff --git a/connector/routingconnector/testdata/logs/resource_context/all_match_last_only/sink_1.yaml b/connector/routingconnector/testdata/logs/resource_context/all_match_last_only/sink_1.yaml new file mode 100644 index 000000000000..63c6eada6cf9 --- /dev/null +++ b/connector/routingconnector/testdata/logs/resource_context/all_match_last_only/sink_1.yaml @@ -0,0 +1,141 @@ +resourceLogs: + - resource: + attributes: + - key: resourceName + value: + stringValue: resourceA + - key: resourceNameAgain + value: + stringValue: resourceA + schemaUrl: https://opentelemetry.io/schemas/1.6.1 + scopeLogs: + - attributes: + - key: scopeName + value: + stringValue: scopeA + - key: scopeNameAgain + value: + stringValue: scopeA + logRecords: + - attributes: + - key: logName + value: + stringValue: logA + - key: logNameAgain + value: + stringValue: logA + body: + stringValue: logA + - attributes: + - key: logName + value: + stringValue: logB + - key: logNameAgain + value: + stringValue: logB + body: + stringValue: logB + schemaUrl: https://opentelemetry.io/schemas/1.6.1 + scope: + name: scopeA + version: v0.1.0 + - attributes: + - key: scopeName + value: + stringValue: scopeB + - key: scopeNameAgain + value: + stringValue: scopeB + logRecords: + - attributes: + - key: logName + value: + stringValue: logA + - key: logNameAgain + value: + stringValue: logA + body: + stringValue: logA + - attributes: + - key: logName + value: + stringValue: logB + - key: logNameAgain + value: + stringValue: logB + body: + stringValue: logB + schemaUrl: https://opentelemetry.io/schemas/1.6.1 + scope: + name: scopeB + version: v0.1.0 + - resource: + attributes: + - key: resourceName + value: + stringValue: resourceB + - key: resourceNameAgain + value: + stringValue: resourceB + schemaUrl: https://opentelemetry.io/schemas/1.6.1 + scopeLogs: + - attributes: + - key: scopeName + value: + stringValue: scopeA + - key: scopeNameAgain + value: + stringValue: scopeA + logRecords: + - attributes: + - key: logName + value: + stringValue: logA + - key: logNameAgain + value: + stringValue: logA + body: + stringValue: logA + - attributes: + - key: logName + value: + stringValue: logB + - key: logNameAgain + value: + stringValue: logB + body: + stringValue: logB + schemaUrl: https://opentelemetry.io/schemas/1.6.1 + scope: + name: scopeA + version: v0.1.0 + - attributes: + - key: scopeName + value: + stringValue: scopeB + - key: scopeNameAgain + value: + stringValue: scopeB + logRecords: + - attributes: + - key: logName + value: + stringValue: logA + - key: logNameAgain + value: + stringValue: logA + body: + stringValue: logA + - attributes: + - key: logName + value: + stringValue: logB + - key: logNameAgain + value: + stringValue: logB + body: + stringValue: logB + schemaUrl: https://opentelemetry.io/schemas/1.6.1 + scope: + name: scopeB + version: v0.1.0 diff --git a/connector/routingconnector/testdata/logs/resource_context/all_match_once/config.yaml b/connector/routingconnector/testdata/logs/resource_context/all_match_once/config.yaml new file mode 100644 index 000000000000..3edeec5ce55f --- /dev/null +++ b/connector/routingconnector/testdata/logs/resource_context/all_match_once/config.yaml @@ -0,0 +1,11 @@ +routing: + match_once: true + default_pipelines: + - logs/default + table: + - condition: attributes["resourceName"] != nil + pipelines: + - logs/0 + - condition: attributes["resourceName"] == "resourceA" or attributes["resourceName"] == "resourceB" + pipelines: + - logs/1 diff --git a/connector/routingconnector/testdata/logs/resource_context/all_match_once/input.yaml b/connector/routingconnector/testdata/logs/resource_context/all_match_once/input.yaml new file mode 100644 index 000000000000..63c6eada6cf9 --- /dev/null +++ b/connector/routingconnector/testdata/logs/resource_context/all_match_once/input.yaml @@ -0,0 +1,141 @@ +resourceLogs: + - resource: + attributes: + - key: resourceName + value: + stringValue: resourceA + - key: resourceNameAgain + value: + stringValue: resourceA + schemaUrl: https://opentelemetry.io/schemas/1.6.1 + scopeLogs: + - attributes: + - key: scopeName + value: + stringValue: scopeA + - key: scopeNameAgain + value: + stringValue: scopeA + logRecords: + - attributes: + - key: logName + value: + stringValue: logA + - key: logNameAgain + value: + stringValue: logA + body: + stringValue: logA + - attributes: + - key: logName + value: + stringValue: logB + - key: logNameAgain + value: + stringValue: logB + body: + stringValue: logB + schemaUrl: https://opentelemetry.io/schemas/1.6.1 + scope: + name: scopeA + version: v0.1.0 + - attributes: + - key: scopeName + value: + stringValue: scopeB + - key: scopeNameAgain + value: + stringValue: scopeB + logRecords: + - attributes: + - key: logName + value: + stringValue: logA + - key: logNameAgain + value: + stringValue: logA + body: + stringValue: logA + - attributes: + - key: logName + value: + stringValue: logB + - key: logNameAgain + value: + stringValue: logB + body: + stringValue: logB + schemaUrl: https://opentelemetry.io/schemas/1.6.1 + scope: + name: scopeB + version: v0.1.0 + - resource: + attributes: + - key: resourceName + value: + stringValue: resourceB + - key: resourceNameAgain + value: + stringValue: resourceB + schemaUrl: https://opentelemetry.io/schemas/1.6.1 + scopeLogs: + - attributes: + - key: scopeName + value: + stringValue: scopeA + - key: scopeNameAgain + value: + stringValue: scopeA + logRecords: + - attributes: + - key: logName + value: + stringValue: logA + - key: logNameAgain + value: + stringValue: logA + body: + stringValue: logA + - attributes: + - key: logName + value: + stringValue: logB + - key: logNameAgain + value: + stringValue: logB + body: + stringValue: logB + schemaUrl: https://opentelemetry.io/schemas/1.6.1 + scope: + name: scopeA + version: v0.1.0 + - attributes: + - key: scopeName + value: + stringValue: scopeB + - key: scopeNameAgain + value: + stringValue: scopeB + logRecords: + - attributes: + - key: logName + value: + stringValue: logA + - key: logNameAgain + value: + stringValue: logA + body: + stringValue: logA + - attributes: + - key: logName + value: + stringValue: logB + - key: logNameAgain + value: + stringValue: logB + body: + stringValue: logB + schemaUrl: https://opentelemetry.io/schemas/1.6.1 + scope: + name: scopeB + version: v0.1.0 diff --git a/connector/routingconnector/testdata/logs/resource_context/all_match_once/sink_0.yaml b/connector/routingconnector/testdata/logs/resource_context/all_match_once/sink_0.yaml new file mode 100644 index 000000000000..63c6eada6cf9 --- /dev/null +++ b/connector/routingconnector/testdata/logs/resource_context/all_match_once/sink_0.yaml @@ -0,0 +1,141 @@ +resourceLogs: + - resource: + attributes: + - key: resourceName + value: + stringValue: resourceA + - key: resourceNameAgain + value: + stringValue: resourceA + schemaUrl: https://opentelemetry.io/schemas/1.6.1 + scopeLogs: + - attributes: + - key: scopeName + value: + stringValue: scopeA + - key: scopeNameAgain + value: + stringValue: scopeA + logRecords: + - attributes: + - key: logName + value: + stringValue: logA + - key: logNameAgain + value: + stringValue: logA + body: + stringValue: logA + - attributes: + - key: logName + value: + stringValue: logB + - key: logNameAgain + value: + stringValue: logB + body: + stringValue: logB + schemaUrl: https://opentelemetry.io/schemas/1.6.1 + scope: + name: scopeA + version: v0.1.0 + - attributes: + - key: scopeName + value: + stringValue: scopeB + - key: scopeNameAgain + value: + stringValue: scopeB + logRecords: + - attributes: + - key: logName + value: + stringValue: logA + - key: logNameAgain + value: + stringValue: logA + body: + stringValue: logA + - attributes: + - key: logName + value: + stringValue: logB + - key: logNameAgain + value: + stringValue: logB + body: + stringValue: logB + schemaUrl: https://opentelemetry.io/schemas/1.6.1 + scope: + name: scopeB + version: v0.1.0 + - resource: + attributes: + - key: resourceName + value: + stringValue: resourceB + - key: resourceNameAgain + value: + stringValue: resourceB + schemaUrl: https://opentelemetry.io/schemas/1.6.1 + scopeLogs: + - attributes: + - key: scopeName + value: + stringValue: scopeA + - key: scopeNameAgain + value: + stringValue: scopeA + logRecords: + - attributes: + - key: logName + value: + stringValue: logA + - key: logNameAgain + value: + stringValue: logA + body: + stringValue: logA + - attributes: + - key: logName + value: + stringValue: logB + - key: logNameAgain + value: + stringValue: logB + body: + stringValue: logB + schemaUrl: https://opentelemetry.io/schemas/1.6.1 + scope: + name: scopeA + version: v0.1.0 + - attributes: + - key: scopeName + value: + stringValue: scopeB + - key: scopeNameAgain + value: + stringValue: scopeB + logRecords: + - attributes: + - key: logName + value: + stringValue: logA + - key: logNameAgain + value: + stringValue: logA + body: + stringValue: logA + - attributes: + - key: logName + value: + stringValue: logB + - key: logNameAgain + value: + stringValue: logB + body: + stringValue: logB + schemaUrl: https://opentelemetry.io/schemas/1.6.1 + scope: + name: scopeB + version: v0.1.0 diff --git a/connector/routingconnector/testdata/logs/resource_context/each_matches_one/config.yaml b/connector/routingconnector/testdata/logs/resource_context/each_matches_one/config.yaml new file mode 100644 index 000000000000..98382e3a56a9 --- /dev/null +++ b/connector/routingconnector/testdata/logs/resource_context/each_matches_one/config.yaml @@ -0,0 +1,10 @@ +routing: + default_pipelines: + - logs/default + table: + - condition: attributes["resourceName"] == "resourceB" + pipelines: + - logs/0 + - condition: attributes["resourceName"] == "resourceA" + pipelines: + - logs/1 diff --git a/connector/routingconnector/testdata/logs/resource_context/each_matches_one/input.yaml b/connector/routingconnector/testdata/logs/resource_context/each_matches_one/input.yaml new file mode 100644 index 000000000000..63c6eada6cf9 --- /dev/null +++ b/connector/routingconnector/testdata/logs/resource_context/each_matches_one/input.yaml @@ -0,0 +1,141 @@ +resourceLogs: + - resource: + attributes: + - key: resourceName + value: + stringValue: resourceA + - key: resourceNameAgain + value: + stringValue: resourceA + schemaUrl: https://opentelemetry.io/schemas/1.6.1 + scopeLogs: + - attributes: + - key: scopeName + value: + stringValue: scopeA + - key: scopeNameAgain + value: + stringValue: scopeA + logRecords: + - attributes: + - key: logName + value: + stringValue: logA + - key: logNameAgain + value: + stringValue: logA + body: + stringValue: logA + - attributes: + - key: logName + value: + stringValue: logB + - key: logNameAgain + value: + stringValue: logB + body: + stringValue: logB + schemaUrl: https://opentelemetry.io/schemas/1.6.1 + scope: + name: scopeA + version: v0.1.0 + - attributes: + - key: scopeName + value: + stringValue: scopeB + - key: scopeNameAgain + value: + stringValue: scopeB + logRecords: + - attributes: + - key: logName + value: + stringValue: logA + - key: logNameAgain + value: + stringValue: logA + body: + stringValue: logA + - attributes: + - key: logName + value: + stringValue: logB + - key: logNameAgain + value: + stringValue: logB + body: + stringValue: logB + schemaUrl: https://opentelemetry.io/schemas/1.6.1 + scope: + name: scopeB + version: v0.1.0 + - resource: + attributes: + - key: resourceName + value: + stringValue: resourceB + - key: resourceNameAgain + value: + stringValue: resourceB + schemaUrl: https://opentelemetry.io/schemas/1.6.1 + scopeLogs: + - attributes: + - key: scopeName + value: + stringValue: scopeA + - key: scopeNameAgain + value: + stringValue: scopeA + logRecords: + - attributes: + - key: logName + value: + stringValue: logA + - key: logNameAgain + value: + stringValue: logA + body: + stringValue: logA + - attributes: + - key: logName + value: + stringValue: logB + - key: logNameAgain + value: + stringValue: logB + body: + stringValue: logB + schemaUrl: https://opentelemetry.io/schemas/1.6.1 + scope: + name: scopeA + version: v0.1.0 + - attributes: + - key: scopeName + value: + stringValue: scopeB + - key: scopeNameAgain + value: + stringValue: scopeB + logRecords: + - attributes: + - key: logName + value: + stringValue: logA + - key: logNameAgain + value: + stringValue: logA + body: + stringValue: logA + - attributes: + - key: logName + value: + stringValue: logB + - key: logNameAgain + value: + stringValue: logB + body: + stringValue: logB + schemaUrl: https://opentelemetry.io/schemas/1.6.1 + scope: + name: scopeB + version: v0.1.0 diff --git a/connector/routingconnector/testdata/logs/resource_context/each_matches_one/sink_0.yaml b/connector/routingconnector/testdata/logs/resource_context/each_matches_one/sink_0.yaml new file mode 100644 index 000000000000..28a5a7c8b0f5 --- /dev/null +++ b/connector/routingconnector/testdata/logs/resource_context/each_matches_one/sink_0.yaml @@ -0,0 +1,71 @@ +resourceLogs: + - resource: + attributes: + - key: resourceName + value: + stringValue: resourceB + - key: resourceNameAgain + value: + stringValue: resourceB + schemaUrl: https://opentelemetry.io/schemas/1.6.1 + scopeLogs: + - attributes: + - key: scopeName + value: + stringValue: scopeA + - key: scopeNameAgain + value: + stringValue: scopeA + logRecords: + - attributes: + - key: logName + value: + stringValue: logA + - key: logNameAgain + value: + stringValue: logA + body: + stringValue: logA + - attributes: + - key: logName + value: + stringValue: logB + - key: logNameAgain + value: + stringValue: logB + body: + stringValue: logB + schemaUrl: https://opentelemetry.io/schemas/1.6.1 + scope: + name: scopeA + version: v0.1.0 + - attributes: + - key: scopeName + value: + stringValue: scopeB + - key: scopeNameAgain + value: + stringValue: scopeB + logRecords: + - attributes: + - key: logName + value: + stringValue: logA + - key: logNameAgain + value: + stringValue: logA + body: + stringValue: logA + - attributes: + - key: logName + value: + stringValue: logB + - key: logNameAgain + value: + stringValue: logB + body: + stringValue: logB + schemaUrl: https://opentelemetry.io/schemas/1.6.1 + scope: + name: scopeB + version: v0.1.0 diff --git a/connector/routingconnector/testdata/logs/resource_context/each_matches_one/sink_1.yaml b/connector/routingconnector/testdata/logs/resource_context/each_matches_one/sink_1.yaml new file mode 100644 index 000000000000..ba494d3e311d --- /dev/null +++ b/connector/routingconnector/testdata/logs/resource_context/each_matches_one/sink_1.yaml @@ -0,0 +1,71 @@ +resourceLogs: + - resource: + attributes: + - key: resourceName + value: + stringValue: resourceA + - key: resourceNameAgain + value: + stringValue: resourceA + schemaUrl: https://opentelemetry.io/schemas/1.6.1 + scopeLogs: + - attributes: + - key: scopeName + value: + stringValue: scopeA + - key: scopeNameAgain + value: + stringValue: scopeA + logRecords: + - attributes: + - key: logName + value: + stringValue: logA + - key: logNameAgain + value: + stringValue: logA + body: + stringValue: logA + - attributes: + - key: logName + value: + stringValue: logB + - key: logNameAgain + value: + stringValue: logB + body: + stringValue: logB + schemaUrl: https://opentelemetry.io/schemas/1.6.1 + scope: + name: scopeA + version: v0.1.0 + - attributes: + - key: scopeName + value: + stringValue: scopeB + - key: scopeNameAgain + value: + stringValue: scopeB + logRecords: + - attributes: + - key: logName + value: + stringValue: logA + - key: logNameAgain + value: + stringValue: logA + body: + stringValue: logA + - attributes: + - key: logName + value: + stringValue: logB + - key: logNameAgain + value: + stringValue: logB + body: + stringValue: logB + schemaUrl: https://opentelemetry.io/schemas/1.6.1 + scope: + name: scopeB + version: v0.1.0 \ No newline at end of file diff --git a/connector/routingconnector/testdata/logs/resource_context/match_none_with_default/config.yaml b/connector/routingconnector/testdata/logs/resource_context/match_none_with_default/config.yaml new file mode 100644 index 000000000000..5988ac82a9ad --- /dev/null +++ b/connector/routingconnector/testdata/logs/resource_context/match_none_with_default/config.yaml @@ -0,0 +1,10 @@ +routing: + default_pipelines: + - logs/default + table: + - condition: attributes["resourceName"] == "resourceX" + pipelines: + - logs/0 + - condition: attributes["resourceName"] == "resourceY" + pipelines: + - logs/1 diff --git a/connector/routingconnector/testdata/logs/resource_context/match_none_with_default/input.yaml b/connector/routingconnector/testdata/logs/resource_context/match_none_with_default/input.yaml new file mode 100644 index 000000000000..63c6eada6cf9 --- /dev/null +++ b/connector/routingconnector/testdata/logs/resource_context/match_none_with_default/input.yaml @@ -0,0 +1,141 @@ +resourceLogs: + - resource: + attributes: + - key: resourceName + value: + stringValue: resourceA + - key: resourceNameAgain + value: + stringValue: resourceA + schemaUrl: https://opentelemetry.io/schemas/1.6.1 + scopeLogs: + - attributes: + - key: scopeName + value: + stringValue: scopeA + - key: scopeNameAgain + value: + stringValue: scopeA + logRecords: + - attributes: + - key: logName + value: + stringValue: logA + - key: logNameAgain + value: + stringValue: logA + body: + stringValue: logA + - attributes: + - key: logName + value: + stringValue: logB + - key: logNameAgain + value: + stringValue: logB + body: + stringValue: logB + schemaUrl: https://opentelemetry.io/schemas/1.6.1 + scope: + name: scopeA + version: v0.1.0 + - attributes: + - key: scopeName + value: + stringValue: scopeB + - key: scopeNameAgain + value: + stringValue: scopeB + logRecords: + - attributes: + - key: logName + value: + stringValue: logA + - key: logNameAgain + value: + stringValue: logA + body: + stringValue: logA + - attributes: + - key: logName + value: + stringValue: logB + - key: logNameAgain + value: + stringValue: logB + body: + stringValue: logB + schemaUrl: https://opentelemetry.io/schemas/1.6.1 + scope: + name: scopeB + version: v0.1.0 + - resource: + attributes: + - key: resourceName + value: + stringValue: resourceB + - key: resourceNameAgain + value: + stringValue: resourceB + schemaUrl: https://opentelemetry.io/schemas/1.6.1 + scopeLogs: + - attributes: + - key: scopeName + value: + stringValue: scopeA + - key: scopeNameAgain + value: + stringValue: scopeA + logRecords: + - attributes: + - key: logName + value: + stringValue: logA + - key: logNameAgain + value: + stringValue: logA + body: + stringValue: logA + - attributes: + - key: logName + value: + stringValue: logB + - key: logNameAgain + value: + stringValue: logB + body: + stringValue: logB + schemaUrl: https://opentelemetry.io/schemas/1.6.1 + scope: + name: scopeA + version: v0.1.0 + - attributes: + - key: scopeName + value: + stringValue: scopeB + - key: scopeNameAgain + value: + stringValue: scopeB + logRecords: + - attributes: + - key: logName + value: + stringValue: logA + - key: logNameAgain + value: + stringValue: logA + body: + stringValue: logA + - attributes: + - key: logName + value: + stringValue: logB + - key: logNameAgain + value: + stringValue: logB + body: + stringValue: logB + schemaUrl: https://opentelemetry.io/schemas/1.6.1 + scope: + name: scopeB + version: v0.1.0 diff --git a/connector/routingconnector/testdata/logs/resource_context/match_none_with_default/sink_default.yaml b/connector/routingconnector/testdata/logs/resource_context/match_none_with_default/sink_default.yaml new file mode 100644 index 000000000000..63c6eada6cf9 --- /dev/null +++ b/connector/routingconnector/testdata/logs/resource_context/match_none_with_default/sink_default.yaml @@ -0,0 +1,141 @@ +resourceLogs: + - resource: + attributes: + - key: resourceName + value: + stringValue: resourceA + - key: resourceNameAgain + value: + stringValue: resourceA + schemaUrl: https://opentelemetry.io/schemas/1.6.1 + scopeLogs: + - attributes: + - key: scopeName + value: + stringValue: scopeA + - key: scopeNameAgain + value: + stringValue: scopeA + logRecords: + - attributes: + - key: logName + value: + stringValue: logA + - key: logNameAgain + value: + stringValue: logA + body: + stringValue: logA + - attributes: + - key: logName + value: + stringValue: logB + - key: logNameAgain + value: + stringValue: logB + body: + stringValue: logB + schemaUrl: https://opentelemetry.io/schemas/1.6.1 + scope: + name: scopeA + version: v0.1.0 + - attributes: + - key: scopeName + value: + stringValue: scopeB + - key: scopeNameAgain + value: + stringValue: scopeB + logRecords: + - attributes: + - key: logName + value: + stringValue: logA + - key: logNameAgain + value: + stringValue: logA + body: + stringValue: logA + - attributes: + - key: logName + value: + stringValue: logB + - key: logNameAgain + value: + stringValue: logB + body: + stringValue: logB + schemaUrl: https://opentelemetry.io/schemas/1.6.1 + scope: + name: scopeB + version: v0.1.0 + - resource: + attributes: + - key: resourceName + value: + stringValue: resourceB + - key: resourceNameAgain + value: + stringValue: resourceB + schemaUrl: https://opentelemetry.io/schemas/1.6.1 + scopeLogs: + - attributes: + - key: scopeName + value: + stringValue: scopeA + - key: scopeNameAgain + value: + stringValue: scopeA + logRecords: + - attributes: + - key: logName + value: + stringValue: logA + - key: logNameAgain + value: + stringValue: logA + body: + stringValue: logA + - attributes: + - key: logName + value: + stringValue: logB + - key: logNameAgain + value: + stringValue: logB + body: + stringValue: logB + schemaUrl: https://opentelemetry.io/schemas/1.6.1 + scope: + name: scopeA + version: v0.1.0 + - attributes: + - key: scopeName + value: + stringValue: scopeB + - key: scopeNameAgain + value: + stringValue: scopeB + logRecords: + - attributes: + - key: logName + value: + stringValue: logA + - key: logNameAgain + value: + stringValue: logA + body: + stringValue: logA + - attributes: + - key: logName + value: + stringValue: logB + - key: logNameAgain + value: + stringValue: logB + body: + stringValue: logB + schemaUrl: https://opentelemetry.io/schemas/1.6.1 + scope: + name: scopeB + version: v0.1.0 diff --git a/connector/routingconnector/testdata/logs/resource_context/match_none_without_default/config.yaml b/connector/routingconnector/testdata/logs/resource_context/match_none_without_default/config.yaml new file mode 100644 index 000000000000..36054006adea --- /dev/null +++ b/connector/routingconnector/testdata/logs/resource_context/match_none_without_default/config.yaml @@ -0,0 +1,10 @@ +routing: + match_once: true + # no default pipelines + table: + - condition: attributes["resourceName"] == "resourceX" + pipelines: + - logs/0 + - condition: attributes["resourceName"] == "resourceY" + pipelines: + - logs/1 diff --git a/connector/routingconnector/testdata/logs/resource_context/match_none_without_default/input.yaml b/connector/routingconnector/testdata/logs/resource_context/match_none_without_default/input.yaml new file mode 100644 index 000000000000..63c6eada6cf9 --- /dev/null +++ b/connector/routingconnector/testdata/logs/resource_context/match_none_without_default/input.yaml @@ -0,0 +1,141 @@ +resourceLogs: + - resource: + attributes: + - key: resourceName + value: + stringValue: resourceA + - key: resourceNameAgain + value: + stringValue: resourceA + schemaUrl: https://opentelemetry.io/schemas/1.6.1 + scopeLogs: + - attributes: + - key: scopeName + value: + stringValue: scopeA + - key: scopeNameAgain + value: + stringValue: scopeA + logRecords: + - attributes: + - key: logName + value: + stringValue: logA + - key: logNameAgain + value: + stringValue: logA + body: + stringValue: logA + - attributes: + - key: logName + value: + stringValue: logB + - key: logNameAgain + value: + stringValue: logB + body: + stringValue: logB + schemaUrl: https://opentelemetry.io/schemas/1.6.1 + scope: + name: scopeA + version: v0.1.0 + - attributes: + - key: scopeName + value: + stringValue: scopeB + - key: scopeNameAgain + value: + stringValue: scopeB + logRecords: + - attributes: + - key: logName + value: + stringValue: logA + - key: logNameAgain + value: + stringValue: logA + body: + stringValue: logA + - attributes: + - key: logName + value: + stringValue: logB + - key: logNameAgain + value: + stringValue: logB + body: + stringValue: logB + schemaUrl: https://opentelemetry.io/schemas/1.6.1 + scope: + name: scopeB + version: v0.1.0 + - resource: + attributes: + - key: resourceName + value: + stringValue: resourceB + - key: resourceNameAgain + value: + stringValue: resourceB + schemaUrl: https://opentelemetry.io/schemas/1.6.1 + scopeLogs: + - attributes: + - key: scopeName + value: + stringValue: scopeA + - key: scopeNameAgain + value: + stringValue: scopeA + logRecords: + - attributes: + - key: logName + value: + stringValue: logA + - key: logNameAgain + value: + stringValue: logA + body: + stringValue: logA + - attributes: + - key: logName + value: + stringValue: logB + - key: logNameAgain + value: + stringValue: logB + body: + stringValue: logB + schemaUrl: https://opentelemetry.io/schemas/1.6.1 + scope: + name: scopeA + version: v0.1.0 + - attributes: + - key: scopeName + value: + stringValue: scopeB + - key: scopeNameAgain + value: + stringValue: scopeB + logRecords: + - attributes: + - key: logName + value: + stringValue: logA + - key: logNameAgain + value: + stringValue: logA + body: + stringValue: logA + - attributes: + - key: logName + value: + stringValue: logB + - key: logNameAgain + value: + stringValue: logB + body: + stringValue: logB + schemaUrl: https://opentelemetry.io/schemas/1.6.1 + scope: + name: scopeB + version: v0.1.0