From adcf9a6cfd289e398982970a7de94094db6c0d97 Mon Sep 17 00:00:00 2001 From: Eric Lippmann Date: Tue, 27 Apr 2021 23:33:49 +0200 Subject: [PATCH 1/3] Add EntityFactoryFunc.WithInit() --- pkg/contracts/contracts.go | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/pkg/contracts/contracts.go b/pkg/contracts/contracts.go index 037f82bd..25513aa7 100644 --- a/pkg/contracts/contracts.go +++ b/pkg/contracts/contracts.go @@ -49,6 +49,17 @@ type Checksumer interface { // EntityFactoryFunc knows how to create an Entity. type EntityFactoryFunc func() Entity +// WithInit calls Init() on the created Entity if applicable. +func (f EntityFactoryFunc) WithInit() Entity { + e := f() + + if initer, ok := e.(Initer); ok { + initer.Init() + } + + return e +} + // Waiter implements the Wait method, // which blocks until execution is complete. type Waiter interface { From 3a4c96fa2ec984a954d721bd377fa05aab266506 Mon Sep 17 00:00:00 2001 From: Eric Lippmann Date: Tue, 27 Apr 2021 23:34:35 +0200 Subject: [PATCH 2/3] Introduce v1.Factories --- pkg/icingadb/v1/v1.go | 53 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 pkg/icingadb/v1/v1.go diff --git a/pkg/icingadb/v1/v1.go b/pkg/icingadb/v1/v1.go new file mode 100644 index 00000000..8eacf1b6 --- /dev/null +++ b/pkg/icingadb/v1/v1.go @@ -0,0 +1,53 @@ +package v1 + +import ( + "github.com/icinga/icingadb/pkg/contracts" +) + +var Factories = []contracts.EntityFactoryFunc{ + NewActionUrl, + NewCheckcommand, + NewCheckcommandArgument, + NewCheckcommandCustomvar, + NewCheckcommandEnvvar, + NewComment, + NewCustomvar, + NewDowntime, + NewEndpoint, + NewEventcommand, + NewEventcommandArgument, + NewEventcommandCustomvar, + NewEventcommandEnvvar, + NewHost, + NewHostCustomvar, + NewHostgroup, + NewHostgroupCustomvar, + NewHostgroupMember, + NewIconImage, + NewNotesUrl, + NewNotification, + NewNotificationcommand, + NewNotificationcommandArgument, + NewNotificationcommandCustomvar, + NewNotificationcommandEnvvar, + NewNotificationCustomvar, + NewNotificationRecipient, + NewNotificationUser, + NewNotificationUsergroup, + NewService, + NewServiceCustomvar, + NewServicegroup, + NewServicegroupCustomvar, + NewServicegroupMember, + NewTimeperiod, + NewTimeperiodCustomvar, + NewTimeperiodOverrideExclude, + NewTimeperiodOverrideInclude, + NewTimeperiodRange, + NewUser, + NewUserCustomvar, + NewUsergroup, + NewUsergroupCustomvar, + NewUsergroupMember, + NewZone, +} From 4fbcd4c90f9e38a3b03d756b3208a7cdf1e81a24 Mon Sep 17 00:00:00 2001 From: Eric Lippmann Date: Tue, 27 Apr 2021 23:34:47 +0200 Subject: [PATCH 3/3] Move factories away from main and use v1.Factories --- cmd/icingadb/main.go | 62 +++----------------------------------------- 1 file changed, 3 insertions(+), 59 deletions(-) diff --git a/cmd/icingadb/main.go b/cmd/icingadb/main.go index ae22ba9b..875754a2 100644 --- a/cmd/icingadb/main.go +++ b/cmd/icingadb/main.go @@ -4,7 +4,6 @@ import ( "context" "fmt" "github.com/icinga/icingadb/internal/command" - "github.com/icinga/icingadb/pkg/contracts" "github.com/icinga/icingadb/pkg/icingadb" "github.com/icinga/icingadb/pkg/icingadb/history" v1 "github.com/icinga/icingadb/pkg/icingadb/v1" @@ -52,66 +51,11 @@ func main() { go func() { g, synctx := errgroup.WithContext(hactx) - for _, factoryFunc := range []contracts.EntityFactoryFunc{ - v1.NewActionUrl, - v1.NewCheckcommand, - v1.NewCheckcommandArgument, - v1.NewCheckcommandCustomvar, - v1.NewCheckcommandEnvvar, - v1.NewComment, - v1.NewCustomvar, - v1.NewDowntime, - v1.NewEndpoint, - v1.NewEventcommand, - v1.NewEventcommandArgument, - v1.NewEventcommandCustomvar, - v1.NewEventcommandEnvvar, - v1.NewHost, - v1.NewHostCustomvar, - v1.NewHostgroup, - v1.NewHostgroupCustomvar, - v1.NewHostgroupMember, - v1.NewIconImage, - v1.NewNotesUrl, - v1.NewNotification, - v1.NewNotificationcommand, - v1.NewNotificationcommandArgument, - v1.NewNotificationcommandCustomvar, - v1.NewNotificationcommandEnvvar, - v1.NewNotificationCustomvar, - v1.NewNotificationRecipient, - v1.NewNotificationUser, - v1.NewNotificationUsergroup, - v1.NewService, - v1.NewServiceCustomvar, - v1.NewServicegroup, - v1.NewServicegroupCustomvar, - v1.NewServicegroupMember, - v1.NewTimeperiod, - v1.NewTimeperiodCustomvar, - v1.NewTimeperiodOverrideExclude, - v1.NewTimeperiodOverrideInclude, - v1.NewTimeperiodRange, - v1.NewUser, - v1.NewUserCustomvar, - v1.NewUsergroup, - v1.NewUsergroupCustomvar, - v1.NewUsergroupMember, - v1.NewZone, - } { - factoryFunc := factoryFunc - - ff := func() contracts.Entity { - v := factoryFunc() - if initer, ok := v.(contracts.Initer); ok { - initer.Init() - } - - return v - } + for _, factory := range v1.Factories { + factory := factory g.Go(func() error { - return s.Sync(synctx, ff) + return s.Sync(synctx, factory.WithInit) }) }