From e4263ac0baf275a65c5710af4601014ff060677b Mon Sep 17 00:00:00 2001 From: Andrew Farries Date: Tue, 10 May 2022 08:35:44 +0000 Subject: [PATCH 1/5] Add `tracing` to webapp experimental config --- install/installer/pkg/config/v1/experimental/experimental.go | 1 + 1 file changed, 1 insertion(+) 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"` } From 44830a210e8dc571e5c73968b7e6d8e72d711497 Mon Sep 17 00:00:00 2001 From: Andrew Farries Date: Tue, 10 May 2022 08:36:27 +0000 Subject: [PATCH 2/5] Rename `TracingEnv` to `WorkspaceTracingEnv` --- install/installer/pkg/common/common.go | 2 +- install/installer/pkg/components/agent-smith/daemonset.go | 2 +- install/installer/pkg/components/blobserve/deployment.go | 2 +- install/installer/pkg/components/content-service/deployment.go | 2 +- .../installer/pkg/components/image-builder-mk3/deployment.go | 2 +- install/installer/pkg/components/registry-facade/daemonset.go | 2 +- install/installer/pkg/components/server/deployment.go | 2 +- install/installer/pkg/components/ws-daemon/daemonset.go | 2 +- .../installer/pkg/components/ws-manager-bridge/deployment.go | 2 +- install/installer/pkg/components/ws-manager/deployment.go | 2 +- install/installer/pkg/components/ws-proxy/deployment.go | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/install/installer/pkg/common/common.go b/install/installer/pkg/common/common.go index 88b21307684d6d..abbdff597e03c0 100644 --- a/install/installer/pkg/common/common.go +++ b/install/installer/pkg/common/common.go @@ -62,7 +62,7 @@ func DefaultEnv(cfg *config.Config) []corev1.EnvVar { } } -func TracingEnv(context *RenderContext) (res []corev1.EnvVar) { +func WorkspaceTracingEnv(context *RenderContext) (res []corev1.EnvVar) { if context.Config.Observability.Tracing == nil { res = append(res, corev1.EnvVar{Name: "JAEGER_DISABLED", Value: "true"}) return 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..881f4fd6c21f51 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.WorkspaceTracingEnv(ctx), common.AnalyticsEnv(&ctx.Config), common.MessageBusEnv(&ctx.Config), []corev1.EnvVar{ 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), From c82ae36f3422c9d15e9b5fe11dcc9eba770691f5 Mon Sep 17 00:00:00 2001 From: Andrew Farries Date: Tue, 10 May 2022 10:29:21 +0000 Subject: [PATCH 3/5] Add `WebappTracingEnv` function Define it and WorkspaceTracingEnv in terms of a new `tracingEnv` function. `WorkspaceTracingEnv` and `WebappTracingEnv` pass the `*tracing` argument from the Workspace config and the WebApp config respectively. --- install/installer/pkg/common/common.go | 43 ++++++++++++++++++++------ 1 file changed, 33 insertions(+), 10 deletions(-) diff --git a/install/installer/pkg/common/common.go b/install/installer/pkg/common/common.go index abbdff597e03c0..191f14a3ffa70f 100644 --- a/install/installer/pkg/common/common.go +++ b/install/installer/pkg/common/common.go @@ -63,6 +63,32 @@ func DefaultEnv(cfg *config.Config) []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 WorkspaceTracingEnv(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)}, From c60e08602a0a159b5f1eb1f04ca1e9bc31f685a5 Mon Sep 17 00:00:00 2001 From: Andrew Farries Date: Tue, 10 May 2022 10:29:26 +0000 Subject: [PATCH 4/5] Make server use `WebappTracingEnv` Rather than `WorkspaceTracingEnv`. --- install/installer/pkg/components/server/deployment.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/installer/pkg/components/server/deployment.go b/install/installer/pkg/components/server/deployment.go index 881f4fd6c21f51..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.WorkspaceTracingEnv(ctx), + common.WebappTracingEnv(ctx), common.AnalyticsEnv(&ctx.Config), common.MessageBusEnv(&ctx.Config), []corev1.EnvVar{ From 54231072c9609447113d1821b8cdf6064ff3065c Mon Sep 17 00:00:00 2001 From: Andrew Farries Date: Tue, 10 May 2022 11:16:11 +0000 Subject: [PATCH 5/5] Add test for server deployment tracing config Check that the server deployment uses tracing values defined in `expermental.webapp.tracing`. --- .../pkg/components/server/render_test.go | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) 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,