Skip to content

Commit 9c83256

Browse files
committed
Add a scenario for performance benchmarks
1 parent d6e5c40 commit 9c83256

File tree

28 files changed

+1426
-73
lines changed

28 files changed

+1426
-73
lines changed

.github/dependabot.yml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,3 +102,13 @@ updates:
102102
directory: /components/datadog/apps/cws/images/cws-centos7
103103
schedule:
104104
interval: daily
105+
106+
- package-ecosystem: docker
107+
directory: /components/datadog/apps/churn/images/churn
108+
schedule:
109+
interval: daily
110+
111+
- package-ecosystem: gomod
112+
directory: /components/datadog/apps/churn/images/churn
113+
schedule:
114+
interval: daily

.github/workflows/docker-publish.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,8 @@ jobs:
8080
image: cuda-basic
8181
- app: s3-proxy-nginx
8282
image: s3-proxy-nginx
83+
- app: churn
84+
image: churn
8385
steps:
8486
- name: Checkout repository
8587
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0

common/config/environment.go

Lines changed: 81 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -36,36 +36,44 @@ const (
3636
DDInfraInitOnly = "initOnly"
3737

3838
// Agent Namespace
39-
DDAgentDeployParamName = "deploy"
40-
DDAgentDeployWithOperatorParamName = "deployWithOperator"
41-
DDAgentVersionParamName = "version"
42-
DDAgentFlavorParamName = "flavor"
43-
DDAgentPipelineID = "pipeline_id"
44-
DDAgentLocalPackage = "localPackage"
45-
DDAgentLocalChartPath = "localChartPath"
46-
DDAgentCommitSHA = "commit_sha"
47-
DDAgentFullImagePathParamName = "fullImagePath"
48-
DDClusterAgentVersionParamName = "clusterAgentVersion"
49-
DDClusterAgentFullImagePathParamName = "clusterAgentFullImagePath"
50-
DDOperatorVersionParamName = "operatorVersion"
51-
DDOperatorFullImagePathParamName = "operatorFullImagePath"
52-
DDOperatorLocalChartPath = "localChartPath"
53-
DDImagePullRegistryParamName = "imagePullRegistry"
54-
DDImagePullUsernameParamName = "imagePullUsername"
55-
DDImagePullPasswordParamName = "imagePullPassword"
56-
DDAgentAPIKeyParamName = "apiKey"
57-
DDAgentAPPKeyParamName = "appKey"
58-
DDAgentFakeintake = "fakeintake"
59-
DDAgentDualShipping = "dualshipping"
60-
DDAgentFakeintakeStoreType = "fakeintakeStoreType"
61-
DDAGentFakeintakeRetentionPeriod = "fakeintakeRetentionPeriod"
62-
DDAgentSite = "site"
63-
DDAgentMajorVersion = "majorVersion"
64-
DDAgentExtraEnvVars = "extraEnvVars" // extraEnvVars is expected in the format: <key1>=<value1>,<key2>=<value2>,...
65-
DDAgentJMX = "jmx"
66-
DDAgentFIPS = "fips"
67-
DDAgentConfigPathParamName = "configPath"
68-
DDAgentHelmConfig = "helmConfig"
39+
DDAgentDeployParamName = "deploy"
40+
DDAgentDeployWithOperatorParamName = "deployWithOperator"
41+
DDAgentVersionParamName = "version"
42+
DDAgentFlavorParamName = "flavor"
43+
DDAgentPipelineID = "pipeline_id"
44+
DDAgentLocalPackage = "localPackage"
45+
DDAgentLocalChartPath = "localChartPath"
46+
DDAgentCommitSHA = "commit_sha"
47+
DDAgentFullImagePathParamName = "fullImagePath"
48+
DDClusterAgentVersionParamName = "clusterAgentVersion"
49+
DDClusterAgentFullImagePathParamName = "clusterAgentFullImagePath"
50+
DDAgentBaselineVersionParamName = "baselineVersion"
51+
DDAgentBaselineFullImagePathParamName = "baselineFullImagePath"
52+
DDClusterAgentBaselineVersionParamName = "baselineClusterAgentVersion"
53+
DDClusterAgentBaselineFullImagePathParamName = "baselineClusterAgentFullImagePath"
54+
DDAgentComparisonVersionParamName = "comparisonVersion"
55+
DDAgentComparisonFullImagePathParamName = "comparisonFullImagePath"
56+
DDClusterAgentComparisonVersionParamName = "comparisonClusterAgentVersion"
57+
DDClusterAgentComparisonFullImagePathParamName = "comparisonClusterAgentFullImagePath"
58+
DDOperatorVersionParamName = "operatorVersion"
59+
DDOperatorFullImagePathParamName = "operatorFullImagePath"
60+
DDOperatorLocalChartPath = "localChartPath"
61+
DDImagePullRegistryParamName = "imagePullRegistry"
62+
DDImagePullUsernameParamName = "imagePullUsername"
63+
DDImagePullPasswordParamName = "imagePullPassword"
64+
DDAgentAPIKeyParamName = "apiKey"
65+
DDAgentAPPKeyParamName = "appKey"
66+
DDAgentFakeintake = "fakeintake"
67+
DDAgentDualShipping = "dualshipping"
68+
DDAgentFakeintakeStoreType = "fakeintakeStoreType"
69+
DDAGentFakeintakeRetentionPeriod = "fakeintakeRetentionPeriod"
70+
DDAgentSite = "site"
71+
DDAgentMajorVersion = "majorVersion"
72+
DDAgentExtraEnvVars = "extraEnvVars" // extraEnvVars is expected in the format: <key1>=<value1>,<key2>=<value2>,...
73+
DDAgentJMX = "jmx"
74+
DDAgentFIPS = "fips"
75+
DDAgentConfigPathParamName = "configPath"
76+
DDAgentHelmConfig = "helmConfig"
6977

7078
// Updater Namespace
7179
DDUpdaterParamName = "deploy"
@@ -123,6 +131,15 @@ type Env interface {
123131
ClusterAgentVersion() string
124132
AgentFullImagePath() string
125133
ClusterAgentFullImagePath() string
134+
// Benchmarkeks specific methods
135+
AgentBaselineVersion() string
136+
AgentBaselineFullImagePath() string
137+
ClusterAgentBaselineVersion() string
138+
ClusterAgentBaselineFullImagePath() string
139+
AgentComparisonVersion() string
140+
AgentComparisonFullImagePath() string
141+
ClusterAgentComparisonVersion() string
142+
ClusterAgentComparisonFullImagePath() string
126143
OperatorFullImagePath() string
127144
OperatorVersion() string
128145
OperatorLocalChartPath() string
@@ -315,6 +332,40 @@ func (e *CommonEnvironment) ClusterAgentFullImagePath() string {
315332
return e.AgentConfig.Get(DDClusterAgentFullImagePathParamName)
316333
}
317334

335+
// Benchmarkeks specific methods for baseline variant
336+
func (e *CommonEnvironment) AgentBaselineVersion() string {
337+
return e.AgentConfig.Get(DDAgentBaselineVersionParamName)
338+
}
339+
340+
func (e *CommonEnvironment) AgentBaselineFullImagePath() string {
341+
return e.AgentConfig.Get(DDAgentBaselineFullImagePathParamName)
342+
}
343+
344+
func (e *CommonEnvironment) ClusterAgentBaselineVersion() string {
345+
return e.AgentConfig.Get(DDClusterAgentBaselineVersionParamName)
346+
}
347+
348+
func (e *CommonEnvironment) ClusterAgentBaselineFullImagePath() string {
349+
return e.AgentConfig.Get(DDClusterAgentBaselineFullImagePathParamName)
350+
}
351+
352+
// Benchmarkeks specific methods for comparison variant
353+
func (e *CommonEnvironment) AgentComparisonVersion() string {
354+
return e.AgentConfig.Get(DDAgentComparisonVersionParamName)
355+
}
356+
357+
func (e *CommonEnvironment) AgentComparisonFullImagePath() string {
358+
return e.AgentConfig.Get(DDAgentComparisonFullImagePathParamName)
359+
}
360+
361+
func (e *CommonEnvironment) ClusterAgentComparisonVersion() string {
362+
return e.AgentConfig.Get(DDClusterAgentComparisonVersionParamName)
363+
}
364+
365+
func (e *CommonEnvironment) ClusterAgentComparisonFullImagePath() string {
366+
return e.AgentConfig.Get(DDClusterAgentComparisonFullImagePathParamName)
367+
}
368+
318369
func (e *CommonEnvironment) OperatorVersion() string {
319370
return e.OperatorConfig.Get(DDOperatorVersionParamName)
320371
}

components/datadog/agent/helm/kubernetes_agent.go

Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import (
1212
"github.com/DataDog/test-infra-definitions/components/datadog/kubernetesagentparams"
1313
)
1414

15-
func NewKubernetesAgent(e config.Env, resourceName string, kubeProvider *kubernetes.Provider, options ...kubernetesagentparams.Option) (*agent.KubernetesAgent, error) {
15+
func NewKubernetesAgent(e config.Env, baseName string, resourceName string, kubeProvider *kubernetes.Provider, options ...kubernetesagentparams.Option) (*agent.KubernetesAgent, error) {
1616
return components.NewComponent(e, resourceName, func(comp *agent.KubernetesAgent) error {
1717
params, err := kubernetesagentparams.NewParams(e, options...)
1818
if err != nil {
@@ -22,24 +22,26 @@ func NewKubernetesAgent(e config.Env, resourceName string, kubeProvider *kuberne
2222

2323
pulumiResourceOptions := append(params.PulumiResourceOptions, pulumi.Parent(comp))
2424

25-
helmComponent, err := agent.NewHelmInstallation(e, agent.HelmInstallationArgs{
26-
KubeProvider: kubeProvider,
27-
DeployWindows: params.DeployWindows,
28-
Namespace: params.Namespace,
29-
ChartPath: params.HelmChartPath,
30-
RepoURL: params.HelmRepoURL,
31-
ValuesYAML: params.HelmValues,
32-
Fakeintake: params.FakeIntake,
33-
AgentFullImagePath: params.AgentFullImagePath,
34-
ClusterAgentFullImagePath: params.ClusterAgentFullImagePath,
35-
DualShipping: params.DualShipping,
36-
DisableLogsContainerCollectAll: params.DisableLogsContainerCollectAll,
37-
OTelAgent: params.OTelAgent,
38-
OTelConfig: params.OTelConfig,
39-
GKEAutopilot: params.GKEAutopilot,
40-
FIPS: params.FIPS,
41-
JMX: params.JMX,
42-
}, pulumiResourceOptions...)
25+
helmComponent, err := agent.NewHelmInstallation(e,
26+
baseName,
27+
agent.HelmInstallationArgs{
28+
KubeProvider: kubeProvider,
29+
DeployWindows: params.DeployWindows,
30+
Namespace: params.Namespace,
31+
ChartPath: params.HelmChartPath,
32+
RepoURL: params.HelmRepoURL,
33+
ValuesYAML: params.HelmValues,
34+
Fakeintake: params.FakeIntake,
35+
AgentFullImagePath: params.AgentFullImagePath,
36+
ClusterAgentFullImagePath: params.ClusterAgentFullImagePath,
37+
DualShipping: params.DualShipping,
38+
DisableLogsContainerCollectAll: params.DisableLogsContainerCollectAll,
39+
OTelAgent: params.OTelAgent,
40+
OTelConfig: params.OTelConfig,
41+
GKEAutopilot: params.GKEAutopilot,
42+
FIPS: params.FIPS,
43+
JMX: params.JMX,
44+
}, pulumiResourceOptions...)
4345
if err != nil {
4446
return err
4547
}
@@ -50,7 +52,7 @@ func NewKubernetesAgent(e config.Env, resourceName string, kubeProvider *kuberne
5052
appVersion := helmComponent.LinuxHelmReleaseStatus.AppVersion().Elem()
5153
version := helmComponent.LinuxHelmReleaseStatus.Version().Elem()
5254

53-
baseName := "dda-" + platform
55+
baseName := baseName + "-" + platform
5456

5557
comp.LinuxNodeAgent, err = componentskube.NewKubernetesObjRef(e, baseName+"-nodeAgent", params.Namespace, "Pod", appVersion, version, map[string]string{
5658
"app": baseName + "-datadog",

components/datadog/agent/kubernetes_helm.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -74,20 +74,19 @@ type HelmComponent struct {
7474
ClusterAgentToken pulumi.StringOutput
7575
}
7676

77-
func NewHelmInstallation(e config.Env, args HelmInstallationArgs, opts ...pulumi.ResourceOption) (*HelmComponent, error) {
77+
func NewHelmInstallation(e config.Env, baseName string, args HelmInstallationArgs, opts ...pulumi.ResourceOption) (*HelmComponent, error) {
7878
apiKey := e.AgentAPIKey()
7979
appKey := e.AgentAPPKey()
80-
baseName := "dda"
8180
opts = append(opts, pulumi.Providers(args.KubeProvider), e.WithProviders(config.ProviderRandom), pulumi.DeletedWith(args.KubeProvider))
8281

8382
helmComponent := &HelmComponent{}
84-
if err := e.Ctx().RegisterComponentResource("dd:agent", "dda", helmComponent, opts...); err != nil {
83+
if err := e.Ctx().RegisterComponentResource("dd:agent", e.CommonNamer().ResourceName(baseName), helmComponent, opts...); err != nil {
8584
return nil, err
8685
}
8786
opts = append(opts, pulumi.Parent(helmComponent))
8887

8988
// Create fixed cluster agent token
90-
randomClusterAgentToken, err := random.NewRandomString(e.Ctx(), "datadog-cluster-agent-token", &random.RandomStringArgs{
89+
randomClusterAgentToken, err := random.NewRandomString(e.Ctx(), e.CommonNamer().ResourceName(baseName, "cluster", "agent", "token"), &random.RandomStringArgs{
9190
Lower: pulumi.Bool(true),
9291
Upper: pulumi.Bool(true),
9392
Length: pulumi.Int(32),
@@ -112,7 +111,7 @@ func NewHelmInstallation(e config.Env, args HelmInstallationArgs, opts ...pulumi
112111
opts = append(opts, utils.PulumiDependsOn(ns))
113112

114113
// Create secret if necessary
115-
secret, err := corev1.NewSecret(e.Ctx(), "datadog-credentials", &corev1.SecretArgs{
114+
secret, err := corev1.NewSecret(e.Ctx(), e.CommonNamer().ResourceName(baseName, "credentials"), &corev1.SecretArgs{
116115
Metadata: metav1.ObjectMetaArgs{
117116
Namespace: ns.Metadata.Name(),
118117
Name: pulumi.Sprintf("%s-datadog-credentials", baseName),
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
FROM golang:1.24 AS builder
2+
3+
WORKDIR /usr/src/app
4+
5+
# pre-copy/cache go.mod for pre-downloading dependencies and only redownloading them in subsequent builds if they change
6+
COPY go.mod go.sum ./
7+
RUN go mod download && go mod verify
8+
9+
COPY . .
10+
ENV CGO_ENABLED=0
11+
RUN go build -v -o /usr/local/bin/app ./...
12+
13+
FROM scratch
14+
15+
COPY --from=builder /usr/local/bin/app /app
16+
17+
ENTRYPOINT ["/app"]
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
module churn
2+
3+
go 1.24
4+
5+
require (
6+
github.com/gobuffalo/flect v1.0.3
7+
k8s.io/apimachinery v0.32.0
8+
k8s.io/client-go v0.32.0
9+
)
10+
11+
require (
12+
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
13+
github.com/fxamacker/cbor/v2 v2.7.0 // indirect
14+
github.com/go-logr/logr v1.4.2 // indirect
15+
github.com/gogo/protobuf v1.3.2 // indirect
16+
github.com/google/go-cmp v0.6.0 // indirect
17+
github.com/google/gofuzz v1.2.0 // indirect
18+
github.com/json-iterator/go v1.1.12 // indirect
19+
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
20+
github.com/modern-go/reflect2 v1.0.2 // indirect
21+
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
22+
github.com/spf13/pflag v1.0.5 // indirect
23+
github.com/x448/float16 v0.8.4 // indirect
24+
golang.org/x/net v0.30.0 // indirect
25+
golang.org/x/oauth2 v0.23.0 // indirect
26+
golang.org/x/sys v0.26.0 // indirect
27+
golang.org/x/term v0.25.0 // indirect
28+
golang.org/x/text v0.19.0 // indirect
29+
golang.org/x/time v0.7.0 // indirect
30+
gopkg.in/inf.v0 v0.9.1 // indirect
31+
k8s.io/klog/v2 v2.130.1 // indirect
32+
k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738 // indirect
33+
sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 // indirect
34+
sigs.k8s.io/structured-merge-diff/v4 v4.4.2 // indirect
35+
sigs.k8s.io/yaml v1.4.0 // indirect
36+
)

0 commit comments

Comments
 (0)