diff --git a/backend/cmd/db/main.go b/backend/cmd/db/main.go index 8236586c2..d3ba45017 100644 --- a/backend/cmd/db/main.go +++ b/backend/cmd/db/main.go @@ -30,15 +30,17 @@ func main() { pg := cache.NewPGCache(postgres.NewConn(cfg.Postgres), cfg.ProjectExpirationTimeoutMs) defer pg.Close() - // Declare message handlers we want to apply for each incoming message - msgHandlers := []handlers.MessageProcessor{ - custom.NewMainHandler(), // TODO: separate to several handler - //custom.NewInputEventBuilder(), - //custom.NewPageEventBuilder(), + // HandlersFabric returns the list of message handlers we want to be applied to each incoming message. + handlersFabric := func() { + return []handlers.MessageProcessor{ + custom.NewMainHandler(), // TODO: separate to several handler + //custom.NewInputEventBuilder(), + //custom.NewPageEventBuilder(), + } } // Create handler's aggregator - builderMap := builder.NewBuilderMap(msgHandlers...) + builderMap := builder.NewBuilderMap(handlersFabric) // Init modules saver := datasaver.New(pg) diff --git a/backend/cmd/heuristics/main.go b/backend/cmd/heuristics/main.go index 9c77cb4ba..5543f85e1 100644 --- a/backend/cmd/heuristics/main.go +++ b/backend/cmd/heuristics/main.go @@ -25,24 +25,26 @@ func main() { // Load service configuration cfg := ender.New() - // Declare message handlers we want to apply for each incoming message - msgHandlers := []handlers.MessageProcessor{ - // web handlers - &web.ClickRageDetector{}, - &web.CpuIssueDetector{}, - &web.DeadClickDetector{}, - &web.MemoryIssueDetector{}, - &web.PerformanceAggregator{}, - // iOS handlers - &ios.AppNotResponding{}, - &ios.ClickRageDetector{}, - &ios.PerformanceAggregator{}, - // Other handlers (you can add your custom handlers here) - &custom.CustomHandler{}, + // HandlersFabric returns the list of message handlers we want to be applied to each incoming message. + handlersFabric := func() { + return []handlers.MessageProcessor{ + // web handlers + &web.ClickRageDetector{}, + &web.CpuIssueDetector{}, + &web.DeadClickDetector{}, + &web.MemoryIssueDetector{}, + &web.PerformanceAggregator{}, + // iOS handlers + &ios.AppNotResponding{}, + &ios.ClickRageDetector{}, + &ios.PerformanceAggregator{}, + // Other handlers (you can add your custom handlers here) + &custom.CustomHandler{}, + } } // Create handler's aggregator - builderMap := builder.NewBuilderMap(msgHandlers...) + builderMap := builder.NewBuilderMap(handlersFabric) // Init logger statsLogger := logger.NewQueueStats(cfg.LoggerTimeout) diff --git a/backend/internal/builder/builderMap.go b/backend/internal/builder/builderMap.go index f6d81b995..ed47abdce 100644 --- a/backend/internal/builder/builderMap.go +++ b/backend/internal/builder/builderMap.go @@ -6,21 +6,21 @@ import ( ) type builderMap struct { - handlers []handlers.MessageProcessor - sessions map[uint64]*builder + handlersFabric func() []handlers.MessageProcessor + sessions map[uint64]*builder } -func NewBuilderMap(handlers ...handlers.MessageProcessor) *builderMap { +func NewBuilderMap(handlersFabric func() []handlers.MessageProcessor) *builderMap { return &builderMap{ - handlers: handlers, - sessions: make(map[uint64]*builder), + handlersFabric: handlersFabric, + sessions: make(map[uint64]*builder), } } func (m *builderMap) GetBuilder(sessionID uint64) *builder { b := m.sessions[sessionID] if b == nil { - b = NewBuilder(m.handlers...) // Should create new instances + b = NewBuilder(m.handlersFabric()) // Should create new instances m.sessions[sessionID] = b } return b