From 83a6fd7f1fea40e451ec1a85815b5a0a9f09ba0b Mon Sep 17 00:00:00 2001 From: zhaoxiangchun <1422928955@qq.com> Date: Wed, 20 Jan 2021 11:46:42 +0800 Subject: [PATCH] fix(monitor): domain view can list scope is domain or project alertrecords; fix nodata alert return info --- pkg/monitor/models/commonalert.go | 11 +++++++++++ pkg/monitor/models/monitorscoperesource.go | 16 ++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/pkg/monitor/models/commonalert.go b/pkg/monitor/models/commonalert.go index 47f93076bb..223580f93c 100644 --- a/pkg/monitor/models/commonalert.go +++ b/pkg/monitor/models/commonalert.go @@ -121,6 +121,9 @@ func (man *SCommonAlertManager) ValidateCreateData( return data, merrors.NewArgIsEmptyErr("metric_query") } else { for _, query := range data.CommonMetricInputQuery.MetricQuery { + if query.ConditionType == monitor.METRIC_QUERY_TYPE_NO_DATA { + query.Comparator = "==" + } if !utils.IsInStringArray(getQueryEvalType(query.Comparator), validators.EvaluatorDefaultTypes) { return data, httperrors.NewInputParameterError("the Comparator is illegal: %s", query.Comparator) } @@ -226,6 +229,10 @@ func (alert *SCommonAlert) CustomizeCreate( query jsonutils.JSONObject, data jsonutils.JSONObject, ) error { + err := alert.SMonitorScopedResource.CustomizeCreate(ctx, userCred, ownerId, query, data) + if err != nil { + return err + } alert.State = string(monitor.AlertStateUnknown) input := new(monitor.CommonAlertCreateInput) if err := data.Unmarshal(input); err != nil { @@ -554,6 +561,7 @@ func getCommonAlertMetricDetailsFromCondition(cond *monitor.AlertCondition, metricDetails.ConditionType = cond.Type if metricDetails.ConditionType == monitor.METRIC_QUERY_TYPE_NO_DATA { metricDetails.ThresholdStr = monitor.METRIC_QUERY_NO_DATA_THESHOLD + metricDetails.Comparator = monitor.METRIC_QUERY_NO_DATA_THESHOLD } q := cond.Query @@ -748,6 +756,9 @@ func (alert *SCommonAlert) ValidateUpdateData( if err != nil { return data, errors.Wrap(err, "metric_query Unmarshal error") } + if query.ConditionType == monitor.METRIC_QUERY_TYPE_NO_DATA { + query.Comparator = "==" + } if !utils.IsInStringArray(getQueryEvalType(query.Comparator), validators.EvaluatorDefaultTypes) { return data, httperrors.NewInputParameterError("the Comparator is illegal: %s", query.Comparator) } diff --git a/pkg/monitor/models/monitorscoperesource.go b/pkg/monitor/models/monitorscoperesource.go index 3b06e73feb..44665c99eb 100644 --- a/pkg/monitor/models/monitorscoperesource.go +++ b/pkg/monitor/models/monitorscoperesource.go @@ -33,6 +33,22 @@ func (m *SMonitorScopedResourceManager) FilterByOwner(q *sqlchemy.SQuery, userCr return q } +func (s *SMonitorScopedResource) CustomizeCreate(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, query jsonutils.JSONObject, data jsonutils.JSONObject) error { + scope, _ := data.GetString("scope") + switch rbacutils.TRbacScope(scope) { + case rbacutils.ScopeSystem: + s.DomainId = "" + s.ProjectId = "" + case rbacutils.ScopeDomain: + s.DomainId = ownerId.GetProjectDomainId() + s.ProjectId = "" + case rbacutils.ScopeProject: + s.DomainId = ownerId.GetProjectDomainId() + s.ProjectId = ownerId.GetProjectId() + } + return nil +} + func (manager *SMonitorScopedResourceManager) ResourceScope() rbacutils.TRbacScope { return manager.SScopedResourceBaseManager.ResourceScope() }