From d9a817f4664cfe05ae336f6a52b1d1aa28e6322b Mon Sep 17 00:00:00 2001 From: Giovanni Liva Date: Mon, 24 Oct 2022 13:02:47 +0200 Subject: [PATCH] Adding missing methods Signed-off-by: Giovanni Liva --- operator/api/v1alpha1/common/common.go | 30 ++++++------ .../api/v1alpha1/keptnappversion_types.go | 8 ++++ .../v1alpha1/keptnworkloadinstance_types.go | 9 ++++ .../controllers/keptnappversion/controller.go | 3 +- .../keptnworkloadinstance/controller.go | 48 +++++++++++++++++++ 5 files changed, 83 insertions(+), 15 deletions(-) diff --git a/operator/api/v1alpha1/common/common.go b/operator/api/v1alpha1/common/common.go index c513f1c11bd..4a51eea71bf 100644 --- a/operator/api/v1alpha1/common/common.go +++ b/operator/api/v1alpha1/common/common.go @@ -122,20 +122,22 @@ type KeptnMeters struct { } const ( - AppName attribute.Key = attribute.Key("keptn.deployment.app.name") - AppVersion attribute.Key = attribute.Key("keptn.deployment.app.version") - AppNamespace attribute.Key = attribute.Key("keptn.deployment.app.namespace") - AppStatus attribute.Key = attribute.Key("keptn.deployment.app.status") - WorkloadName attribute.Key = attribute.Key("keptn.deployment.workload.name") - WorkloadVersion attribute.Key = attribute.Key("keptn.deployment.workload.version") - WorkloadNamespace attribute.Key = attribute.Key("keptn.deployment.workload.namespace") - WorkloadStatus attribute.Key = attribute.Key("keptn.deployment.workload.status") - TaskStatus attribute.Key = attribute.Key("keptn.deployment.task.status") - TaskName attribute.Key = attribute.Key("keptn.deployment.task.name") - TaskType attribute.Key = attribute.Key("keptn.deployment.task.type") - EvaluationStatus attribute.Key = attribute.Key("keptn.deployment.evaluation.status") - EvaluationName attribute.Key = attribute.Key("keptn.deployment.evaluation.name") - EvaluationType attribute.Key = attribute.Key("keptn.deployment.evaluation.type") + AppName attribute.Key = attribute.Key("keptn.deployment.app.name") + AppVersion attribute.Key = attribute.Key("keptn.deployment.app.version") + AppNamespace attribute.Key = attribute.Key("keptn.deployment.app.namespace") + AppStatus attribute.Key = attribute.Key("keptn.deployment.app.status") + AppPreviousVersion attribute.Key = attribute.Key("keptn.deployment.app.previousversion") + WorkloadName attribute.Key = attribute.Key("keptn.deployment.workload.name") + WorkloadVersion attribute.Key = attribute.Key("keptn.deployment.workload.version") + WorkloadPreviousVersion attribute.Key = attribute.Key("keptn.deployment.workload.previousversion") + WorkloadNamespace attribute.Key = attribute.Key("keptn.deployment.workload.namespace") + WorkloadStatus attribute.Key = attribute.Key("keptn.deployment.workload.status") + TaskStatus attribute.Key = attribute.Key("keptn.deployment.task.status") + TaskName attribute.Key = attribute.Key("keptn.deployment.task.name") + TaskType attribute.Key = attribute.Key("keptn.deployment.task.type") + EvaluationStatus attribute.Key = attribute.Key("keptn.deployment.evaluation.status") + EvaluationName attribute.Key = attribute.Key("keptn.deployment.evaluation.name") + EvaluationType attribute.Key = attribute.Key("keptn.deployment.evaluation.type") ) func GenerateTaskName(checkType CheckType, taskName string) string { diff --git a/operator/api/v1alpha1/keptnappversion_types.go b/operator/api/v1alpha1/keptnappversion_types.go index 146a020e21b..88f56bf3afa 100644 --- a/operator/api/v1alpha1/keptnappversion_types.go +++ b/operator/api/v1alpha1/keptnappversion_types.go @@ -195,3 +195,11 @@ func (v KeptnAppVersion) GetMetricsAttributes() []attribute.KeyValue { common.AppStatus.String(string(v.Status.Status)), } } + +func (v KeptnAppVersion) GetDurationMetricsAttributes() []attribute.KeyValue { + return []attribute.KeyValue{ + common.AppName.String(v.Spec.AppName), + common.AppVersion.String(v.Spec.Version), + common.AppPreviousVersion.String(v.Spec.PreviousVersion), + } +} diff --git a/operator/api/v1alpha1/keptnworkloadinstance_types.go b/operator/api/v1alpha1/keptnworkloadinstance_types.go index d619aea7319..90c6f0f67c0 100644 --- a/operator/api/v1alpha1/keptnworkloadinstance_types.go +++ b/operator/api/v1alpha1/keptnworkloadinstance_types.go @@ -232,3 +232,12 @@ func (i KeptnWorkloadInstance) GetMetricsAttributes() []attribute.KeyValue { common.WorkloadStatus.String(string(i.Status.Status)), } } + +func (i KeptnWorkloadInstance) GetIntervalMetricsAttributes() []attribute.KeyValue { + return []attribute.KeyValue{ + common.AppName.String(i.Spec.AppName), + common.WorkloadName.String(i.Spec.WorkloadName), + common.WorkloadVersion.String(i.Spec.Version), + common.WorkloadPreviousVersion.String(i.Spec.PreviousVersion), + } +} diff --git a/operator/controllers/keptnappversion/controller.go b/operator/controllers/keptnappversion/controller.go index 3a30898005e..c594879cba5 100644 --- a/operator/controllers/keptnappversion/controller.go +++ b/operator/controllers/keptnappversion/controller.go @@ -269,7 +269,8 @@ func (r *KeptnAppVersionReconciler) GetDeploymentInterval(ctx context.Context) ( if appInstance.Spec.PreviousVersion != "" { previousAppVersion := &klcv1alpha1.KeptnAppVersion{} - err := r.Get(ctx, types.NamespacedName{Name: fmt.Sprintf("%s-%s", appInstance.Spec.AppName, appInstance.Spec.PreviousVersion), Namespace: appInstance.Namespace}, previousAppVersion) + appName := fmt.Sprintf("%s-%s", appInstance.Spec.AppName, appInstance.Spec.PreviousVersion) + err := r.Get(ctx, types.NamespacedName{Name: appName, Namespace: appInstance.Namespace}, previousAppVersion) if err != nil { r.Log.Error(err, "Previous App Version not found") } else { diff --git a/operator/controllers/keptnworkloadinstance/controller.go b/operator/controllers/keptnworkloadinstance/controller.go index 813032550ec..52f03413cb5 100644 --- a/operator/controllers/keptnworkloadinstance/controller.go +++ b/operator/controllers/keptnworkloadinstance/controller.go @@ -368,3 +368,51 @@ func (r *KeptnWorkloadInstanceReconciler) getAppVersionForWorkloadInstance(ctx c } return true, latestVersion, nil } + +func (r *KeptnWorkloadInstanceReconciler) GetDeploymentInterval(ctx context.Context) ([]common.GaugeFloatValue, error) { + workloadInstances := &klcv1alpha1.KeptnWorkloadInstanceList{} + err := r.List(ctx, workloadInstances) + if err != nil { + return nil, fmt.Errorf("could not retrieve workload instances: %w", err) + } + + res := []common.GaugeFloatValue{} + for _, workloadInstance := range workloadInstances.Items { + if workloadInstance.Spec.PreviousVersion != "" { + previousAppVersion := &klcv1alpha1.KeptnWorkloadInstance{} + err := r.Get(ctx, types.NamespacedName{Name: fmt.Sprintf("%s-%s", workloadInstance.Spec.WorkloadName, workloadInstance.Spec.PreviousVersion), Namespace: workloadInstance.Namespace}, previousAppVersion) + if err != nil { + r.Log.Error(err, "Previous Workload Version not found") + } else if workloadInstance.IsEndTimeSet() { + previousInterval := workloadInstance.Status.StartTime.Time.Sub(previousAppVersion.Status.EndTime.Time) + res = append(res, common.GaugeFloatValue{ + Value: previousInterval.Seconds(), + Attributes: workloadInstance.GetIntervalMetricsAttributes(), + }) + } + } + } + return res, nil +} + +func (r *KeptnWorkloadInstanceReconciler) GetDeploymentDuration(ctx context.Context) ([]common.GaugeFloatValue, error) { + workloadInstances := &klcv1alpha1.KeptnWorkloadInstanceList{} + err := r.List(ctx, workloadInstances) + if err != nil { + return nil, fmt.Errorf("could not retrieve workload instances: %w", err) + } + + res := []common.GaugeFloatValue{} + + for _, workloadInstance := range workloadInstances.Items { + if workloadInstance.IsEndTimeSet() { + duration := workloadInstance.Status.EndTime.Time.Sub(workloadInstance.Status.StartTime.Time) + res = append(res, common.GaugeFloatValue{ + Value: duration.Seconds(), + Attributes: workloadInstance.GetIntervalMetricsAttributes(), + }) + } + } + + return res, nil +}