From 0a5abcde2eda4bf3cee7c8779e2a1a2c2c6b87fb Mon Sep 17 00:00:00 2001 From: Dawid Rusnak Date: Thu, 11 Jul 2024 10:59:18 +0200 Subject: [PATCH 1/3] fix(testworkflows): displaying events (#5652) --- pkg/testworkflows/testworkflowcontroller/utils.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/testworkflows/testworkflowcontroller/utils.go b/pkg/testworkflows/testworkflowcontroller/utils.go index ad54220b0ca..77bb22bc4ef 100644 --- a/pkg/testworkflows/testworkflowcontroller/utils.go +++ b/pkg/testworkflows/testworkflowcontroller/utils.go @@ -12,7 +12,7 @@ import ( ) const ( - KubernetesLogTimeFormat = "2006-01-02T15:04:05.999999999Z" + KubernetesLogTimeFormat = "2006-01-02T15:04:05.000000000Z" KubernetesTimezoneLogTimeFormat = KubernetesLogTimeFormat + "07:00" ) From ef781f58aec358f069ded55d1fd44e31e0b1ddd9 Mon Sep 17 00:00:00 2001 From: Dawid Rusnak Date: Thu, 11 Jul 2024 14:21:17 +0200 Subject: [PATCH 2/3] fix(testworkflows): storing logs for the services (#5656) --- pkg/testworkflows/testworkflowcontroller/logs.go | 10 +++++----- .../testworkflowcontroller/watchinstrumentedpod.go | 2 +- pkg/testworkflows/testworkflowprocessor/container.go | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/pkg/testworkflows/testworkflowcontroller/logs.go b/pkg/testworkflows/testworkflowcontroller/logs.go index 7fd97ef4bdc..b72b8b36807 100644 --- a/pkg/testworkflows/testworkflowcontroller/logs.go +++ b/pkg/testworkflows/testworkflowcontroller/logs.go @@ -43,7 +43,7 @@ type ContainerLog struct { // getContainerLogsStream is getting logs stream, and tries to reinitialize the stream on EOF. // EOF may happen not only on the actual container end, but also in case of the log rotation. // @see {@link https://stackoverflow.com/a/68673451} -func getContainerLogsStream(ctx context.Context, clientSet kubernetes.Interface, namespace, podName, containerName string, pod Channel[*corev1.Pod], since *time.Time) (io.Reader, error) { +func getContainerLogsStream(ctx context.Context, clientSet kubernetes.Interface, namespace, podName, containerName string, follow bool, pod Channel[*corev1.Pod], since *time.Time) (io.Reader, error) { // Fail immediately if the context is finished if ctx.Err() != nil { return nil, ctx.Err() @@ -58,7 +58,7 @@ func getContainerLogsStream(ctx context.Context, clientSet kubernetes.Interface, // Create logs stream request req := clientSet.CoreV1().Pods(namespace).GetLogs(podName, &corev1.PodLogOptions{ Container: containerName, - Follow: true, + Follow: follow, Timestamps: true, SinceTime: sinceTime, }) @@ -103,7 +103,7 @@ func getContainerLogsStream(ctx context.Context, clientSet kubernetes.Interface, return stream, nil } -func WatchContainerLogs(parentCtx context.Context, clientSet kubernetes.Interface, namespace, podName, containerName string, bufferSize int, pod Channel[*corev1.Pod]) Channel[ContainerLog] { +func WatchContainerLogs(parentCtx context.Context, clientSet kubernetes.Interface, namespace, podName, containerName string, follow bool, bufferSize int, pod Channel[*corev1.Pod]) Channel[ContainerLog] { ctx, ctxCancel := context.WithCancel(parentCtx) w := newChannel[ContainerLog](ctx, bufferSize) @@ -119,7 +119,7 @@ func WatchContainerLogs(parentCtx context.Context, clientSet kubernetes.Interfac var since *time.Time // Create logs stream request - stream, err := getContainerLogsStream(ctx, clientSet, namespace, podName, containerName, pod, since) + stream, err := getContainerLogsStream(ctx, clientSet, namespace, podName, containerName, follow, pod, since) hadAnyContent := false if err == io.EOF { return @@ -241,7 +241,7 @@ func WatchContainerLogs(parentCtx context.Context, clientSet kubernetes.Interfac } // Reinitialize logs stream since = common.Ptr(tsReader.ts.Add(1)) - stream, err = getContainerLogsStream(ctx, clientSet, namespace, podName, containerName, pod, since) + stream, err = getContainerLogsStream(ctx, clientSet, namespace, podName, containerName, follow, pod, since) if err != nil { return } diff --git a/pkg/testworkflows/testworkflowcontroller/watchinstrumentedpod.go b/pkg/testworkflows/testworkflowcontroller/watchinstrumentedpod.go index c98dd7b0678..1ae190e2f08 100644 --- a/pkg/testworkflows/testworkflowcontroller/watchinstrumentedpod.go +++ b/pkg/testworkflows/testworkflowcontroller/watchinstrumentedpod.go @@ -102,7 +102,7 @@ func WatchInstrumentedPod(parentCtx context.Context, clientSet kubernetes.Interf // Watch the container logs follow := common.ResolvePtr(opts.Follow, true) && !state.IsFinished(ref) - for v := range WatchContainerLogs(ctx, clientSet, podObj.Namespace, podObj.Name, ref, 10, pod).Channel() { + for v := range WatchContainerLogs(ctx, clientSet, podObj.Namespace, podObj.Name, ref, follow, 10, pod).Channel() { if v.Error != nil { s.Error(v.Error) } else if v.Value.Output != nil { diff --git a/pkg/testworkflows/testworkflowprocessor/container.go b/pkg/testworkflows/testworkflowprocessor/container.go index 7566a3a1061..1546965341b 100644 --- a/pkg/testworkflows/testworkflowprocessor/container.go +++ b/pkg/testworkflows/testworkflowprocessor/container.go @@ -468,7 +468,7 @@ func (c *container) Resolve(m ...expressions.Machine) error { } env := c.Env() name = name[4:] - for i := range env { + for i := len(env) - 1; i >= 0; i-- { if env[i].Name == name && env[i].ValueFrom == nil { value, err := expressions.EvalTemplate(env[i].Value) if err == nil { From b919c9d285e322a7619e382e3018ebadab99ea66 Mon Sep 17 00:00:00 2001 From: Povilas Versockas Date: Thu, 11 Jul 2024 23:01:37 -0700 Subject: [PATCH 3/3] feat: [TKC-2194] fix workflow execution telemetry (#5659) --- pkg/telemetry/sender_sio.go | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/pkg/telemetry/sender_sio.go b/pkg/telemetry/sender_sio.go index 516f6668ea5..909da094b7c 100644 --- a/pkg/telemetry/sender_sio.go +++ b/pkg/telemetry/sender_sio.go @@ -70,7 +70,7 @@ func mapEvent(userID string, event Event) analytics.Track { return analytics.Track{ Event: event.Name, UserId: userID, - Properties: mapProperties(event.Params), + Properties: mapProperties(event.Name, event.Params), Context: &analytics.Context{ App: analytics.AppInfo{ Name: event.Params.AppName, @@ -81,7 +81,7 @@ func mapEvent(userID string, event Event) analytics.Track { } } -func mapProperties(params Params) analytics.Properties { +func mapProperties(name string, params Params) analytics.Properties { properties := analytics.NewProperties(). Set("name", params.AppName). Set("version", params.AppVersion). @@ -132,6 +132,19 @@ func mapProperties(params Params) analytics.Properties { if params.TestSuiteSteps != 0 { properties = properties.Set("testSuiteSteps", params.TestSuiteSteps) } + if name == "testkube_api_run_test_workflow" { + properties = properties.Set("testWorkflowSteps", params.TestWorkflowSteps) + properties = properties.Set("testWorkflowExecuteCount", params.TestWorkflowExecuteCount) + properties = properties.Set("testWorkflowParallelUsed", params.TestWorkflowParallelUsed) + properties = properties.Set("testWorkflowMatrixUsed", params.TestWorkflowMatrixUsed) + properties = properties.Set("testWorkflowServicesUsed", params.TestWorkflowServicesUsed) + properties = properties.Set("testWorkflowIsSample", params.TestWorkflowIsSample) + properties = properties.Set("testWorkflowTemplates", params.TestWorkflowTemplates) + properties = properties.Set("testWorkflowImages", params.TestWorkflowImages) + properties = properties.Set("testWorkflowTemplateUsed", params.TestWorkflowTemplateUsed) + properties = properties.Set("testWorkflowArtifactUsed", params.TestWorkflowArtifactUsed) + properties = properties.Set("testWorkflowImage", params.TestWorkflowImage) + } return properties }