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  }