github.com/kubeshop/testkube@v1.17.23/pkg/tcl/apitcl/v1/testworkflowmetrics.go (about) 1 package v1 2 3 import ( 4 "context" 5 "os" 6 "strings" 7 8 testworkflowsv1 "github.com/kubeshop/testkube-operator/api/testworkflows/v1" 9 "github.com/kubeshop/testkube/pkg/log" 10 "github.com/kubeshop/testkube/pkg/telemetry" 11 "github.com/kubeshop/testkube/pkg/version" 12 ) 13 14 func (s *apiTCL) sendCreateWorkflowTelemetry(ctx context.Context, workflow *testworkflowsv1.TestWorkflow) { 15 if workflow == nil { 16 log.DefaultLogger.Debug("empty workflow passed to telemetry event") 17 return 18 } 19 telemetryEnabled, err := s.configMap.GetTelemetryEnabled(ctx) 20 if err != nil { 21 log.DefaultLogger.Debugf("getting telemetry enabled error", "error", err) 22 } 23 if !telemetryEnabled { 24 return 25 } 26 27 clusterID, err := s.configMap.GetUniqueClusterId(ctx) 28 if err != nil { 29 log.DefaultLogger.Debugf("getting cluster id error", "error", err) 30 } 31 32 host, err := os.Hostname() 33 if err != nil { 34 log.DefaultLogger.Debugf("getting hostname error", "hostname", host, "error", err) 35 } 36 37 var dataSource string 38 isKubeshopGitURI := false 39 if workflow.Spec.Content != nil { 40 if len(workflow.Spec.Content.Files) != 0 { 41 dataSource = "files" 42 } else if workflow.Spec.Content.Git != nil { 43 dataSource = "git" 44 if strings.Contains(workflow.Spec.Content.Git.Uri, "kubeshop") { 45 isKubeshopGitURI = true 46 } 47 } 48 } 49 50 hasArtifacts := false 51 for _, step := range workflow.Spec.Steps { 52 if step.Artifacts != nil { 53 hasArtifacts = true 54 break 55 } 56 } 57 58 image := "" 59 if workflow.Spec.Container != nil { 60 image = workflow.Spec.Container.Image 61 } 62 63 out, err := telemetry.SendCreateWorkflowEvent("testkube_api_create_test_workflow", telemetry.CreateWorkflowParams{ 64 CreateParams: telemetry.CreateParams{ 65 AppVersion: version.Version, 66 DataSource: dataSource, 67 Host: host, 68 ClusterID: clusterID, 69 }, 70 WorkflowParams: telemetry.WorkflowParams{ 71 TestWorkflowSteps: int32(len(workflow.Spec.Steps)), 72 TestWorkflowTemplateUsed: len(workflow.Spec.Use) != 0, 73 TestWorkflowImage: image, 74 TestWorkflowArtifactUsed: hasArtifacts, 75 TestWorkflowKubeshopGitURI: isKubeshopGitURI, 76 }, 77 }) 78 if err != nil { 79 log.DefaultLogger.Debugf("sending create test workflow telemetry event error", "error", err) 80 } else { 81 log.DefaultLogger.Debugf("sending create test workflow telemetry event", "output", out) 82 } 83 } 84 85 func (s *apiTCL) sendCreateWorkflowTemplateTelemetry(ctx context.Context, template *testworkflowsv1.TestWorkflowTemplate) { 86 if template == nil { 87 log.DefaultLogger.Debug("empty template passed to telemetry event") 88 return 89 } 90 telemetryEnabled, err := s.configMap.GetTelemetryEnabled(ctx) 91 if err != nil { 92 log.DefaultLogger.Debugf("getting telemetry enabled error", "error", err) 93 } 94 if !telemetryEnabled { 95 return 96 } 97 98 clusterID, err := s.configMap.GetUniqueClusterId(ctx) 99 if err != nil { 100 log.DefaultLogger.Debugf("getting cluster id error", "error", err) 101 } 102 103 host, err := os.Hostname() 104 if err != nil { 105 log.DefaultLogger.Debugf("getting hostname error", "hostname", host, "error", err) 106 } 107 108 var dataSource string 109 isKubeshopGitURI := false 110 if template.Spec.Content != nil { 111 if len(template.Spec.Content.Files) != 0 { 112 dataSource = "files" 113 } else if template.Spec.Content.Git != nil { 114 dataSource = "git" 115 if strings.Contains(template.Spec.Content.Git.Uri, "kubeshop") { 116 isKubeshopGitURI = true 117 } 118 } 119 } 120 121 hasArtifacts := false 122 for _, step := range template.Spec.Steps { 123 if step.Artifacts != nil { 124 hasArtifacts = true 125 break 126 } 127 } 128 129 image := "" 130 if template.Spec.Container != nil { 131 image = template.Spec.Container.Image 132 } 133 134 out, err := telemetry.SendCreateWorkflowEvent("testkube_api_create_test_workflow_template", telemetry.CreateWorkflowParams{ 135 CreateParams: telemetry.CreateParams{ 136 AppVersion: version.Version, 137 DataSource: dataSource, 138 Host: host, 139 ClusterID: clusterID, 140 }, 141 WorkflowParams: telemetry.WorkflowParams{ 142 TestWorkflowSteps: int32(len(template.Spec.Steps)), 143 TestWorkflowImage: image, 144 TestWorkflowArtifactUsed: hasArtifacts, 145 TestWorkflowKubeshopGitURI: isKubeshopGitURI, 146 }, 147 }) 148 if err != nil { 149 log.DefaultLogger.Debugf("sending create test workflow template telemetry event error", "error", err) 150 } else { 151 log.DefaultLogger.Debugf("sending create test workflow template telemetry event", "output", out) 152 } 153 } 154 155 func (s *apiTCL) sendRunWorkflowTelemetry(ctx context.Context, workflow *testworkflowsv1.TestWorkflow) { 156 if workflow == nil { 157 log.DefaultLogger.Debug("empty workflow passed to telemetry event") 158 return 159 } 160 telemetryEnabled, err := s.configMap.GetTelemetryEnabled(ctx) 161 if err != nil { 162 log.DefaultLogger.Debugf("getting telemetry enabled error", "error", err) 163 } 164 if !telemetryEnabled { 165 return 166 } 167 168 clusterID, err := s.configMap.GetUniqueClusterId(ctx) 169 if err != nil { 170 log.DefaultLogger.Debugf("getting cluster id error", "error", err) 171 } 172 173 host, err := os.Hostname() 174 if err != nil { 175 log.DefaultLogger.Debugf("getting hostname error", "hostname", host, "error", err) 176 } 177 178 var dataSource string 179 isKubeshopGitURI := false 180 if workflow.Spec.Content != nil { 181 if len(workflow.Spec.Content.Files) != 0 { 182 dataSource = "files" 183 } else if workflow.Spec.Content.Git != nil { 184 dataSource = "git" 185 if strings.Contains(workflow.Spec.Content.Git.Uri, "kubeshop") { 186 isKubeshopGitURI = true 187 } 188 } 189 } 190 191 hasArtifacts := false 192 for _, step := range workflow.Spec.Steps { 193 if step.Artifacts != nil { 194 hasArtifacts = true 195 break 196 } 197 } 198 199 image := "" 200 if workflow.Spec.Container != nil { 201 image = workflow.Spec.Container.Image 202 } 203 204 out, err := telemetry.SendRunWorkflowEvent("testkube_api_run_test_workflow", telemetry.RunWorkflowParams{ 205 RunParams: telemetry.RunParams{ 206 AppVersion: version.Version, 207 DataSource: dataSource, 208 Host: host, 209 ClusterID: clusterID, 210 }, 211 WorkflowParams: telemetry.WorkflowParams{ 212 TestWorkflowSteps: int32(len(workflow.Spec.Steps)), 213 TestWorkflowImage: image, 214 TestWorkflowArtifactUsed: hasArtifacts, 215 TestWorkflowKubeshopGitURI: isKubeshopGitURI, 216 }, 217 }) 218 219 if err != nil { 220 log.DefaultLogger.Debugf("sending run test workflow telemetry event error", "error", err) 221 } else { 222 log.DefaultLogger.Debugf("sending run test workflow telemetry event", "output", out) 223 } 224 }