[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
Этот коммит содержится в:
Ibrahim Serdar Acikgoz
2023-03-15 08:56:28 +03:00
коммит произвёл GitHub
родитель b6d13806a7
Коммит 9252fff4d6
3 изменённых файлов: 46 добавлений и 20 удалений

Просмотреть файл

@@ -360,7 +360,11 @@ func NewServer(options ...Option) (*Server, error) {
}) })
s.htmlTemplateWatcher = htmlTemplateWatcher 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. s.platform.SetTelemetryId(s.TelemetryId()) // TODO: move this into platform once telemetry service moved to platform.
emailService, err := email.NewService(email.ServiceConfig{ emailService, err := email.NewService(email.ServiceConfig{

Просмотреть файл

@@ -5,6 +5,7 @@ package telemetry
import ( import (
"context" "context"
"fmt"
"os" "os"
"path/filepath" "path/filepath"
"runtime" "runtime"
@@ -27,6 +28,8 @@ import (
const ( const (
DayMilliseconds = 24 * 60 * 60 * 1000 DayMilliseconds = 24 * 60 * 60 * 1000
MonthMilliseconds = 31 * DayMilliseconds MonthMilliseconds = 31 * DayMilliseconds
DBAccessAttempts = 3
DBAccessTimeoutSecs = 10
RudderKey = "placeholder_rudder_key" RudderKey = "placeholder_rudder_key"
RudderDataplaneURL = "placeholder_rudder_dataplane_url" RudderDataplaneURL = "placeholder_rudder_dataplane_url"
@@ -111,7 +114,7 @@ type RudderConfig struct {
DataplaneURL string 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{ service := &TelemetryService{
srv: srv, srv: srv,
dbStore: dbStore, dbStore: dbStore,
@@ -119,24 +122,37 @@ func New(srv ServerIface, dbStore store.Store, searchEngine *searchengine.Broker
log: log, log: log,
verbose: verbose, 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 != "" { if ts.TelemetryID != "" {
return return nil
} }
id := model.NewId() id := model.NewId()
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 := &model.System{Name: model.SystemTelemetryId, Value: id}
systemID, err := ts.dbStore.System().InsertIfExists(systemID) systemID, err = ts.dbStore.System().InsertIfExists(systemID)
if err != nil { if err != nil {
ts.log.Error("unable to get the telemetry ID", mlog.Err(err)) ts.log.Info("Unable to get/set the telemetry ID", mlog.Err(err))
return time.Sleep(DBAccessTimeoutSecs * time.Second)
continue
} }
ts.TelemetryID = systemID.Value ts.TelemetryID = systemID.Value
return nil
}
return fmt.Errorf("unable to get the telemetry ID: %w", err)
} }
func (ts *TelemetryService) getRudderConfig() RudderConfig { func (ts *TelemetryService) getRudderConfig() RudderConfig {

Просмотреть файл

@@ -119,7 +119,9 @@ func makeTelemetryServiceAndReceiver(t *testing.T, cloudLicense bool) (*Telemetr
pchan <- p 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.TelemetryID = testTelemetryID
service.rudderClient = nil service.rudderClient = nil
service.initRudder(receiver.URL, RudderKey) service.initRudder(receiver.URL, RudderKey)
@@ -297,7 +299,9 @@ func TestEnsureTelemetryID(t *testing.T) {
testLogger, _ := mlog.NewLogger() 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) assert.Equal(t, "test", telemetryService.TelemetryID)
telemetryService.ensureTelemetryID() telemetryService.ensureTelemetryID()
@@ -330,7 +334,9 @@ func TestEnsureTelemetryID(t *testing.T) {
testLogger, _ := mlog.NewLogger() 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) assert.Equal(t, generatedID, telemetryService.TelemetryID)
}) })
@@ -340,7 +346,7 @@ func TestEnsureTelemetryID(t *testing.T) {
systemStore := storeMocks.SystemStore{} systemStore := storeMocks.SystemStore{}
insertError := errors.New("insert error") 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) storeMock.On("System").Return(&systemStore)
@@ -350,8 +356,8 @@ func TestEnsureTelemetryID(t *testing.T) {
testLogger, _ := mlog.NewLogger() testLogger, _ := mlog.NewLogger()
telemetryService := New(serverIfaceMock, storeMock, searchengine.NewBroker(cfg), testLogger, false) _, err := New(serverIfaceMock, storeMock, searchengine.NewBroker(cfg), testLogger, false)
assert.Equal(t, "", telemetryService.TelemetryID) require.Error(t, err)
}) })
} }