mirror of
https://git.mirrors.martin98.com/https://github.com/SigNoz/signoz
synced 2025-07-28 18:22:05 +08:00

* feat: get collectorsimulator started and add inmemoryreceiver * feat: add collectorsimulator/inmemoryexporter * feat: add collectorsimulator.SimulateLogsProcessing * chore: clean up collector simulator code a little * chore: update go.sum entries for cors * chore: add collectorsimulator tests to make cmd * chore: move to latest dependency version for collectorsimulator * chore: revert to dependency versions matching signoz-otel-col * chore: cleanup: reorganize collectorsimulator logic * chore: some more cleanup * chore: some more cleanup * chore: some more cleanup * chore: redo go.mod
114 lines
2.9 KiB
Go
114 lines
2.9 KiB
Go
package collectorsimulator
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/knadh/koanf/parsers/yaml"
|
|
"github.com/open-telemetry/opentelemetry-collector-contrib/processor/logstransformprocessor"
|
|
"github.com/stretchr/testify/require"
|
|
"go.opentelemetry.io/collector/pdata/plog"
|
|
"go.opentelemetry.io/collector/processor"
|
|
)
|
|
|
|
func TestLogsProcessingSimulation(t *testing.T) {
|
|
require := require.New(t)
|
|
|
|
inputLogs := []plog.Logs{
|
|
makeTestPlog("test log 1", map[string]string{
|
|
"method": "GET",
|
|
}),
|
|
makeTestPlog("test log 2", map[string]string{
|
|
"method": "POST",
|
|
}),
|
|
}
|
|
|
|
testLogstransformConf1, err := yaml.Parser().Unmarshal([]byte(`
|
|
operators:
|
|
- type: router
|
|
id: router_signoz
|
|
routes:
|
|
- output: add
|
|
expr: attributes.method == "GET"
|
|
default: noop
|
|
- type: add
|
|
id: add
|
|
field: attributes.test
|
|
value: test-value-get
|
|
- type: noop
|
|
id: noop
|
|
`))
|
|
require.Nil(err, "could not unmarshal test logstransform op config")
|
|
testProcessor1 := ProcessorConfig{
|
|
Name: "logstransform/test",
|
|
Config: testLogstransformConf1,
|
|
}
|
|
|
|
testLogstransformConf2, err := yaml.Parser().Unmarshal([]byte(`
|
|
operators:
|
|
- type: router
|
|
id: router_signoz
|
|
routes:
|
|
- output: add
|
|
expr: attributes.method == "POST"
|
|
default: noop
|
|
- type: add
|
|
id: add
|
|
field: attributes.test
|
|
value: test-value-post
|
|
- type: noop
|
|
id: noop
|
|
`))
|
|
require.Nil(err, "could not unmarshal test logstransform op config")
|
|
testProcessor2 := ProcessorConfig{
|
|
Name: "logstransform/test2",
|
|
Config: testLogstransformConf2,
|
|
}
|
|
|
|
processorFactories, err := processor.MakeFactoryMap(
|
|
logstransformprocessor.NewFactory(),
|
|
)
|
|
require.Nil(err, "could not create processors factory map")
|
|
|
|
outputLogs, collectorErrs, apiErr := SimulateLogsProcessing(
|
|
context.Background(),
|
|
processorFactories,
|
|
[]ProcessorConfig{testProcessor1, testProcessor2},
|
|
inputLogs,
|
|
300*time.Millisecond,
|
|
)
|
|
require.Nil(apiErr, apiErr.ToError().Error())
|
|
require.Equal(len(collectorErrs), 0)
|
|
|
|
for _, l := range outputLogs {
|
|
rl := l.ResourceLogs().At(0)
|
|
sl := rl.ScopeLogs().At(0)
|
|
record := sl.LogRecords().At(0)
|
|
method, exists := record.Attributes().Get("method")
|
|
require.True(exists)
|
|
testVal, exists := record.Attributes().Get("test")
|
|
require.True(exists)
|
|
if method.Str() == "GET" {
|
|
require.Equal(testVal.Str(), "test-value-get")
|
|
} else {
|
|
require.Equal(testVal.Str(), "test-value-post")
|
|
}
|
|
}
|
|
}
|
|
|
|
func makeTestPlog(body string, attrsStr map[string]string) plog.Logs {
|
|
pl := plog.NewLogs()
|
|
rl := pl.ResourceLogs().AppendEmpty()
|
|
|
|
scopeLog := rl.ScopeLogs().AppendEmpty()
|
|
slRecord := scopeLog.LogRecords().AppendEmpty()
|
|
slRecord.Body().SetStr(body)
|
|
slAttribs := slRecord.Attributes()
|
|
for k, v := range attrsStr {
|
|
slAttribs.PutStr(k, v)
|
|
}
|
|
|
|
return pl
|
|
}
|