Skip to content

Commit

Permalink
Merge pull request #1426 from Bee-lee/disabled-rules-for-cluster-list
Browse files Browse the repository at this point in the history
Add endpoint to get list of disabled rules for given cluster list + modify recommendation list
  • Loading branch information
Bee-lee authored Feb 10, 2022
2 parents 2f6a554 + 4d95dc0 commit 54e5ac1
Show file tree
Hide file tree
Showing 12 changed files with 386 additions and 57 deletions.
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ require (
github.com/RedHatInsights/insights-content-service v0.0.0-20201009081018-083923779f00
github.com/RedHatInsights/insights-operator-utils v1.23.3
github.com/RedHatInsights/insights-results-aggregator-data v1.3.3
github.com/RedHatInsights/insights-results-types v1.3.5
github.com/RedHatInsights/insights-results-types v1.3.6
github.com/Shopify/sarama v1.27.1
github.com/deckarep/golang-set v1.7.1
github.com/dgrijalva/jwt-go v3.2.0+incompatible
Expand Down
10 changes: 2 additions & 8 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -56,8 +56,8 @@ github.com/RedHatInsights/insights-results-aggregator-data v1.3.2/go.mod h1:E1Ua
github.com/RedHatInsights/insights-results-aggregator-data v1.3.3 h1:K6j+Sr+S0iUqFEfevl+MI0dEXn5AxFeJn9FTU5razWA=
github.com/RedHatInsights/insights-results-aggregator-data v1.3.3/go.mod h1:udHNC7lBxYnu9AqMahABqvuclCzWUWSkbacQbUaehfI=
github.com/RedHatInsights/insights-results-types v1.2.0/go.mod h1:6VVdMTGU/BAS2cW0KrHAUiDyocpyKqpPpEyp6AJ1tk8=
github.com/RedHatInsights/insights-results-types v1.3.5 h1:Q1awNYeJqIFgst7zQgKfQwbdMieyJTG/eDIau+yIUpo=
github.com/RedHatInsights/insights-results-types v1.3.5/go.mod h1:6VVdMTGU/BAS2cW0KrHAUiDyocpyKqpPpEyp6AJ1tk8=
github.com/RedHatInsights/insights-results-types v1.3.6 h1:mC5vZn4hK4f6L/Y4MSv0EsN/Z1avAh5qWB2Z2m11PWk=
github.com/RedHatInsights/insights-results-types v1.3.6/go.mod h1:6VVdMTGU/BAS2cW0KrHAUiDyocpyKqpPpEyp6AJ1tk8=
github.com/RedHatInsights/kafka-zerolog v0.0.0-20210304172207-928f026dc7ec h1:/msFfckx6EIj0rZncrMUfNixFvsLbOiRIe4J0AurhDo=
github.com/RedHatInsights/kafka-zerolog v0.0.0-20210304172207-928f026dc7ec/go.mod h1:HJul5oCsCRNiRlh/ayJDGdW3PzGlid/5aaQwJBn7was=
github.com/Shopify/goreferrer v0.0.0-20181106222321-ec9c9a553398/go.mod h1:a1uqRtAwp2Xwc6WNPJEufxJ7fx3npB4UV/JOLmbu5I0=
Expand Down Expand Up @@ -221,7 +221,6 @@ github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4er
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=
github.com/golang/mock v1.4.3 h1:GV+pQPG/EUUbkh47niozDcADz6go/dUwhVzdUQHIVRw=
github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc=
github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs=
Expand Down Expand Up @@ -260,7 +259,6 @@ github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OI
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y=
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
Expand Down Expand Up @@ -602,7 +600,6 @@ github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXf
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0=
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
Expand Down Expand Up @@ -727,7 +724,6 @@ golang.org/x/net v0.0.0-20200602114024-627f9648deb9/go.mod h1:qpuaurCH72eLCgpAm/
golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20200904194848-62affa334b73/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20201002202402-0a1ea396d57c/go.mod h1:iQL9McJNjoIa5mjH6nYTCTZXUN6RP+XW3eib7Ya3XcI=
golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb h1:eBmm0M9fYhWpKZLjQUUKka/LtIxf46G4fxeEz5KJr9U=
golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4 h1:4nGaVu0QrbjT/AK2PRLuQfQuh6DJve+pELhqTdAj3x0=
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
Expand All @@ -740,7 +736,6 @@ golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a h1:DcqTD9SDLc+1P/r1EmRBwnVsrOwW+kk2vWf9n+1sGhs=
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ=
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
Expand Down Expand Up @@ -781,7 +776,6 @@ golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20201005172224-997123666555/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210309074719-68d13333faf2 h1:46ULzRKLh1CwgRq2dC5SlBzEqqNCi8rreOZnNrbqcIY=
golang.org/x/sys v0.0.0-20210309074719-68d13333faf2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210510120138-977fb7262007 h1:gG67DSER+11cZvqIMb8S8bt0vZtiN6xWYARwirrOSfE=
Expand Down
55 changes: 50 additions & 5 deletions openapi.json
Original file line number Diff line number Diff line change
Expand Up @@ -1385,7 +1385,7 @@
},
"/recommendations/organizations/{org_id}/users/{user_id}/list": {
"post": {
"summary": "Returns a list of recommendations and a number of clusters each one is hitting.",
"summary": "Returns a list of recommendations and a list of clusters each one is hitting.",
"operationId": "getRecommendationsPost",
"description": "Recommendations will be retrieved based on the list of cluster IDs that is part of request body.",
"parameters": [
Expand Down Expand Up @@ -1438,10 +1438,15 @@
"description": "The rule ID in the | format.",
"example": "rule.module|ERROR_KEY"
},
"impacted_clusters_cnt": {
"type": "int",
"description": "The number of clusters impacted by this rule.",
"example": 42
"cluster_id": {
"type": "array",
"items": {
"description": "Cluster ID",
"type": "string",
"minLength": 36,
"maxLength": 36,
"format": "uuid"
}
}
}
}
Expand Down Expand Up @@ -1616,6 +1621,46 @@
]
}
},
"/rules/users/{userId}/disabled_for_clusters": {
"post": {
"summary": "Returns a list of rules disabled from current account for given list of clusters",
"operationId": "ListOfDisabledRulesForClusters",
"description": "Returns a list of rules disabled from current account for given list of clusters",
"parameters": [
{
"name": "userId",
"in": "path",
"required": true,
"description": "Numeric ID of the user. An example: `42`",
"schema": {
"type": "string"
}
}
],
"requestBody": {
"description": "List of cluster IDs. Each ID must conform to UUID format. An example: `34c3ecc5-624a-49a5-bab8-4fdc5e51a266.",
"required": true,
"content": {
"text/plain": {
"schema": {
}
}
}
},
"responses": {
"200": {
"description": "List of disabled rules",
"content": {
"application/json": {
}
}
}
},
"tags": [
"prod"
]
}
},
"/rules/users/{userId}/disabled/feedback": {
"get": {
"summary": "Returns a list of reasons why rule or rules has been disabled",
Expand Down
12 changes: 9 additions & 3 deletions server/endpoints.go
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,8 @@ const (
DisableRuleFeedbackEndpoint = "clusters/{cluster}/rules/{rule_id}/error_key/{error_key}/users/{user_id}/disable_feedback"
// ListOfDisabledRules returns a list of rules disabled from current account
ListOfDisabledRules = "rules/users/{user_id}/disabled"
// ListOfDisabledRulesForClusters returns a list of rules disabled from current account for given list of clusters in POST body
ListOfDisabledRulesForClusters = "rules/users/{user_id}/disabled_for_clusters"
// ListOfDisabledRulesFeedback returns a list of reasons why rule has been disabled
ListOfDisabledRulesFeedback = "rules/users/{user_id}/disabled/feedback"
// ListOfDisabledClusters returns a list of clusters which the user disabled for a rule with latest justification
Expand Down Expand Up @@ -131,12 +133,10 @@ func (server *HTTPServer) addEndpointsToRouter(router *mux.Router) {
router.HandleFunc(apiPrefix+DislikeRuleEndpoint, server.dislikeRule).Methods(http.MethodPut, http.MethodOptions)
router.HandleFunc(apiPrefix+ResetVoteOnRuleEndpoint, server.resetVoteOnRule).Methods(http.MethodPut, http.MethodOptions)
router.HandleFunc(apiPrefix+ClustersForOrganizationEndpoint, server.listOfClustersForOrganization).Methods(http.MethodGet)
router.HandleFunc(apiPrefix+DisableRuleForClusterEndpoint, server.disableRuleForCluster).Methods(http.MethodPut, http.MethodOptions)
router.HandleFunc(apiPrefix+EnableRuleForClusterEndpoint, server.enableRuleForCluster).Methods(http.MethodPut, http.MethodOptions)
router.HandleFunc(apiPrefix+DisableRuleFeedbackEndpoint, server.saveDisableFeedback).Methods(http.MethodPost)
router.HandleFunc(apiPrefix+ReportForListOfClustersEndpoint, server.reportForListOfClusters).Methods(http.MethodGet)
router.HandleFunc(apiPrefix+ReportForListOfClustersPayloadEndpoint, server.reportForListOfClustersPayload).Methods(http.MethodPost)
router.HandleFunc(apiPrefix+ListOfDisabledRules, server.listOfDisabledRules).Methods(http.MethodGet)
router.HandleFunc(apiPrefix+ListOfDisabledRulesForClusters, server.listOfDisabledRulesForClusters).Methods(http.MethodPost, http.MethodOptions)
router.HandleFunc(apiPrefix+ListOfDisabledRulesFeedback, server.listOfReasons).Methods(http.MethodGet)
router.HandleFunc(apiPrefix+ListOfDisabledClusters, server.listOfDisabledClusters).Methods(http.MethodGet)
router.HandleFunc(apiPrefix+Rating, server.setRuleRating).Methods(http.MethodPost)
Expand All @@ -163,6 +163,12 @@ func (server *HTTPServer) addEndpointsToRouter(router *mux.Router) {
// addRuleEnableDisableEndpointsToRouter method registers handlers for endpoints that
// allow for rules to be enabled, disabled, updated, and queried system-wide
func (server *HTTPServer) addRuleEnableDisableEndpointsToRouter(router *mux.Router, apiPrefix string) {
// single cluster disable functionality
router.HandleFunc(apiPrefix+DisableRuleForClusterEndpoint, server.disableRuleForCluster).Methods(http.MethodPut, http.MethodOptions)
router.HandleFunc(apiPrefix+EnableRuleForClusterEndpoint, server.enableRuleForCluster).Methods(http.MethodPut, http.MethodOptions)
router.HandleFunc(apiPrefix+DisableRuleFeedbackEndpoint, server.saveDisableFeedback).Methods(http.MethodPost)

// system-wide (acknowledge) disable functionality
router.HandleFunc(apiPrefix+EnableRuleSystemWide, server.enableRuleSystemWide).Methods(http.MethodPut, http.MethodOptions)
router.HandleFunc(apiPrefix+DisableRuleSystemWide, server.disableRuleSystemWide).Methods(http.MethodPut, http.MethodOptions)
router.HandleFunc(apiPrefix+UpdateRuleSystemWide, server.updateRuleSystemWide).Methods(http.MethodPost, http.MethodOptions)
Expand Down
36 changes: 36 additions & 0 deletions server/rules.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
package server

import (
"encoding/json"
"net/http"
"time"

Expand Down Expand Up @@ -129,6 +130,41 @@ func (server HTTPServer) listOfReasons(writer http.ResponseWriter, request *http
}
}

// listOfDisabledRulesForClusters returns list of rules disabled from an account for given clusters
func (server HTTPServer) listOfDisabledRulesForClusters(writer http.ResponseWriter, request *http.Request) {
// Extract user_id from URL
userID, ok := readUserID(writer, request)
if !ok {
// everything has been handled
return
}
log.Info().Str(userIDstr, string(userID)).Msg("listOfDisabledRulesForClusters")

var listOfClusters []string
err := json.NewDecoder(request.Body).Decode(&listOfClusters)
if err != nil {
handleServerError(writer, err)
return
}
log.Info().Str(userIDstr, string(userID)).Msgf("listOfDisabledRulesForClusters number of clusters: %d", len(listOfClusters))

// try to read list of disabled rules by an account/user from database for given list of clusters
disabledRules, err := server.Storage.ListOfDisabledRulesForClusters(listOfClusters, userID)
if err != nil {
log.Error().Err(err).Msg("Unable to read list of disabled rules")
handleServerError(writer, err)
return
}
log.Info().Str(userIDstr, string(userID)).Int("#disabled rules", len(disabledRules)).Msg("listOfDisabledRulesForClusters")

// try to send JSON payload to the client in a HTTP response
err = responses.SendOK(writer,
responses.BuildOkResponseWithData("rules", disabledRules))
if err != nil {
log.Error().Err(err).Msg(responseDataError)
}
}

// listOfDisabledClusters returns list of clusters disabled for a rule and user
func (server HTTPServer) listOfDisabledClusters(writer http.ResponseWriter, request *http.Request) {
log.Info().Msg("Lisf of disabled clusters")
Expand Down
47 changes: 36 additions & 11 deletions server/server_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -834,6 +834,24 @@ func TestHTTPServer_ListOfReasons(t *testing.T) {
})
}

func TestHTTPServer_ListDisabledRulesForClusters(t *testing.T) {
mockStorage, closer := helpers.MustGetMockStorage(t, true)
defer closer()

clusterList := []types.ClusterName{testdata.ClusterName}
reqBody, _ := json.Marshal(clusterList)

helpers.AssertAPIRequest(t, mockStorage, nil, &helpers.APIRequest{
Method: http.MethodPost,
Endpoint: server.ListOfDisabledRulesForClusters,
EndpointArgs: []interface{}{testdata.UserID},
Body: reqBody,
}, &helpers.APIResponse{
StatusCode: http.StatusOK,
Body: `{"rules":[],"status":"ok"}`,
})
}

func TestHTTPServer_EnableRuleSystemWide(t *testing.T) {
mockStorage, closer := helpers.MustGetMockStorage(t, true)
defer closer()
Expand Down Expand Up @@ -1162,11 +1180,11 @@ func TestHTTPServer_RecommendationsListEndpoint_3Recs1Cluster(t *testing.T) {
clusterList := []types.ClusterName{testdata.ClusterName}
reqBody, _ := json.Marshal(clusterList)

respBody := `{"recommendations":{"%v":%v,"%v":%v,"%v":%v},"status":"ok"}`
respBody := `{"recommendations":{"%v":["%v"],"%v":["%v"],"%v":["%v"]},"status":"ok"}`
respBody = fmt.Sprintf(respBody,
testdata.Rule1CompositeID, 1,
testdata.Rule2CompositeID, 1,
testdata.Rule3CompositeID, 1,
testdata.Rule1CompositeID, testdata.ClusterName,
testdata.Rule2CompositeID, testdata.ClusterName,
testdata.Rule3CompositeID, testdata.ClusterName,
)

helpers.AssertAPIRequest(t, mockStorage, nil, &helpers.APIRequest{
Expand Down Expand Up @@ -1201,11 +1219,18 @@ func TestHTTPServer_RecommendationsListEndpoint_3Recs2Clusters(t *testing.T) {

reqBody, _ := json.Marshal(clusterList)

respBody := `{"recommendations":{"%v":%v,"%v":%v,"%v":%v},"status":"ok"}`
respBody := `{
"recommendations":{
"%v":["%v", "%v"],
"%v":["%v", "%v"],
"%v":["%v"]
},
"status":"ok"
}`
respBody = fmt.Sprintf(respBody,
testdata.Rule1CompositeID, 2,
testdata.Rule2CompositeID, 2,
testdata.Rule3CompositeID, 1,
testdata.Rule1CompositeID, clusterList[0], clusterList[1],
testdata.Rule2CompositeID, clusterList[0], clusterList[1],
testdata.Rule3CompositeID, clusterList[1],
)

helpers.AssertAPIRequest(t, mockStorage, nil, &helpers.APIRequest{
Expand Down Expand Up @@ -1472,11 +1497,11 @@ func TestHTTPServer_ClustersRecommendationsListEndpoint_2Recs1Cluster(t *testing
mockStorage, closer := helpers.MustGetMockStorage(t, true)
defer closer()

respBody := `{"recommendations":{"%v":%v,"%v":%v},"status":"ok"}`
respBody := `{"recommendations":{"%v":["%v"],"%v":["%v"]},"status":"ok"}`

expected := fmt.Sprintf(respBody,
testdata.Rule1CompositeID, 1,
testdata.Rule2CompositeID, 1,
testdata.Rule1CompositeID, testdata.ClusterName,
testdata.Rule2CompositeID, testdata.ClusterName,
)

err := mockStorage.WriteRecommendationsForCluster(
Expand Down
9 changes: 9 additions & 0 deletions storage/noop_storage.go
Original file line number Diff line number Diff line change
Expand Up @@ -262,6 +262,15 @@ func (*NoopStorage) ListOfDisabledClusters(
return nil, nil
}

// ListOfDisabledRulesForClusters function returns list of disabled rules for given clusters from a
// specified account (noop).
func (*NoopStorage) ListOfDisabledRulesForClusters(
clusterList []string,
userID types.UserID,
) ([]ctypes.DisabledRule, error) {
return nil, nil
}

// RateOnRule function stores the vote (rating) given by an user to a rule+error key
func (*NoopStorage) RateOnRule(
types.UserID,
Expand Down
1 change: 1 addition & 0 deletions storage/noop_storage_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ func TestNoopStorage_Methods_Cont(t *testing.T) {
_, _ = noopStorage.DoesClusterExist("")
_, _ = noopStorage.ListOfDisabledRules("")
_, _ = noopStorage.ListOfReasons("")
_, _ = noopStorage.ListOfDisabledRulesForClusters([]string{}, types.UserID("99"))
_ = noopStorage.WriteRecommendationsForCluster(0, "", "", "")
_ = noopStorage.RateOnRule(types.UserID("99"), types.OrgID(1), "", "",
types.UserVote(1))
Expand Down
Loading

0 comments on commit 54e5ac1

Please sign in to comment.