[MM-49993] Return error if there is no telemetry ID (#22438)
* return error if there is no telemetry ID * fix tests and apply review comments
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
b6d13806a7
Коммит
9252fff4d6
@@ -360,7 +360,11 @@ func NewServer(options ...Option) (*Server, error) {
|
||||
})
|
||||
s.htmlTemplateWatcher = htmlTemplateWatcher
|
||||
|
||||
s.telemetryService = telemetry.New(New(ServerConnector(s.Channels())), s.Store(), s.platform.SearchEngine, s.Log(), *s.Config().LogSettings.VerboseDiagnostics)
|
||||
s.telemetryService, err = telemetry.New(New(ServerConnector(s.Channels())), s.Store(), s.platform.SearchEngine, s.Log(), *s.Config().LogSettings.VerboseDiagnostics)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "unable to initialize telemetry service")
|
||||
}
|
||||
|
||||
s.platform.SetTelemetryId(s.TelemetryId()) // TODO: move this into platform once telemetry service moved to platform.
|
||||
|
||||
emailService, err := email.NewService(email.ServiceConfig{
|
||||
|
||||
@@ -5,6 +5,7 @@ package telemetry
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"runtime"
|
||||
@@ -25,8 +26,10 @@ import (
|
||||
)
|
||||
|
||||
const (
|
||||
DayMilliseconds = 24 * 60 * 60 * 1000
|
||||
MonthMilliseconds = 31 * DayMilliseconds
|
||||
DayMilliseconds = 24 * 60 * 60 * 1000
|
||||
MonthMilliseconds = 31 * DayMilliseconds
|
||||
DBAccessAttempts = 3
|
||||
DBAccessTimeoutSecs = 10
|
||||
|
||||
RudderKey = "placeholder_rudder_key"
|
||||
RudderDataplaneURL = "placeholder_rudder_dataplane_url"
|
||||
@@ -111,7 +114,7 @@ type RudderConfig struct {
|
||||
DataplaneURL string
|
||||
}
|
||||
|
||||
func New(srv ServerIface, dbStore store.Store, searchEngine *searchengine.Broker, log *mlog.Logger, verbose bool) *TelemetryService {
|
||||
func New(srv ServerIface, dbStore store.Store, searchEngine *searchengine.Broker, log *mlog.Logger, verbose bool) (*TelemetryService, error) {
|
||||
service := &TelemetryService{
|
||||
srv: srv,
|
||||
dbStore: dbStore,
|
||||
@@ -119,24 +122,37 @@ func New(srv ServerIface, dbStore store.Store, searchEngine *searchengine.Broker
|
||||
log: log,
|
||||
verbose: verbose,
|
||||
}
|
||||
service.ensureTelemetryID()
|
||||
return service
|
||||
|
||||
if err := service.ensureTelemetryID(); err != nil {
|
||||
return nil, fmt.Errorf("unable to ensure telemetry ID: %w", err)
|
||||
}
|
||||
|
||||
return service, nil
|
||||
}
|
||||
|
||||
func (ts *TelemetryService) ensureTelemetryID() {
|
||||
func (ts *TelemetryService) ensureTelemetryID() error {
|
||||
if ts.TelemetryID != "" {
|
||||
return
|
||||
return nil
|
||||
}
|
||||
|
||||
id := model.NewId()
|
||||
systemID := &model.System{Name: model.SystemTelemetryId, Value: id}
|
||||
systemID, err := ts.dbStore.System().InsertIfExists(systemID)
|
||||
if err != nil {
|
||||
ts.log.Error("unable to get the telemetry ID", mlog.Err(err))
|
||||
return
|
||||
var err error
|
||||
|
||||
for i := 0; i < DBAccessAttempts; i++ {
|
||||
ts.log.Info("Ensuring the telemetry ID", mlog.String("id", id))
|
||||
systemID := &model.System{Name: model.SystemTelemetryId, Value: id}
|
||||
systemID, err = ts.dbStore.System().InsertIfExists(systemID)
|
||||
if err != nil {
|
||||
ts.log.Info("Unable to get/set the telemetry ID", mlog.Err(err))
|
||||
time.Sleep(DBAccessTimeoutSecs * time.Second)
|
||||
continue
|
||||
}
|
||||
|
||||
ts.TelemetryID = systemID.Value
|
||||
return nil
|
||||
}
|
||||
|
||||
ts.TelemetryID = systemID.Value
|
||||
return fmt.Errorf("unable to get the telemetry ID: %w", err)
|
||||
}
|
||||
|
||||
func (ts *TelemetryService) getRudderConfig() RudderConfig {
|
||||
|
||||
@@ -119,7 +119,9 @@ func makeTelemetryServiceAndReceiver(t *testing.T, cloudLicense bool) (*Telemetr
|
||||
pchan <- p
|
||||
}))
|
||||
|
||||
service := New(serverIfaceMock, storeMock, searchengine.NewBroker(cfg), testLogger, false)
|
||||
service, err := New(serverIfaceMock, storeMock, searchengine.NewBroker(cfg), testLogger, false)
|
||||
require.NoError(t, err)
|
||||
|
||||
service.TelemetryID = testTelemetryID
|
||||
service.rudderClient = nil
|
||||
service.initRudder(receiver.URL, RudderKey)
|
||||
@@ -297,7 +299,9 @@ func TestEnsureTelemetryID(t *testing.T) {
|
||||
|
||||
testLogger, _ := mlog.NewLogger()
|
||||
|
||||
telemetryService := New(serverIfaceMock, storeMock, searchengine.NewBroker(cfg), testLogger, false)
|
||||
telemetryService, err := New(serverIfaceMock, storeMock, searchengine.NewBroker(cfg), testLogger, false)
|
||||
require.NoError(t, err)
|
||||
|
||||
assert.Equal(t, "test", telemetryService.TelemetryID)
|
||||
|
||||
telemetryService.ensureTelemetryID()
|
||||
@@ -330,7 +334,9 @@ func TestEnsureTelemetryID(t *testing.T) {
|
||||
|
||||
testLogger, _ := mlog.NewLogger()
|
||||
|
||||
telemetryService := New(serverIfaceMock, storeMock, searchengine.NewBroker(cfg), testLogger, false)
|
||||
telemetryService, err := New(serverIfaceMock, storeMock, searchengine.NewBroker(cfg), testLogger, false)
|
||||
require.NoError(t, err)
|
||||
|
||||
assert.Equal(t, generatedID, telemetryService.TelemetryID)
|
||||
})
|
||||
|
||||
@@ -340,7 +346,7 @@ func TestEnsureTelemetryID(t *testing.T) {
|
||||
systemStore := storeMocks.SystemStore{}
|
||||
|
||||
insertError := errors.New("insert error")
|
||||
systemStore.On("InsertIfExists", mock.AnythingOfType("*model.System")).Return(nil, insertError).Once()
|
||||
systemStore.On("InsertIfExists", mock.AnythingOfType("*model.System")).Return(nil, insertError).Times(DBAccessAttempts)
|
||||
|
||||
storeMock.On("System").Return(&systemStore)
|
||||
|
||||
@@ -350,8 +356,8 @@ func TestEnsureTelemetryID(t *testing.T) {
|
||||
|
||||
testLogger, _ := mlog.NewLogger()
|
||||
|
||||
telemetryService := New(serverIfaceMock, storeMock, searchengine.NewBroker(cfg), testLogger, false)
|
||||
assert.Equal(t, "", telemetryService.TelemetryID)
|
||||
_, err := New(serverIfaceMock, storeMock, searchengine.NewBroker(cfg), testLogger, false)
|
||||
require.Error(t, err)
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
Ссылка в новой задаче
Block a user