Fix: logs pipelines: ignore coalesce op when generating nil check for add value expressions (#4305)

* chore: panic if agent config recommendation can't be generated

* chore: add case with coalesce op in field nil check generation tests

* fix: ignore expr ast member nodes that contain coalesce op in them
This commit is contained in:
Raj Kamal Singh 2023-12-29 18:21:01 +05:30 committed by GitHub
parent e792c48f6d
commit 86ff865842
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 17 additions and 2 deletions

View File

@ -352,6 +352,13 @@ type logFieldsInExprExtractor struct {
func (v *logFieldsInExprExtractor) Visit(node *ast.Node) {
if n, ok := (*node).(*ast.MemberNode); ok {
memberRef := n.String()
// coalesce ops end up as MemberNode right now for some reason.
// ignore such member nodes.
if strings.Contains(memberRef, "??") {
return
}
if strings.HasPrefix(memberRef, "attributes") || strings.HasPrefix(memberRef, "resource") {
v.referencedFields = append(v.referencedFields, memberRef)
}

View File

@ -698,6 +698,13 @@ func TestMembershipOpInProcessorFieldExpressions(t *testing.T) {
Name: "add3",
Field: `attributes["attrs.test.value"]`,
Value: `EXPR(attributes.test?.value)`,
}, {
ID: "add4",
Type: "add",
Enabled: true,
Name: "add4",
Field: `attributes["attrs.test.value"]`,
Value: `EXPR((attributes.temp?.request_context?.scraper ?? [nil])[0])`,
},
},
}

View File

@ -4,6 +4,7 @@ import (
"bytes"
"context"
"crypto/sha256"
"fmt"
"sync"
"time"
@ -276,8 +277,8 @@ func (agent *Agent) processStatusUpdate(
func (agent *Agent) updateRemoteConfig(configProvider AgentConfigProvider) bool {
recommendedConfig, confId, err := configProvider.RecommendAgentConfig([]byte(agent.EffectiveConfig))
if err != nil {
zap.S().Errorf("could not generate config recommendation for agent %d: %w", agent.ID, err)
return false
// The server must always recommend a config.
panic(fmt.Errorf("could not generate config recommendation for agent %s: %w", agent.ID, err))
}
cfg := protobufs.AgentRemoteConfig{