diff --git a/install/installer/pkg/common/common.go b/install/installer/pkg/common/common.go index 88b21307684d6d..191f14a3ffa70f 100644 --- a/install/installer/pkg/common/common.go +++ b/install/installer/pkg/common/common.go @@ -62,7 +62,33 @@ func DefaultEnv(cfg *config.Config) []corev1.EnvVar { } } -func TracingEnv(context *RenderContext) (res []corev1.EnvVar) { +func WorkspaceTracingEnv(context *RenderContext) (res []corev1.EnvVar) { + var tracing *experimental.Tracing + + _ = context.WithExperimental(func(cfg *experimental.Config) error { + if cfg.Workspace != nil { + tracing = cfg.Workspace.Tracing + } + return nil + }) + + return tracingEnv(context, tracing) +} + +func WebappTracingEnv(context *RenderContext) (res []corev1.EnvVar) { + var tracing *experimental.Tracing + + _ = context.WithExperimental(func(cfg *experimental.Config) error { + if cfg.WebApp != nil { + tracing = cfg.WebApp.Tracing + } + return nil + }) + + return tracingEnv(context, tracing) +} + +func tracingEnv(context *RenderContext, tracing *experimental.Tracing) (res []corev1.EnvVar) { if context.Config.Observability.Tracing == nil { res = append(res, corev1.EnvVar{Name: "JAEGER_DISABLED", Value: "true"}) return @@ -81,17 +107,14 @@ func TracingEnv(context *RenderContext) (res []corev1.EnvVar) { samplerType := experimental.TracingSampleTypeConst samplerParam := "1" - _ = context.WithExperimental(func(ucfg *experimental.Config) error { - if ucfg.Workspace != nil && ucfg.Workspace.Tracing != nil { - if ucfg.Workspace.Tracing.SamplerType != nil { - samplerType = *ucfg.Workspace.Tracing.SamplerType - } - if ucfg.Workspace.Tracing.SamplerParam != nil { - samplerParam = strconv.FormatFloat(*ucfg.Workspace.Tracing.SamplerParam, 'f', -1, 64) - } + if tracing != nil { + if tracing.SamplerType != nil { + samplerType = *tracing.SamplerType } - return nil - }) + if tracing.SamplerParam != nil { + samplerParam = strconv.FormatFloat(*tracing.SamplerParam, 'f', -1, 64) + } + } res = append(res, corev1.EnvVar{Name: "JAEGER_SAMPLER_TYPE", Value: string(samplerType)}, diff --git a/install/installer/pkg/components/agent-smith/daemonset.go b/install/installer/pkg/components/agent-smith/daemonset.go index cc7294e0dc991a..b11589b6040aff 100644 --- a/install/installer/pkg/components/agent-smith/daemonset.go +++ b/install/installer/pkg/components/agent-smith/daemonset.go @@ -66,7 +66,7 @@ func daemonset(ctx *common.RenderContext) ([]runtime.Object, error) { }}, Env: common.MergeEnv( common.DefaultEnv(&ctx.Config), - common.TracingEnv(ctx), + common.WorkspaceTracingEnv(ctx), []corev1.EnvVar{{ Name: "NODENAME", ValueFrom: &corev1.EnvVarSource{ diff --git a/install/installer/pkg/components/blobserve/deployment.go b/install/installer/pkg/components/blobserve/deployment.go index 1105ffc20e038a..1ab7ab6cb78698 100644 --- a/install/installer/pkg/components/blobserve/deployment.go +++ b/install/installer/pkg/components/blobserve/deployment.go @@ -112,7 +112,7 @@ func deployment(ctx *common.RenderContext) ([]runtime.Object, error) { }, Env: common.MergeEnv( common.DefaultEnv(&ctx.Config), - common.TracingEnv(ctx), + common.WorkspaceTracingEnv(ctx), ), VolumeMounts: []corev1.VolumeMount{{ Name: "config", diff --git a/install/installer/pkg/components/content-service/deployment.go b/install/installer/pkg/components/content-service/deployment.go index 8ed2729cdc48e0..1b4516da8e0653 100644 --- a/install/installer/pkg/components/content-service/deployment.go +++ b/install/installer/pkg/components/content-service/deployment.go @@ -67,7 +67,7 @@ func deployment(ctx *common.RenderContext) ([]runtime.Object, error) { }, Env: common.MergeEnv( common.DefaultEnv(&ctx.Config), - common.TracingEnv(ctx), + common.WorkspaceTracingEnv(ctx), []corev1.EnvVar{{ Name: "GRPC_GO_RETRY", Value: "on", diff --git a/install/installer/pkg/components/image-builder-mk3/deployment.go b/install/installer/pkg/components/image-builder-mk3/deployment.go index 7e66cbd27a6309..ea12aaf97827dc 100644 --- a/install/installer/pkg/components/image-builder-mk3/deployment.go +++ b/install/installer/pkg/components/image-builder-mk3/deployment.go @@ -151,7 +151,7 @@ func deployment(ctx *common.RenderContext) ([]runtime.Object, error) { }, Env: common.MergeEnv( common.DefaultEnv(&ctx.Config), - common.TracingEnv(ctx), + common.WorkspaceTracingEnv(ctx), ), Resources: common.ResourceRequirements(ctx, Component, Component, corev1.ResourceRequirements{ Requests: corev1.ResourceList{ diff --git a/install/installer/pkg/components/registry-facade/daemonset.go b/install/installer/pkg/components/registry-facade/daemonset.go index 76c55f68a87da8..3cd1f8cf0abb4f 100644 --- a/install/installer/pkg/components/registry-facade/daemonset.go +++ b/install/installer/pkg/components/registry-facade/daemonset.go @@ -232,7 +232,7 @@ func daemonset(ctx *common.RenderContext) ([]runtime.Object, error) { }, Env: common.MergeEnv( common.DefaultEnv(&ctx.Config), - common.TracingEnv(ctx), + common.WorkspaceTracingEnv(ctx), []corev1.EnvVar{ { Name: "GRPC_GO_RETRY", diff --git a/install/installer/pkg/components/server/deployment.go b/install/installer/pkg/components/server/deployment.go index 1b6c67b291bdbf..e625877902ffeb 100644 --- a/install/installer/pkg/components/server/deployment.go +++ b/install/installer/pkg/components/server/deployment.go @@ -74,7 +74,7 @@ func deployment(ctx *common.RenderContext) ([]runtime.Object, error) { env := common.MergeEnv( common.DefaultEnv(&ctx.Config), common.DatabaseEnv(&ctx.Config), - common.TracingEnv(ctx), + common.WebappTracingEnv(ctx), common.AnalyticsEnv(&ctx.Config), common.MessageBusEnv(&ctx.Config), []corev1.EnvVar{ diff --git a/install/installer/pkg/components/server/render_test.go b/install/installer/pkg/components/server/render_test.go index d53f1300f0fae2..1233dc66f14fac 100644 --- a/install/installer/pkg/components/server/render_test.go +++ b/install/installer/pkg/components/server/render_test.go @@ -45,13 +45,50 @@ func TestServerDeployment_MountsGithubAppSecret(t *testing.T) { require.Truef(t, foundMount, "failed to find expected volume mount %q on server container", githubAppCertSecret) } +func TestServerDeployment_UsesTracingConfig(t *testing.T) { + ctx := renderContext(t) + + objects, err := deployment(ctx) + require.NoError(t, err) + + require.Len(t, objects, 1, "must render only one object") + + deployment := objects[0].(*appsv1.Deployment) + + serverContainer := deployment.Spec.Template.Spec.Containers[0] + + var envVars = make(map[string]string, len(serverContainer.Env)) + for _, envVar := range serverContainer.Env { + envVars[envVar.Name] = envVar.Value + } + + actualSamplerType := envVars["JAEGER_SAMPLER_TYPE"] + actualSamplerParam := envVars["JAEGER_SAMPLER_PARAM"] + + require.Equal(t, "probabilistic", actualSamplerType) + require.Equal(t, "12.5", actualSamplerParam) +} + func renderContext(t *testing.T) *common.RenderContext { + var samplerType experimental.TracingSampleType = "probabilistic" + ctx, err := common.NewRenderContext(config.Config{ Database: config.Database{ InCluster: pointer.Bool(true), }, + Observability: config.Observability{ + LogLevel: config.LogLevelInfo, + Tracing: &config.Tracing{ + Endpoint: pointer.String("some-endpoint"), + AgentHost: pointer.String("some-agent-host"), + }, + }, Experimental: &experimental.Config{ WebApp: &experimental.WebAppConfig{ + Tracing: &experimental.Tracing{ + SamplerType: &samplerType, + SamplerParam: pointer.Float64(12.5), + }, Server: &experimental.ServerConfig{ GithubApp: &experimental.GithubApp{ AppId: 0, diff --git a/install/installer/pkg/components/ws-daemon/daemonset.go b/install/installer/pkg/components/ws-daemon/daemonset.go index efca52faf777aa..260d9d6bdf0be0 100644 --- a/install/installer/pkg/components/ws-daemon/daemonset.go +++ b/install/installer/pkg/components/ws-daemon/daemonset.go @@ -203,7 +203,7 @@ fi }}, Env: common.MergeEnv( common.DefaultEnv(&cfg), - common.TracingEnv(ctx), + common.WorkspaceTracingEnv(ctx), []corev1.EnvVar{{ Name: "NODENAME", ValueFrom: &corev1.EnvVarSource{ diff --git a/install/installer/pkg/components/ws-manager-bridge/deployment.go b/install/installer/pkg/components/ws-manager-bridge/deployment.go index be39cfaf276ef5..f197d6adcaec87 100644 --- a/install/installer/pkg/components/ws-manager-bridge/deployment.go +++ b/install/installer/pkg/components/ws-manager-bridge/deployment.go @@ -123,7 +123,7 @@ func deployment(ctx *common.RenderContext) ([]runtime.Object, error) { }, Env: common.MergeEnv( common.DefaultEnv(&ctx.Config), - common.TracingEnv(ctx), + common.WorkspaceTracingEnv(ctx), common.AnalyticsEnv(&ctx.Config), common.MessageBusEnv(&ctx.Config), common.DatabaseEnv(&ctx.Config), diff --git a/install/installer/pkg/components/ws-manager/deployment.go b/install/installer/pkg/components/ws-manager/deployment.go index 976a33852cb0a0..a56757d9295528 100644 --- a/install/installer/pkg/components/ws-manager/deployment.go +++ b/install/installer/pkg/components/ws-manager/deployment.go @@ -54,7 +54,7 @@ func deployment(ctx *common.RenderContext) ([]runtime.Object, error) { }, Env: common.MergeEnv( common.DefaultEnv(&ctx.Config), - common.TracingEnv(ctx), + common.WorkspaceTracingEnv(ctx), []corev1.EnvVar{{Name: "GRPC_GO_RETRY", Value: "on"}}, ), VolumeMounts: []corev1.VolumeMount{ diff --git a/install/installer/pkg/components/ws-proxy/deployment.go b/install/installer/pkg/components/ws-proxy/deployment.go index 50fc3b31ff8458..dc72a20acbc06a 100644 --- a/install/installer/pkg/components/ws-proxy/deployment.go +++ b/install/installer/pkg/components/ws-proxy/deployment.go @@ -138,7 +138,7 @@ func deployment(ctx *common.RenderContext) ([]runtime.Object, error) { }, Env: common.MergeEnv( common.DefaultEnv(&ctx.Config), - common.TracingEnv(ctx), + common.WorkspaceTracingEnv(ctx), ), ReadinessProbe: &corev1.Probe{ InitialDelaySeconds: int32(2), diff --git a/install/installer/pkg/config/v1/experimental/experimental.go b/install/installer/pkg/config/v1/experimental/experimental.go index a27e6b41ce5c99..215bbb81a383f7 100644 --- a/install/installer/pkg/config/v1/experimental/experimental.go +++ b/install/installer/pkg/config/v1/experimental/experimental.go @@ -99,6 +99,7 @@ type WebAppConfig struct { Server *ServerConfig `json:"server,omitempty"` ProxyConfig *ProxyConfig `json:"proxy,omitempty"` WorkspaceManagerBridge *WsManagerBridgeConfig `json:"wsManagerBridge,omitempty"` + Tracing *Tracing `json:"tracing,omitempty"` UsePodAntiAffinity bool `json:"usePodAntiAffinity"` DisableMigration bool `json:"disableMigration"` }