diff --git a/analytics/config/config.go b/analytics/config/config.go index 0a474d5f68f..32eb19c7bd2 100644 --- a/analytics/config/config.go +++ b/analytics/config/config.go @@ -9,12 +9,20 @@ import ( "github.com/prebid/prebid-server/config" ) +type analyticsModule analytics.PBSAnalyticsModule + +type pbsAnalyticsModule struct { + enabledModules []analyticsModule +} + //Modules that need to be logged to need to be initialized here func NewPBSAnalytics(analytics *config.Analytics) analytics.PBSAnalyticsModule { - modules := make(enabledAnalytics, 0) + + instance := &pbsAnalyticsModule{enabledModules: make([]analyticsModule, 0)} + if len(analytics.File.Filename) > 0 { if mod, err := filesystem.NewFileLogger(analytics.File.Filename); err == nil { - modules = append(modules, mod) + instance.enabledModules = append(instance.enabledModules, mod) } else { glog.Fatalf("Could not initialize FileLogger for file %v :%v", analytics.File.Filename, err) } @@ -29,43 +37,40 @@ func NewPBSAnalytics(analytics *config.Analytics) analytics.PBSAnalyticsModule { analytics.Pubstack.Buffers.BufferSize, analytics.Pubstack.Buffers.Timeout) if err == nil { - modules = append(modules, pubstackModule) + instance.enabledModules = append(instance.enabledModules, pubstackModule) } else { glog.Fatalf("Could not initialize PubstackModule: %v", err) } } - return modules + return instance } -//Collection of all the correctly configured analytics modules - implements the PBSAnalyticsModule interface -type enabledAnalytics []analytics.PBSAnalyticsModule - -func (ea enabledAnalytics) LogAuctionObject(ao *analytics.AuctionObject) { - for _, module := range ea { +func (pam pbsAnalyticsModule) LogAuctionObject(ao *analytics.AuctionObject) { + for _, module := range pam.enabledModules { module.LogAuctionObject(ao) } } -func (ea enabledAnalytics) LogVideoObject(vo *analytics.VideoObject) { - for _, module := range ea { +func (pam pbsAnalyticsModule) LogVideoObject(vo *analytics.VideoObject) { + for _, module := range pam.enabledModules { module.LogVideoObject(vo) } } -func (ea enabledAnalytics) LogCookieSyncObject(cso *analytics.CookieSyncObject) { - for _, module := range ea { +func (pam pbsAnalyticsModule) LogCookieSyncObject(cso *analytics.CookieSyncObject) { + for _, module := range pam.enabledModules { module.LogCookieSyncObject(cso) } } -func (ea enabledAnalytics) LogSetUIDObject(so *analytics.SetUIDObject) { - for _, module := range ea { +func (pam pbsAnalyticsModule) LogSetUIDObject(so *analytics.SetUIDObject) { + for _, module := range pam.enabledModules { module.LogSetUIDObject(so) } } -func (ea enabledAnalytics) LogAmpObject(ao *analytics.AmpObject) { - for _, module := range ea { +func (pam pbsAnalyticsModule) LogAmpObject(ao *analytics.AmpObject) { + for _, module := range pam.enabledModules { module.LogAmpObject(ao) } } diff --git a/analytics/config/config_test.go b/analytics/config/config_test.go index 7d97fb5f1be..2fcace98b99 100644 --- a/analytics/config/config_test.go +++ b/analytics/config/config_test.go @@ -1,6 +1,7 @@ package config import ( + "github.com/stretchr/testify/assert" "net/http" "os" "testing" @@ -67,9 +68,11 @@ func (m *sampleModule) LogSetUIDObject(so *analytics.SetUIDObject) { *m.count++ func (m *sampleModule) LogAmpObject(ao *analytics.AmpObject) { *m.count++ } func initAnalytics(count *int) analytics.PBSAnalyticsModule { - modules := make(enabledAnalytics, 0) - modules = append(modules, &sampleModule{count}) - return &modules + instance := &pbsAnalyticsModule{ + enabledModules: make([]analyticsModule, 0), + } + instance.enabledModules = append(instance.enabledModules, &sampleModule{count}) + return instance } func TestNewPBSAnalytics(t *testing.T) { @@ -79,13 +82,9 @@ func TestNewPBSAnalytics(t *testing.T) { } } defer os.RemoveAll(TEST_DIR) - mod := NewPBSAnalytics(&config.Analytics{File: config.FileLogs{Filename: TEST_DIR + "/test"}}) - switch modType := mod.(type) { - case enabledAnalytics: - if len(enabledAnalytics(modType)) != 1 { - t.Fatalf("Failed to add analytics module") - } - default: - t.Fatalf("Failed to initialize analytics module") - } + pbsAnalytics := NewPBSAnalytics(&config.Analytics{File: config.FileLogs{Filename: TEST_DIR + "/test"}}) + instance := pbsAnalytics.(*pbsAnalyticsModule) + + assert.Equal(t, len(instance.enabledModules), 1) + assert.NotNil(t, instance.enabledModules[0].(analyticsModule)) }