refactor-fix(backend-heuristics/db): create handlers for each session separately

This commit is contained in:
Alex Kaminskii 2022-05-11 19:04:14 +02:00
parent e65fa58ab5
commit a6f8857b89
3 changed files with 31 additions and 27 deletions

View file

@ -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)

View file

@ -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)

View file

@ -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