From 140b2f28e1effd7877401bbbb8678d76a0ccab63 Mon Sep 17 00:00:00 2001 From: odubajDT <93584209+odubajDT@users.noreply.github.com> Date: Tue, 14 Feb 2023 15:46:45 +0100 Subject: [PATCH] fix(operator): compute deployment interval on deployment endtime (#842) Signed-off-by: odubajDT --- operator/controllers/common/metrics.go | 2 +- operator/controllers/common/metrics_test.go | 91 ++++++++++++++++++--- 2 files changed, 81 insertions(+), 12 deletions(-) diff --git a/operator/controllers/common/metrics.go b/operator/controllers/common/metrics.go index 7a2d953ce3..4d002a1229 100644 --- a/operator/controllers/common/metrics.go +++ b/operator/controllers/common/metrics.go @@ -58,7 +58,7 @@ func ObserveDeploymentInterval(ctx context.Context, client client.Client, reconc continue } - previousInterval := reconcileObject.GetEndTime().Sub(predecessor.GetStartTime()) + previousInterval := reconcileObject.GetEndTime().Sub(predecessor.GetEndTime()) gauge.Observe(ctx, previousInterval.Seconds(), reconcileObject.GetDurationMetricsAttributes()...) } } diff --git a/operator/controllers/common/metrics_test.go b/operator/controllers/common/metrics_test.go index a190c11272..e56d3df05f 100644 --- a/operator/controllers/common/metrics_test.go +++ b/operator/controllers/common/metrics_test.go @@ -299,6 +299,70 @@ func TestMetrics_ObserveDeploymentInterval(t *testing.T) { }, err: nil, }, + { + name: "previous version - object found with endtime and revision", + list: &lifecyclev1alpha2.KeptnAppVersionList{}, + previous: &lifecyclev1alpha2.KeptnAppVersion{}, + clientObjects: &lifecyclev1alpha2.KeptnAppVersionList{ + Items: []lifecyclev1alpha2.KeptnAppVersion{ + { + ObjectMeta: metav1.ObjectMeta{ + Name: "appName-version-1", + Namespace: "namespace", + Generation: 1, + }, + Spec: lifecyclev1alpha2.KeptnAppVersionSpec{ + KeptnAppSpec: lifecyclev1alpha2.KeptnAppSpec{ + Version: "version", + }, + AppName: "appName", + PreviousVersion: "previousVersion", + }, + Status: lifecyclev1alpha2.KeptnAppVersionStatus{ + EndTime: metav1.Time{Time: metav1.Now().Time.Add(5 * time.Second)}, + StartTime: metav1.Time{Time: metav1.Now().Time}, + }, + }, + { + ObjectMeta: metav1.ObjectMeta{ + Name: "appName-previousVersion-2", + Namespace: "namespace", + Generation: 2, + }, + Spec: lifecyclev1alpha2.KeptnAppVersionSpec{ + KeptnAppSpec: lifecyclev1alpha2.KeptnAppSpec{ + Version: "previousVersion", + }, + AppName: "appName", + PreviousVersion: "", + }, + Status: lifecyclev1alpha2.KeptnAppVersionStatus{ + EndTime: metav1.Time{Time: metav1.Now().Time.Add(5 * time.Second)}, + StartTime: metav1.Time{Time: metav1.Now().Time}, + }, + }, + { + ObjectMeta: metav1.ObjectMeta{ + Name: "appName-previousVersion-1", + Namespace: "namespace", + Generation: 1, + }, + Spec: lifecyclev1alpha2.KeptnAppVersionSpec{ + KeptnAppSpec: lifecyclev1alpha2.KeptnAppSpec{ + Version: "previousVersion", + }, + AppName: "appName", + PreviousVersion: "", + }, + Status: lifecyclev1alpha2.KeptnAppVersionStatus{ + EndTime: metav1.Time{Time: metav1.Now().Time.Add(5 * time.Second)}, + StartTime: metav1.Time{Time: metav1.Now().Time}, + }, + }, + }, + }, + err: nil, + }, } gauge, err := noop.NewNoopMeter().AsyncFloat64().Gauge("mine") @@ -322,12 +386,12 @@ func TestGetPredecessor(t *testing.T) { Items: []lifecyclev1alpha2.KeptnAppVersion{ { ObjectMeta: metav1.ObjectMeta{ - Name: "my-app-1.0.0-1", + Name: "my-app-1.0.0-1", + Generation: 1, }, Spec: lifecyclev1alpha2.KeptnAppVersionSpec{ KeptnAppSpec: lifecyclev1alpha2.KeptnAppSpec{ - Version: "1.0.0", - Revision: 0, + Version: "1.0.0", }, AppName: "my-app", }, @@ -338,12 +402,12 @@ func TestGetPredecessor(t *testing.T) { }, { ObjectMeta: metav1.ObjectMeta{ - Name: "my-app-1.0.0-2", + Name: "my-app-1.0.0-2", + Generation: 2, }, Spec: lifecyclev1alpha2.KeptnAppVersionSpec{ KeptnAppSpec: lifecyclev1alpha2.KeptnAppSpec{ - Version: "1.0.0", - Revision: 0, + Version: "1.0.0", }, AppName: "my-app", }, @@ -354,14 +418,15 @@ func TestGetPredecessor(t *testing.T) { }, { ObjectMeta: metav1.ObjectMeta{ - Name: "my-app-1.1.0-1", + Name: "my-app-1.1.0-1", + Generation: 1, }, Spec: lifecyclev1alpha2.KeptnAppVersionSpec{ KeptnAppSpec: lifecyclev1alpha2.KeptnAppSpec{ - Version: "1.0.0", - Revision: 0, + Version: "1.1.0", }, - AppName: "my-app", + AppName: "my-app", + PreviousVersion: "1.0.0", }, Status: lifecyclev1alpha2.KeptnAppVersionStatus{ StartTime: metav1.NewTime(now), @@ -375,10 +440,14 @@ func TestGetPredecessor(t *testing.T) { require.Nil(t, err) latestAppVersion, err := interfaces.NewMetricsObjectWrapperFromClientObject(appVersionsWrapper.GetItems()[2]) - require.Nil(t, err) + + require.Equal(t, "1.0.0", latestAppVersion.GetPreviousVersion()) + predecessor := getPredecessor(latestAppVersion, appVersionsWrapper.GetItems()) + require.Equal(t, "", predecessor.GetPreviousVersion()) + expectedPredecessor, err := interfaces.NewMetricsObjectWrapperFromClientObject(appVersionsWrapper.GetItems()[0]) require.Nil(t, err)