in pkg/telemetry/telemetry.go [77:170]
func (c *Collector) sendTelemetry(ctx context.Context) error {
edpConfig := &corev1.ConfigMap{}
if err := c.k8sClient.Get(ctx, client.ObjectKey{
Namespace: c.namespace,
Name: platform.EdpConfigMap,
}, edpConfig); err != nil {
return fmt.Errorf("failed to get edp config: %w", err)
}
telemetry := PlatformMetrics{}
telemetry.RegistryType = edpConfig.Data["container_registry_type"]
telemetry.Version = edpConfig.Data["edp_version"]
codebases := &codebaseApi.CodebaseList{}
if err := c.k8sClient.List(ctx, codebases, client.InNamespace(c.namespace)); err != nil {
return fmt.Errorf("failed to get codebases: %w", err)
}
for i := 0; i < len(codebases.Items); i++ {
telemetry.CodebaseMetrics = append(telemetry.CodebaseMetrics, CodebaseMetrics{
Lang: codebases.Items[i].Spec.Lang,
Framework: codebases.Items[i].Spec.Framework,
BuildTool: codebases.Items[i].Spec.BuildTool,
Strategy: string(codebases.Items[i].Spec.Strategy),
Type: codebases.Items[i].Spec.Type,
Versioning: string(codebases.Items[i].Spec.Versioning.Type),
})
}
gitProviders := &codebaseApi.GitServerList{}
if err := c.k8sClient.List(ctx, gitProviders, client.InNamespace(c.namespace)); err != nil {
return fmt.Errorf("failed to get git providers: %w", err)
}
if len(gitProviders.Items) > 0 {
telemetry.GitProviders = append(telemetry.GitProviders, gitProviders.Items[0].Spec.GitProvider)
}
stages := &pipelineAPi.StageList{}
if err := c.k8sClient.List(ctx, stages, client.InNamespace(c.namespace)); err != nil {
return fmt.Errorf("failed to get stages: %w", err)
}
deploymentType := map[string]string{}
stagesCount := map[string]int{}
for i := 0; i < len(stages.Items); i++ {
stagesCount[stages.Items[i].Spec.CdPipeline]++
if stages.Items[i].Spec.TriggerType == "Auto" {
deploymentType[stages.Items[i].Spec.CdPipeline] = "Auto"
}
}
cdPipelines := &pipelineAPi.CDPipelineList{}
if err := c.k8sClient.List(ctx, cdPipelines, client.InNamespace(c.namespace)); err != nil {
return fmt.Errorf("failed to get cd pipelines: %w", err)
}
for i := 0; i < len(cdPipelines.Items); i++ {
pipeDeployment := "Manual"
if val, ok := deploymentType[cdPipelines.Items[i].Name]; ok {
pipeDeployment = val
}
telemetry.CdPipelineMetrics = append(telemetry.CdPipelineMetrics, CdPipelineMetrics{
DeploymentType: pipeDeployment,
NumberOfStages: stagesCount[cdPipelines.Items[i].Name],
})
}
jiraServers := &codebaseApi.JiraServerList{}
if err := c.k8sClient.List(ctx, jiraServers, client.InNamespace(c.namespace)); err != nil {
return fmt.Errorf("failed to get jira servers: %w", err)
}
telemetry.JiraEnabled = len(jiraServers.Items) > 0
resp, err := resty.New().
SetHostURL(c.telemetryUrl).
R().
SetContext(ctx).
SetBody(map[string]PlatformMetrics{"platformMetrics": telemetry}).
Post("/v1/submit")
if err != nil {
return fmt.Errorf("failed to send telemetry: %w", err)
}
if resp.IsError() {
return fmt.Errorf("failed to send telemetry: http status code: %s, body: %s", resp.Status(), resp.String())
}
return nil
}