Skip to content

Commit

Permalink
Multiple clusters per trigger source (#981)
Browse files Browse the repository at this point in the history
  • Loading branch information
Tetrergeru authored Feb 14, 2024
1 parent 7177fe5 commit d19b019
Show file tree
Hide file tree
Showing 84 changed files with 1,848 additions and 1,774 deletions.
30 changes: 19 additions & 11 deletions api/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ package api
import (
"net/http"
"time"

"github.com/moira-alert/moira"
)

// WebContact is container for web ui contact validation.
Expand Down Expand Up @@ -30,21 +32,27 @@ type Sentry struct {

// Config for api configuration variables.
type Config struct {
EnableCORS bool
Listen string
GraphiteLocalMetricTTL time.Duration
GraphiteRemoteMetricTTL time.Duration
PrometheusRemoteMetricTTL time.Duration
Flags FeatureFlags
EnableCORS bool
Listen string
MetricsTTL map[moira.ClusterKey]time.Duration
Flags FeatureFlags
}

// WebConfig is container for web ui configuration parameters.
type WebConfig struct {
SupportEmail string `json:"supportEmail,omitempty" example:"[email protected]"`
RemoteAllowed bool `json:"remoteAllowed" example:"true"`
Contacts []WebContact `json:"contacts"`
FeatureFlags FeatureFlags `json:"featureFlags"`
Sentry Sentry `json:"sentry"`
SupportEmail string `json:"supportEmail,omitempty" example:"[email protected]"`
RemoteAllowed bool `json:"remoteAllowed" example:"true"`
MetricSourceClusters []MetricSourceCluster `json:"metric_source_clusters"`
Contacts []WebContact `json:"contacts"`
FeatureFlags FeatureFlags `json:"featureFlags"`
Sentry Sentry `json:"sentry"`
}

// MetricSourceCluster contains data about supported metric source cluster
type MetricSourceCluster struct {
TriggerSource moira.TriggerSource `json:"trigger_source" example:"graphite_remote"`
ClusterId moira.ClusterId `json:"cluster_id" example:"default"`
ClusterName string `json:"cluster_name" example:"Graphite Remote Prod"`
}

func (WebConfig) Render(w http.ResponseWriter, r *http.Request) error {
Expand Down
2 changes: 1 addition & 1 deletion api/controller/trigger.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ func saveTrigger(dataBase moira.Database, trigger *moira.Trigger, triggerID stri
lastCheck.UpdateScore()
}

if err = dataBase.SetTriggerLastCheck(triggerID, &lastCheck, trigger.TriggerSource); err != nil {
if err = dataBase.SetTriggerLastCheck(triggerID, &lastCheck, trigger.ClusterKey()); err != nil {
return nil, api.ErrorInternalServer(err)
}

Expand Down
2 changes: 1 addition & 1 deletion api/controller/trigger_metrics.go
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ func deleteTriggerMetrics(dataBase moira.Database, metricName string, triggerID
return api.ErrorInternalServer(err)
}

if err = dataBase.SetTriggerLastCheck(triggerID, &lastCheck, trigger.TriggerSource); err != nil {
if err = dataBase.SetTriggerLastCheck(triggerID, &lastCheck, trigger.ClusterKey()); err != nil {
return api.ErrorInternalServer(err)
}

Expand Down
45 changes: 17 additions & 28 deletions api/controller/trigger_metrics_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ func TestDeleteTriggerMetric(t *testing.T) {
dataBase.EXPECT().DeleteTriggerCheckLock(triggerID)
dataBase.EXPECT().GetTriggerLastCheck(triggerID).Return(expectedLastCheck, nil)
dataBase.EXPECT().RemovePatternsMetrics(trigger.Patterns).Return(nil)
dataBase.EXPECT().SetTriggerLastCheck(triggerID, &expectedLastCheck, trigger.TriggerSource)
dataBase.EXPECT().SetTriggerLastCheck(triggerID, &expectedLastCheck, trigger.ClusterKey())
err := DeleteTriggerMetric(dataBase, "super.metric1", triggerID)
So(err, ShouldBeNil)
So(expectedLastCheck, ShouldResemble, emptyLastCheck)
Expand All @@ -53,7 +53,7 @@ func TestDeleteTriggerMetric(t *testing.T) {
dataBase.EXPECT().DeleteTriggerCheckLock(triggerID)
dataBase.EXPECT().GetTriggerLastCheck(triggerID).Return(expectedLastCheck, nil)
dataBase.EXPECT().RemovePatternsMetrics(trigger.Patterns).Return(nil)
dataBase.EXPECT().SetTriggerLastCheck(triggerID, &expectedLastCheck, trigger.TriggerSource)
dataBase.EXPECT().SetTriggerLastCheck(triggerID, &expectedLastCheck, trigger.ClusterKey())
err := DeleteTriggerMetric(dataBase, "super.metric1", triggerID)
So(err, ShouldBeNil)
So(expectedLastCheck, ShouldResemble, emptyLastCheck)
Expand Down Expand Up @@ -117,7 +117,7 @@ func TestDeleteTriggerMetric(t *testing.T) {
dataBase.EXPECT().DeleteTriggerCheckLock(triggerID)
dataBase.EXPECT().GetTriggerLastCheck(triggerID).Return(lastCheck, nil)
dataBase.EXPECT().RemovePatternsMetrics(trigger.Patterns).Return(nil)
dataBase.EXPECT().SetTriggerLastCheck(triggerID, &lastCheck, trigger.TriggerSource).Return(expected)
dataBase.EXPECT().SetTriggerLastCheck(triggerID, &lastCheck, trigger.ClusterKey()).Return(expected)
err := DeleteTriggerMetric(dataBase, "super.metric1", triggerID)
So(err, ShouldResemble, api.ErrorInternalServer(expected))
})
Expand Down Expand Up @@ -175,7 +175,7 @@ func TestDeleteTriggerNodataMetrics(t *testing.T) {
dataBase.EXPECT().DeleteTriggerCheckLock(triggerID)
dataBase.EXPECT().GetTriggerLastCheck(triggerID).Return(expectedLastCheck, nil)
dataBase.EXPECT().RemovePatternsMetrics(trigger.Patterns).Return(nil)
dataBase.EXPECT().SetTriggerLastCheck(triggerID, &expectedLastCheck, trigger.TriggerSource)
dataBase.EXPECT().SetTriggerLastCheck(triggerID, &expectedLastCheck, trigger.ClusterKey())
err := DeleteTriggerNodataMetrics(dataBase, triggerID)
So(err, ShouldBeNil)
So(expectedLastCheck, ShouldResemble, emptyLastCheck)
Expand All @@ -188,7 +188,7 @@ func TestDeleteTriggerNodataMetrics(t *testing.T) {
dataBase.EXPECT().DeleteTriggerCheckLock(triggerID)
dataBase.EXPECT().GetTriggerLastCheck(triggerID).Return(expectedLastCheck, nil)
dataBase.EXPECT().RemovePatternsMetrics(trigger.Patterns).Return(nil)
dataBase.EXPECT().SetTriggerLastCheck(triggerID, &expectedLastCheck, trigger.TriggerSource)
dataBase.EXPECT().SetTriggerLastCheck(triggerID, &expectedLastCheck, trigger.ClusterKey())
err := DeleteTriggerNodataMetrics(dataBase, triggerID)
So(err, ShouldBeNil)
So(expectedLastCheck, ShouldResemble, emptyLastCheck)
Expand All @@ -201,7 +201,7 @@ func TestDeleteTriggerNodataMetrics(t *testing.T) {
dataBase.EXPECT().DeleteTriggerCheckLock(triggerID)
dataBase.EXPECT().GetTriggerLastCheck(triggerID).Return(expectedLastCheck, nil)
dataBase.EXPECT().RemovePatternsMetrics(trigger.Patterns).Return(nil)
dataBase.EXPECT().SetTriggerLastCheck(triggerID, &lastCheckWithoutNodata, trigger.TriggerSource)
dataBase.EXPECT().SetTriggerLastCheck(triggerID, &lastCheckWithoutNodata, trigger.ClusterKey())
err := DeleteTriggerNodataMetrics(dataBase, triggerID)
So(err, ShouldBeNil)
So(expectedLastCheck, ShouldResemble, lastCheckWithoutNodata)
Expand All @@ -214,7 +214,7 @@ func TestDeleteTriggerNodataMetrics(t *testing.T) {
dataBase.EXPECT().DeleteTriggerCheckLock(triggerID)
dataBase.EXPECT().GetTriggerLastCheck(triggerID).Return(expectedLastCheck, nil)
dataBase.EXPECT().RemovePatternsMetrics(trigger.Patterns).Return(nil)
dataBase.EXPECT().SetTriggerLastCheck(triggerID, &expectedLastCheck, trigger.TriggerSource)
dataBase.EXPECT().SetTriggerLastCheck(triggerID, &expectedLastCheck, trigger.ClusterKey())
err := DeleteTriggerNodataMetrics(dataBase, triggerID)
So(err, ShouldBeNil)
So(expectedLastCheck, ShouldResemble, emptyLastCheck)
Expand Down Expand Up @@ -269,35 +269,24 @@ func TestGetTriggerMetrics(t *testing.T) {
localSource := mock_metric_source.NewMockMetricSource(mockCtrl)
remoteSource := mock_metric_source.NewMockMetricSource(mockCtrl)
fetchResult := mock_metric_source.NewMockFetchResult(mockCtrl)
sourceProvider := metricSource.CreateMetricSourceProvider(localSource, remoteSource, nil)
sourceProvider := metricSource.CreateTestMetricSourceProvider(localSource, remoteSource, nil)
pattern := "super.puper.pattern"
metric := "super.puper.metric"

var from int64 = 17
var until int64 = 67
var retention int64 = 10

Convey("Trigger is remote but remote is not configured", t, func() {
dataBase.EXPECT().GetTrigger(triggerID).Return(moira.Trigger{
ID: triggerID,
Targets: []string{pattern},
TriggerSource: moira.GraphiteRemote,
}, nil)
remoteSource.EXPECT().IsConfigured().Return(false, nil)
triggerMetrics, err := GetTriggerMetrics(dataBase, sourceProvider, from, until, triggerID)
So(err, ShouldResemble, api.ErrorInternalServer(metricSource.ErrMetricSourceIsNotConfigured))
So(triggerMetrics, ShouldBeNil)
})

Convey("Trigger is remote but remote has bad config", t, func() {
dataBase.EXPECT().GetTrigger(triggerID).Return(moira.Trigger{
Convey("Trigger is prometheus remote but prometheus remote is not in a registered source", t, func() {
trigger := moira.Trigger{
ID: triggerID,
Targets: []string{pattern},
TriggerSource: moira.GraphiteRemote,
}, nil)
remoteSource.EXPECT().IsConfigured().Return(false, remote.ErrRemoteStorageDisabled)
TriggerSource: moira.PrometheusRemote,
ClusterId: moira.DefaultCluster,
}
dataBase.EXPECT().GetTrigger(triggerID).Return(trigger, nil)
triggerMetrics, err := GetTriggerMetrics(dataBase, sourceProvider, from, until, triggerID)
So(err, ShouldResemble, api.ErrorInternalServer(remote.ErrRemoteStorageDisabled))
So(err, ShouldResemble, api.ErrorInternalServer(fmt.Errorf("unknown metric source with cluster key `%s`", trigger.ClusterKey().String())))
So(triggerMetrics, ShouldBeNil)
})

Expand All @@ -306,8 +295,8 @@ func TestGetTriggerMetrics(t *testing.T) {
ID: triggerID,
Targets: []string{pattern},
TriggerSource: moira.GraphiteLocal,
ClusterId: moira.DefaultCluster,
}, nil)
localSource.EXPECT().IsConfigured().Return(true, nil)
localSource.EXPECT().Fetch(pattern, from, until, false).Return(fetchResult, nil)
fetchResult.EXPECT().GetMetricsData().Return([]metricSource.MetricData{*metricSource.MakeMetricData(metric, []float64{0, 1, 2, 3, 4}, retention, from)})
triggerMetrics, err := GetTriggerMetrics(dataBase, sourceProvider, from, until, triggerID)
Expand Down Expand Up @@ -339,8 +328,8 @@ func TestGetTriggerMetrics(t *testing.T) {
ID: triggerID,
Targets: []string{pattern},
TriggerSource: moira.GraphiteRemote,
ClusterId: moira.DefaultCluster,
}, nil)
remoteSource.EXPECT().IsConfigured().Return(true, nil)
remoteSource.EXPECT().Fetch(pattern, from, until, false).Return(nil, expectedError)

triggerMetrics, err := GetTriggerMetrics(dataBase, sourceProvider, from, until, triggerID)
Expand Down
22 changes: 11 additions & 11 deletions api/controller/trigger_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ func TestUpdateTrigger(t *testing.T) {
dataBase.EXPECT().AcquireTriggerCheckLock(gomock.Any(), 30)
dataBase.EXPECT().DeleteTriggerCheckLock(gomock.Any())
dataBase.EXPECT().GetTriggerLastCheck(gomock.Any()).Return(moira.CheckData{}, database.ErrNil)
dataBase.EXPECT().SetTriggerLastCheck(gomock.Any(), gomock.Any(), trigger.TriggerSource).Return(nil)
dataBase.EXPECT().SetTriggerLastCheck(gomock.Any(), gomock.Any(), trigger.ClusterKey()).Return(nil)
dataBase.EXPECT().SaveTrigger(gomock.Any(), trigger).Return(nil)
resp, err := UpdateTrigger(dataBase, &triggerModel, triggerModel.ID, make(map[string]bool))
So(err, ShouldBeNil)
Expand Down Expand Up @@ -77,7 +77,7 @@ func TestSaveTrigger(t *testing.T) {
dataBase.EXPECT().AcquireTriggerCheckLock(triggerID, 30)
dataBase.EXPECT().DeleteTriggerCheckLock(triggerID)
dataBase.EXPECT().GetTriggerLastCheck(triggerID).Return(moira.CheckData{}, database.ErrNil)
dataBase.EXPECT().SetTriggerLastCheck(triggerID, gomock.Any(), trigger.TriggerSource).Return(nil)
dataBase.EXPECT().SetTriggerLastCheck(triggerID, gomock.Any(), trigger.ClusterKey()).Return(nil)
dataBase.EXPECT().SaveTrigger(triggerID, &trigger).Return(nil)
resp, err := saveTrigger(dataBase, &trigger, triggerID, make(map[string]bool))
So(err, ShouldBeNil)
Expand All @@ -88,7 +88,7 @@ func TestSaveTrigger(t *testing.T) {
dataBase.EXPECT().AcquireTriggerCheckLock(triggerID, 30)
dataBase.EXPECT().DeleteTriggerCheckLock(triggerID)
dataBase.EXPECT().GetTriggerLastCheck(triggerID).Return(actualLastCheck, nil)
dataBase.EXPECT().SetTriggerLastCheck(triggerID, &emptyLastCheck, trigger.TriggerSource).Return(nil)
dataBase.EXPECT().SetTriggerLastCheck(triggerID, &emptyLastCheck, trigger.ClusterKey()).Return(nil)
dataBase.EXPECT().SaveTrigger(triggerID, &trigger).Return(nil)
resp, err := saveTrigger(dataBase, &trigger, triggerID, make(map[string]bool))
So(err, ShouldBeNil)
Expand All @@ -101,7 +101,7 @@ func TestSaveTrigger(t *testing.T) {
dataBase.EXPECT().AcquireTriggerCheckLock(triggerID, 30)
dataBase.EXPECT().DeleteTriggerCheckLock(triggerID)
dataBase.EXPECT().GetTriggerLastCheck(triggerID).Return(moira.CheckData{}, database.ErrNil)
dataBase.EXPECT().SetTriggerLastCheck(triggerID, gomock.Any(), trigger.TriggerSource).Return(nil)
dataBase.EXPECT().SetTriggerLastCheck(triggerID, gomock.Any(), trigger.ClusterKey()).Return(nil)
dataBase.EXPECT().SaveTrigger(triggerID, &trigger).Return(nil)
resp, err := saveTrigger(dataBase, &trigger, triggerID, map[string]bool{"super.metric1": true, "super.metric2": true})
So(err, ShouldBeNil)
Expand Down Expand Up @@ -133,7 +133,7 @@ func TestSaveTrigger(t *testing.T) {
dataBase.EXPECT().AcquireTriggerCheckLock(triggerID, 30)
dataBase.EXPECT().DeleteTriggerCheckLock(triggerID)
dataBase.EXPECT().GetTriggerLastCheck(triggerID).Return(moira.CheckData{}, database.ErrNil)
dataBase.EXPECT().SetTriggerLastCheck(triggerID, gomock.Any(), trigger.TriggerSource).Return(expected)
dataBase.EXPECT().SetTriggerLastCheck(triggerID, gomock.Any(), trigger.ClusterKey()).Return(expected)
resp, err := saveTrigger(dataBase, &trigger, triggerID, make(map[string]bool))
So(err, ShouldResemble, api.ErrorInternalServer(expected))
So(resp, ShouldBeNil)
Expand All @@ -144,7 +144,7 @@ func TestSaveTrigger(t *testing.T) {
dataBase.EXPECT().AcquireTriggerCheckLock(triggerID, 30)
dataBase.EXPECT().DeleteTriggerCheckLock(triggerID)
dataBase.EXPECT().GetTriggerLastCheck(triggerID).Return(moira.CheckData{}, database.ErrNil)
dataBase.EXPECT().SetTriggerLastCheck(triggerID, gomock.Any(), trigger.TriggerSource).Return(nil)
dataBase.EXPECT().SetTriggerLastCheck(triggerID, gomock.Any(), trigger.ClusterKey()).Return(nil)
dataBase.EXPECT().SaveTrigger(triggerID, &trigger).Return(expected)
resp, err := saveTrigger(dataBase, &trigger, triggerID, make(map[string]bool))
So(err, ShouldResemble, api.ErrorInternalServer(expected))
Expand Down Expand Up @@ -175,7 +175,7 @@ func TestVariousTtlState(t *testing.T) {
dataBase.EXPECT().AcquireTriggerCheckLock(triggerID, 30)
dataBase.EXPECT().DeleteTriggerCheckLock(triggerID)
dataBase.EXPECT().GetTriggerLastCheck(triggerID).Return(moira.CheckData{}, database.ErrNil)
dataBase.EXPECT().SetTriggerLastCheck(triggerID, &lastCheck, trigger.TriggerSource).Return(nil)
dataBase.EXPECT().SetTriggerLastCheck(triggerID, &lastCheck, trigger.ClusterKey()).Return(nil)
dataBase.EXPECT().SaveTrigger(triggerID, &trigger).Return(nil)
resp, err := saveTrigger(dataBase, &trigger, triggerID, make(map[string]bool))
So(err, ShouldBeNil)
Expand All @@ -190,7 +190,7 @@ func TestVariousTtlState(t *testing.T) {
dataBase.EXPECT().AcquireTriggerCheckLock(triggerID, 30)
dataBase.EXPECT().DeleteTriggerCheckLock(triggerID)
dataBase.EXPECT().GetTriggerLastCheck(triggerID).Return(moira.CheckData{}, database.ErrNil)
dataBase.EXPECT().SetTriggerLastCheck(triggerID, &lastCheck, trigger.TriggerSource).Return(nil)
dataBase.EXPECT().SetTriggerLastCheck(triggerID, &lastCheck, trigger.ClusterKey()).Return(nil)
dataBase.EXPECT().SaveTrigger(triggerID, &trigger).Return(nil)
resp, err := saveTrigger(dataBase, &trigger, triggerID, make(map[string]bool))
So(err, ShouldBeNil)
Expand All @@ -205,7 +205,7 @@ func TestVariousTtlState(t *testing.T) {
dataBase.EXPECT().AcquireTriggerCheckLock(triggerID, 30)
dataBase.EXPECT().DeleteTriggerCheckLock(triggerID)
dataBase.EXPECT().GetTriggerLastCheck(triggerID).Return(moira.CheckData{}, database.ErrNil)
dataBase.EXPECT().SetTriggerLastCheck(triggerID, &lastCheck, trigger.TriggerSource).Return(nil)
dataBase.EXPECT().SetTriggerLastCheck(triggerID, &lastCheck, trigger.ClusterKey()).Return(nil)
dataBase.EXPECT().SaveTrigger(triggerID, &trigger).Return(nil)
resp, err := saveTrigger(dataBase, &trigger, triggerID, make(map[string]bool))
So(err, ShouldBeNil)
Expand All @@ -220,7 +220,7 @@ func TestVariousTtlState(t *testing.T) {
dataBase.EXPECT().AcquireTriggerCheckLock(triggerID, 30)
dataBase.EXPECT().DeleteTriggerCheckLock(triggerID)
dataBase.EXPECT().GetTriggerLastCheck(triggerID).Return(moira.CheckData{}, database.ErrNil)
dataBase.EXPECT().SetTriggerLastCheck(triggerID, &lastCheck, trigger.TriggerSource).Return(nil)
dataBase.EXPECT().SetTriggerLastCheck(triggerID, &lastCheck, trigger.ClusterKey()).Return(nil)
dataBase.EXPECT().SaveTrigger(triggerID, &trigger).Return(nil)
resp, err := saveTrigger(dataBase, &trigger, triggerID, make(map[string]bool))
So(err, ShouldBeNil)
Expand All @@ -235,7 +235,7 @@ func TestVariousTtlState(t *testing.T) {
dataBase.EXPECT().AcquireTriggerCheckLock(triggerID, 30)
dataBase.EXPECT().DeleteTriggerCheckLock(triggerID)
dataBase.EXPECT().GetTriggerLastCheck(triggerID).Return(moira.CheckData{}, database.ErrNil)
dataBase.EXPECT().SetTriggerLastCheck(triggerID, &lastCheck, trigger.TriggerSource).Return(nil)
dataBase.EXPECT().SetTriggerLastCheck(triggerID, &lastCheck, trigger.ClusterKey()).Return(nil)
dataBase.EXPECT().SaveTrigger(triggerID, &trigger).Return(nil)
resp, err := saveTrigger(dataBase, &trigger, triggerID, make(map[string]bool))
So(err, ShouldBeNil)
Expand Down
14 changes: 12 additions & 2 deletions api/dto/triggers.go
Original file line number Diff line number Diff line change
Expand Up @@ -71,8 +71,10 @@ type TriggerModel struct {
//
// Deprecated: Use TriggerSource field instead
IsRemote bool `json:"is_remote" example:"false"`
// Shows the source from where the metrics are fetched
// Shows the type of source from where the metrics are fetched
TriggerSource moira.TriggerSource `json:"trigger_source" example:"graphite_local"`
// Shows the exact cluster from where the metrics are fetched
ClusterId moira.ClusterId `json:"cluster_id" example:"default"`
// If true, first event NODATA → OK will be omitted
MuteNewMetrics bool `json:"mute_new_metrics" example:"false"`
// A list of targets that have only alone metrics
Expand All @@ -87,6 +89,11 @@ type TriggerModel struct {
UpdatedBy string `json:"updated_by"`
}

// ClusterKey returns cluster key composed of trigger source and cluster id associated with the trigger
func (trigger *TriggerModel) ClusterKey() moira.ClusterKey {
return moira.MakeClusterKey(trigger.TriggerSource, trigger.ClusterId)
}

// ToMoiraTrigger transforms TriggerModel to moira.Trigger
func (model *TriggerModel) ToMoiraTrigger() *moira.Trigger {
return &moira.Trigger{
Expand All @@ -104,6 +111,7 @@ func (model *TriggerModel) ToMoiraTrigger() *moira.Trigger {
Expression: &model.Expression,
Patterns: model.Patterns,
TriggerSource: model.TriggerSource,
ClusterId: model.ClusterId,
MuteNewMetrics: model.MuteNewMetrics,
AloneMetrics: model.AloneMetrics,
UpdatedBy: model.UpdatedBy,
Expand All @@ -128,6 +136,7 @@ func CreateTriggerModel(trigger *moira.Trigger) TriggerModel {
Patterns: trigger.Patterns,
IsRemote: trigger.TriggerSource == moira.GraphiteRemote,
TriggerSource: trigger.TriggerSource,
ClusterId: trigger.ClusterId,
MuteNewMetrics: trigger.MuteNewMetrics,
AloneMetrics: trigger.AloneMetrics,
CreatedAt: getDateTime(trigger.CreatedAt),
Expand Down Expand Up @@ -185,9 +194,10 @@ func (trigger *Trigger) Bind(request *http.Request) error {
}

trigger.TriggerSource = trigger.TriggerSource.FillInIfNotSet(trigger.IsRemote)
trigger.ClusterId = trigger.ClusterId.FillInIfNotSet()

metricsSourceProvider := middleware.GetTriggerTargetsSourceProvider(request)
metricsSource, err := metricsSourceProvider.GetMetricSource(trigger.TriggerSource)
metricsSource, err := metricsSourceProvider.GetMetricSource(trigger.ClusterKey())
if err != nil {
return err
}
Expand Down
Loading

0 comments on commit d19b019

Please sign in to comment.