Skip to content

Commit

Permalink
refactor: separated triggers and pagers
Browse files Browse the repository at this point in the history
  • Loading branch information
HeavyPunk committed Feb 5, 2025
1 parent a4b8d1f commit b07a8ee
Show file tree
Hide file tree
Showing 7 changed files with 41 additions and 21 deletions.
15 changes: 12 additions & 3 deletions api/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -83,11 +83,19 @@ func (WebConfig) Render(http.ResponseWriter, *http.Request) error {
const (
// DefaultTriggerNameMaxSize which will be used while validating dto.Trigger.
DefaultTriggerNameMaxSize = 200
DefaultTriggerPagerTTL = time.Second * 1800
DefaultTriggerPagerTTL = time.Minute * 30

Check failure on line 86 in api/config.go

View workflow job for this annotation

GitHub Actions / lint

File is not `gofmt`-ed with `-s` (gofmt)
)

// PagerLimits contains all limits applied for pagers.
type PagerLimits struct {
// TTL is the amount of time that the pager will be exist
TTL time.Duration
}

// LimitsConfig contains limits for some entities.
type LimitsConfig struct {
// Pager contains limits for pagers.
Pager PagerLimits
// Trigger contains limits for triggers.
Trigger TriggerLimits
// Trigger contains limits for teams.
Expand All @@ -98,15 +106,16 @@ type LimitsConfig struct {
type TriggerLimits struct {
// MaxNameSize is the amount of characters allowed in trigger name.
MaxNameSize int
PagerTTL time.Duration
}

// GetTestLimitsConfig is used for testing.
func GetTestLimitsConfig() LimitsConfig {
return LimitsConfig{
Pager: PagerLimits{
TTL: DefaultTriggerPagerTTL,
},
Trigger: TriggerLimits{
MaxNameSize: DefaultTriggerNameMaxSize,
PagerTTL: DefaultTriggerPagerTTL,
},
Team: TeamLimits{
MaxNameSize: DefaultTeamNameMaxSize,
Expand Down
4 changes: 2 additions & 2 deletions api/controller/triggers_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -604,12 +604,12 @@ func TestSearchTriggers(t *testing.T) {
Convey("Create pager", func() {
searchOptions.Page = 0
searchOptions.Size = -1
searchOptions.PagerTTL = time.Hour
searchOptions.CreatePager = true
searchOptions.PagerTTL = time.Hour * 2
exp = 31
gomock.InOrder(
mockIndex.EXPECT().SearchTriggers(searchOptions).Return(triggerSearchResults, exp, nil),
mockDatabase.EXPECT().SaveTriggersSearchResults(gomock.Any(), triggerSearchResults, searchOptions.PagerTTL).Return(nil).Do(func(pID string, _ interface{}, _ interface{}) {
mockDatabase.EXPECT().SaveTriggersSearchResults(gomock.Any(), triggerSearchResults, gomock.Any()).Return(nil).Do(func(pID string, _ interface{}, _ interface{}) {
searchOptions.PagerID = pID
}),
mockDatabase.EXPECT().GetTriggerChecks(triggerIDs).Return(triggersPointers, nil),
Expand Down
2 changes: 1 addition & 1 deletion api/handler/handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ func NewHandler(
router.Route("/user", user)
router.With(moiramiddle.Triggers(
apiConfig.MetricsTTL,
)).Route("/trigger", triggers(metricSourceProvider, searchIndex, &apiConfig.Limits.Trigger))
)).Route("/trigger", triggers(metricSourceProvider, searchIndex, &apiConfig.Limits.Pager))
router.Route("/tag", tag)
router.Route("/pattern", pattern)
router.Route("/event", event)
Expand Down
21 changes: 11 additions & 10 deletions api/handler/triggers.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ import (
"github.com/moira-alert/moira/expression"
)

func triggers(metricSourceProvider *metricSource.SourceProvider, searcher moira.Searcher, limitsConfig *api.TriggerLimits) func(chi.Router) {
func triggers(metricSourceProvider *metricSource.SourceProvider, searcher moira.Searcher, pagerLimitsConfig *api.PagerLimits) func(chi.Router) {
return func(router chi.Router) {
router.Use(middleware.MetricSourceProvider(metricSourceProvider))
router.Use(middleware.SearchIndexContext(searcher))
Expand All @@ -42,10 +42,10 @@ func triggers(metricSourceProvider *metricSource.SourceProvider, searcher moira.
router.Put("/", createTrigger)
router.Put("/check", triggerCheck)
router.Route("/{triggerId}", trigger)
router.With(middleware.Paginate(0, 10)).With(middleware.Pager(false, "", limitsConfig.PagerTTL)).Get("/search", searchTriggers)
router.With(middleware.Pager(false, "", limitsConfig.PagerTTL)).Delete("/search/pager", deletePager)
router.With(middleware.Paginate(0, 10)).With(middleware.Pager(false, "", pagerLimitsConfig.TTL)).Get("/search", searchTriggers)
router.With(middleware.Pager(false, "", pagerLimitsConfig.TTL)).Delete("/search/pager", deletePager)
// TODO: DEPRECATED method. Remove in Moira 2.6
router.With(middleware.Paginate(0, 10)).With(middleware.Pager(false, "", limitsConfig.PagerTTL)).Get("/page", searchTriggers)
router.With(middleware.Paginate(0, 10)).With(middleware.Pager(false, "", pagerLimitsConfig.TTL)).Get("/page", searchTriggers)
}
}

Expand Down Expand Up @@ -304,12 +304,13 @@ func triggerCheck(writer http.ResponseWriter, request *http.Request) {
// @tags trigger
// @produce json
// @param onlyProblems query boolean false "Only include problems" default(false)
// @param text query string false "Search text" default(cpu)
// @param p query integer false "Page number" default(0)
// @param size query integer false "Page size" default(10)
// @param createPager query boolean false "Create pager" default(false)
// @param pagerID query string false "Pager ID" default(bcba82f5-48cf-44c0-b7d6-e1d32c64a88c)
// @param createdBy query string false "Created By" default(moira.team)
// @param text query string false "Search text" default(cpu)
// @param p query integer false "Page number" default(0)
// @param size query integer false "Page size" default(10)
// @param createPager query boolean false "Create pager" default(false)
// @param pagerID query string false "Pager ID" default(bcba82f5-48cf-44c0-b7d6-e1d32c64a88c)
// @param pagerTTL query time.Duration false "Pager TTL" default(30m)
// @param createdBy query string false "Created By" default(moira.team)
// @success 200 {object} dto.TriggersList "Successfully fetched matching triggers"
// @failure 400 {object} api.ErrorInvalidRequestExample "Bad request from client"
// @failure 404 {object} api.ErrorNotFoundExample "Resource not found"
Expand Down
2 changes: 1 addition & 1 deletion api/middleware/context_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,7 @@ func TestPagerMiddleware(t *testing.T) {
defaultPagerTTL := time.Hour

Convey("with correct parameters", func() {
parameters := []string{"pagerID=test&createPager=true", "pagerID=test", "createPager=true", "", "pagerID=-1&createPager=true", "pagerID=test&createPager=-1"}
parameters := []string{"pagerID=test&createPager=true", "pagerID=test", "createPager=true", "", "pagerID=-1&createPager=true", "pagerID=test&createPager=-1", "pagerTTL=1000"}

for _, param := range parameters {
testRequestOk(
Expand Down
14 changes: 11 additions & 3 deletions cmd/api/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,17 +54,21 @@ type apiConfig struct {

// LimitsConfig contains configurable moira limits.
type LimitsConfig struct {
Pager PagerLimits `yaml:"pager"`
// Trigger contains the limits applied to triggers.
Trigger TriggerLimitsConfig `yaml:"trigger"`
// Team contains the limits applied to teams.
Team TeamLimitsConfig `yaml:"team"`
}

type PagerLimits struct {
TTL time.Duration `yaml:"ttl"`
}

// TriggerLimitsConfig represents the limits which will be applied to all triggers.
type TriggerLimitsConfig struct {
// MaxNameSize is the max amount of characters allowed in trigger name.
MaxNameSize int `yaml:"max_name_size"`
PagerTTL time.Duration `yaml:"pager_ttl"`
}

// TeamLimitsConfig represents the limits which will be applied to all teams.
Expand All @@ -78,9 +82,11 @@ type TeamLimitsConfig struct {
// ToLimits converts LimitsConfig to api.LimitsConfig.
func (conf LimitsConfig) ToLimits() api.LimitsConfig {
return api.LimitsConfig{
Pager: api.PagerLimits{
TTL: conf.Pager.TTL,
},
Trigger: api.TriggerLimits{
MaxNameSize: conf.Trigger.MaxNameSize,
PagerTTL: conf.Trigger.PagerTTL,
},
Team: api.TeamLimits{
MaxNameSize: conf.Team.MaxNameSize,
Expand Down Expand Up @@ -283,9 +289,11 @@ func getDefault() config {
Listen: ":8081",
EnableCORS: false,
Limits: LimitsConfig{
Pager: PagerLimits{
TTL: api.DefaultTriggerPagerTTL,
},
Trigger: TriggerLimitsConfig{
MaxNameSize: api.DefaultTriggerNameMaxSize,
PagerTTL: api.DefaultTriggerPagerTTL,
},
Team: TeamLimitsConfig{
MaxNameSize: api.DefaultTeamNameMaxSize,
Expand Down
4 changes: 3 additions & 1 deletion cmd/api/config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -89,9 +89,11 @@ func Test_webConfig_getDefault(t *testing.T) {
Listen: ":8081",
EnableCORS: false,
Limits: LimitsConfig{
Pager: PagerLimits{
TTL: api.DefaultTriggerPagerTTL,
},
Trigger: TriggerLimitsConfig{
MaxNameSize: api.DefaultTriggerNameMaxSize,
PagerTTL: api.DefaultTriggerPagerTTL,
},
Team: TeamLimitsConfig{
MaxNameSize: api.DefaultTeamNameMaxSize,
Expand Down

0 comments on commit b07a8ee

Please sign in to comment.