* feat(backend): small refactoring in integrations * feat(backend): ignore context timeout error
48 lines
1.1 KiB
Go
48 lines
1.1 KiB
Go
package integrations
|
|
|
|
import (
|
|
"log"
|
|
"openreplay/backend/pkg/integrations/clients"
|
|
"openreplay/backend/pkg/integrations/model"
|
|
)
|
|
|
|
type Manager struct {
|
|
clientMap clients.ClientMap
|
|
Events chan *clients.SessionErrorEvent
|
|
Errors chan error
|
|
RequestDataUpdates chan model.Integration // not pointer because it could change in other thread
|
|
}
|
|
|
|
func NewManager() *Manager {
|
|
return &Manager{
|
|
clientMap: make(clients.ClientMap),
|
|
RequestDataUpdates: make(chan model.Integration, 100),
|
|
Events: make(chan *clients.SessionErrorEvent, 100),
|
|
Errors: make(chan error, 100),
|
|
}
|
|
}
|
|
|
|
func (m *Manager) Update(i *model.Integration) (err error) {
|
|
log.Printf("Integration initialization: %v\n", *i)
|
|
key := i.GetKey()
|
|
if i.Options == nil {
|
|
delete(m.clientMap, key)
|
|
return nil
|
|
}
|
|
c, exists := m.clientMap[key]
|
|
if !exists {
|
|
c, err = clients.NewClient(i, m.RequestDataUpdates, m.Events, m.Errors)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
m.clientMap[key] = c
|
|
}
|
|
return c.Update(i)
|
|
}
|
|
|
|
func (m *Manager) RequestAll() {
|
|
log.Printf("Requesting all...\n")
|
|
for _, c := range m.clientMap {
|
|
go c.Request()
|
|
}
|
|
}
|