You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by pc...@apache.org on 2024/04/01 14:38:00 UTC

(camel-k) branch main updated: feat(traits): telemetry refactoring

This is an automated email from the ASF dual-hosted git repository.

pcongiusti pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-k.git


The following commit(s) were added to refs/heads/main by this push:
     new ea9e5fb69 feat(traits): telemetry refactoring
ea9e5fb69 is described below

commit ea9e5fb691e14df4cf94964f7a26bd20b88bdbc0
Author: Pasquale Congiusti <pa...@gmail.com>
AuthorDate: Fri Mar 22 13:23:32 2024 +0100

    feat(traits): telemetry refactoring
---
 addons/telemetry/telemetry.go      | 50 +++++++++++++++++++++++++++++++-------
 addons/telemetry/telemetry_test.go | 30 +++++++++++++++--------
 2 files changed, 61 insertions(+), 19 deletions(-)

diff --git a/addons/telemetry/telemetry.go b/addons/telemetry/telemetry.go
index e77f8b97b..ec7f7c858 100644
--- a/addons/telemetry/telemetry.go
+++ b/addons/telemetry/telemetry.go
@@ -18,6 +18,8 @@ limitations under the License.
 package telemetry
 
 import (
+	"fmt"
+
 	"k8s.io/utils/pointer"
 
 	corev1 "k8s.io/api/core/v1"
@@ -130,30 +132,63 @@ func (t *telemetryTrait) Configure(e *trait.Environment) (bool, *trait.TraitCond
 func (t *telemetryTrait) Apply(e *trait.Environment) error {
 	util.StringSliceUniqueAdd(&e.Integration.Status.Capabilities, v1.CapabilityTelemetry)
 
+	if e.CamelCatalog.Runtime.Capabilities["telemetry"].RuntimeProperties != nil {
+		t.setCatalogConfiguration(e)
+	} else {
+		t.setProperties(e)
+	}
+
+	return nil
+}
+
+func (t *telemetryTrait) setCatalogConfiguration(e *trait.Environment) {
+	if e.ApplicationProperties == nil {
+		e.ApplicationProperties = make(map[string]string)
+	}
+
+	if t.Endpoint != "" {
+		e.ApplicationProperties["camel.k.telemetry.endpoint"] = t.Endpoint
+	}
+	if t.ServiceName != "" {
+		e.ApplicationProperties["camel.k.telemetry.serviceName"] = fmt.Sprintf("service.name=%s", t.ServiceName)
+	}
+	if t.Sampler != "" {
+		e.ApplicationProperties["camel.k.telemetry.sampler"] = t.Sampler
+	}
+	if t.SamplerRatio != "" {
+		e.ApplicationProperties["camel.k.telemetry.samplerRatio"] = t.SamplerRatio
+	}
+	if pointer.BoolDeref(t.SamplerParentBased, true) {
+		e.ApplicationProperties["camel.k.telemetry.samplerParentBased"] = "true"
+	} else {
+		e.ApplicationProperties["camel.k.telemetry.samplerParentBased"] = "false"
+	}
+
+	for _, cp := range e.CamelCatalog.Runtime.Capabilities["telemetry"].RuntimeProperties {
+		e.ApplicationProperties[trait.CapabilityPropertyKey(cp.Key, e.ApplicationProperties)] = cp.Value
+	}
+}
+
+// Deprecated: to be removed in future release in favor of func setCatalogConfiguration().
+func (t *telemetryTrait) setProperties(e *trait.Environment) {
 	if e.CamelCatalog != nil {
 		provider := e.CamelCatalog.CamelCatalogSpec.Runtime.Provider
 		properties := telemetryProperties[provider]
-
 		if appPropEnabled := properties[propEnabled]; appPropEnabled != "" {
 			e.ApplicationProperties[appPropEnabled] = "true"
 		}
-
 		if appPropEndpoint := properties[propEndpoint]; appPropEndpoint != "" && t.Endpoint != "" {
 			e.ApplicationProperties[appPropEndpoint] = t.Endpoint
 		}
-
 		if appPropServiceName := properties[propServiceName]; appPropServiceName != "" && t.ServiceName != "" {
 			e.ApplicationProperties[appPropServiceName] = "service.name=" + t.ServiceName
 		}
-
 		if appPropSampler := properties[propSampler]; appPropSampler != "" && t.Sampler != "" {
 			e.ApplicationProperties[appPropSampler] = t.Sampler
 		}
-
 		if appPropSamplerRatio := properties[propSamplerRatio]; appPropSamplerRatio != "" && t.SamplerRatio != "" {
 			e.ApplicationProperties[appPropSamplerRatio] = t.SamplerRatio
 		}
-
 		if appPropSamplerParentBased := properties[propSamplerParentBased]; appPropSamplerParentBased != "" {
 			if pointer.BoolDeref(t.SamplerParentBased, true) {
 				e.ApplicationProperties[appPropSamplerParentBased] = "true"
@@ -161,8 +196,5 @@ func (t *telemetryTrait) Apply(e *trait.Environment) error {
 				e.ApplicationProperties[appPropSamplerParentBased] = "false"
 			}
 		}
-
 	}
-
-	return nil
 }
diff --git a/addons/telemetry/telemetry_test.go b/addons/telemetry/telemetry_test.go
index 3f4428b46..82820b4ff 100644
--- a/addons/telemetry/telemetry_test.go
+++ b/addons/telemetry/telemetry_test.go
@@ -46,11 +46,16 @@ func TestTelemetryTraitOnDefaultQuarkus(t *testing.T) {
 	require.NoError(t, err)
 
 	assert.Empty(t, e.ApplicationProperties["quarkus.opentelemetry.enabled"])
-	assert.Equal(t, "http://endpoint3", e.ApplicationProperties["quarkus.opentelemetry.tracer.exporter.otlp.endpoint"])
-	assert.Equal(t, "service.name=test", e.ApplicationProperties["quarkus.opentelemetry.tracer.resource-attributes"])
-	assert.Equal(t, "on", e.ApplicationProperties["quarkus.opentelemetry.tracer.sampler"])
-	assert.Empty(t, e.ApplicationProperties["quarkus.opentelemetry.tracer.sampler.ratio"])
-	assert.Equal(t, "true", e.ApplicationProperties["quarkus.opentelemetry.tracer.sampler.parent-based"])
+	assert.Equal(t, "http://endpoint3", e.ApplicationProperties["camel.k.telemetry.endpoint"])
+	assert.Equal(t, "service.name=test", e.ApplicationProperties["camel.k.telemetry.serviceName"])
+	assert.Equal(t, "on", e.ApplicationProperties["camel.k.telemetry.sampler"])
+	assert.Equal(t, "", e.ApplicationProperties["camel.k.telemetry.samplerRatio"])
+	assert.Equal(t, "true", e.ApplicationProperties["camel.k.telemetry.samplerParentBased"])
+	assert.Equal(t, "${camel.k.telemetry.endpoint}", e.ApplicationProperties["quarkus.opentelemetry.tracer.exporter.otlp.endpoint"])
+	assert.Equal(t, "${camel.k.telemetry.serviceName}", e.ApplicationProperties["quarkus.opentelemetry.tracer.resource-attributes"])
+	assert.Equal(t, "${camel.k.telemetry.sampler}", e.ApplicationProperties["quarkus.opentelemetry.tracer.sampler"])
+	assert.Equal(t, "${camel.k.telemetry.samplerRatio}", e.ApplicationProperties["quarkus.opentelemetry.tracer.sampler.ratio"])
+	assert.Equal(t, "${camel.k.telemetry.samplerParentBased}", e.ApplicationProperties["quarkus.opentelemetry.tracer.sampler.parent-based"])
 }
 
 func TestTelemetryTraitWithValues(t *testing.T) {
@@ -72,11 +77,16 @@ func TestTelemetryTraitWithValues(t *testing.T) {
 	require.NoError(t, err)
 
 	assert.Empty(t, e.ApplicationProperties["quarkus.opentelemetry.enabled"])
-	assert.Equal(t, "http://endpoint3", e.ApplicationProperties["quarkus.opentelemetry.tracer.exporter.otlp.endpoint"])
-	assert.Equal(t, "service.name=Test", e.ApplicationProperties["quarkus.opentelemetry.tracer.resource-attributes"])
-	assert.Equal(t, "ratio", e.ApplicationProperties["quarkus.opentelemetry.tracer.sampler"])
-	assert.Equal(t, "0.001", e.ApplicationProperties["quarkus.opentelemetry.tracer.sampler.ratio"])
-	assert.Equal(t, "false", e.ApplicationProperties["quarkus.opentelemetry.tracer.sampler.parent-based"])
+	assert.Equal(t, "http://endpoint3", e.ApplicationProperties["camel.k.telemetry.endpoint"])
+	assert.Equal(t, "service.name=Test", e.ApplicationProperties["camel.k.telemetry.serviceName"])
+	assert.Equal(t, "ratio", e.ApplicationProperties["camel.k.telemetry.sampler"])
+	assert.Equal(t, "0.001", e.ApplicationProperties["camel.k.telemetry.samplerRatio"])
+	assert.Equal(t, "false", e.ApplicationProperties["camel.k.telemetry.samplerParentBased"])
+	assert.Equal(t, "${camel.k.telemetry.endpoint}", e.ApplicationProperties["quarkus.opentelemetry.tracer.exporter.otlp.endpoint"])
+	assert.Equal(t, "${camel.k.telemetry.serviceName}", e.ApplicationProperties["quarkus.opentelemetry.tracer.resource-attributes"])
+	assert.Equal(t, "${camel.k.telemetry.sampler}", e.ApplicationProperties["quarkus.opentelemetry.tracer.sampler"])
+	assert.Equal(t, "${camel.k.telemetry.samplerRatio}", e.ApplicationProperties["quarkus.opentelemetry.tracer.sampler.ratio"])
+	assert.Equal(t, "${camel.k.telemetry.samplerParentBased}", e.ApplicationProperties["quarkus.opentelemetry.tracer.sampler.parent-based"])
 }
 
 func createEnvironment(t *testing.T, catalogGen func() (*camel.RuntimeCatalog, error)) *trait.Environment {