@@ -41,75 +41,100 @@ func NewGoFeatureFlagClient(
41
41
logger * zap.Logger ,
42
42
notifiers []notifier.Notifier ,
43
43
) (* ffclient.GoFeatureFlag , error ) {
44
- var mainRetriever retriever.Retriever
45
- var err error
46
-
47
44
if proxyConf == nil {
48
45
return nil , fmt .Errorf ("proxy config is empty" )
49
46
}
50
47
48
+ mainRetriever , retrievers , err := initRetrievers (proxyConf )
49
+ if err != nil {
50
+ return nil , err
51
+ }
52
+
53
+ mainDataExporter , dataExporters , err := initExporters (proxyConf )
54
+ if err != nil {
55
+ return nil , err
56
+ }
57
+
58
+ notif , err := initNotifiers (proxyConf .Notifiers , notifiers )
59
+ if err != nil {
60
+ return nil , err
61
+ }
62
+
63
+ f := ffclient.Config {
64
+ PollingInterval : time .Duration (proxyConf .PollingInterval ) * time .Millisecond ,
65
+ LeveledLogger : slog .New (slogzap.Option {Level : slog .LevelDebug , Logger : logger }.NewZapHandler ()),
66
+ Context : context .Background (),
67
+ Retriever : mainRetriever ,
68
+ Retrievers : retrievers ,
69
+ Notifiers : notif ,
70
+ FileFormat : proxyConf .FileFormat ,
71
+ DataExporter : mainDataExporter ,
72
+ DataExporters : dataExporters ,
73
+ StartWithRetrieverError : proxyConf .StartWithRetrieverError ,
74
+ EnablePollingJitter : proxyConf .EnablePollingJitter ,
75
+ EvaluationContextEnrichment : proxyConf .EvaluationContextEnrichment ,
76
+ PersistentFlagConfigurationFile : proxyConf .PersistentFlagConfigurationFile ,
77
+ }
78
+
79
+ return ffclient .New (f )
80
+ }
81
+
82
+ func initRetrievers (proxyConf * config.Config ) (retriever.Retriever , []retriever.Retriever , error ) {
83
+ var mainRetriever retriever.Retriever
84
+ var err error
85
+
51
86
if proxyConf .Retriever != nil {
52
87
mainRetriever , err = initRetriever (proxyConf .Retriever )
53
88
if err != nil {
54
- return nil , err
89
+ return nil , nil , err
55
90
}
56
91
}
57
92
58
- // Manage if we have more than 1 retriever
59
93
retrievers := make ([]retriever.Retriever , 0 )
60
94
if proxyConf .Retrievers != nil {
61
95
for _ , r := range * proxyConf .Retrievers {
62
96
currentRetriever , err := initRetriever (& r )
63
97
if err != nil {
64
- return nil , err
98
+ return nil , nil , err
65
99
}
66
100
retrievers = append (retrievers , currentRetriever )
67
101
}
68
102
}
69
103
104
+ return mainRetriever , retrievers , nil
105
+ }
106
+
107
+ func initExporters (proxyConf * config.Config ) (ffclient.DataExporter , []ffclient.DataExporter , error ) {
70
108
var mainDataExporter ffclient.DataExporter
109
+ var err error
110
+
71
111
if proxyConf .Exporter != nil {
72
112
mainDataExporter , err = initDataExporter (proxyConf .Exporter )
73
113
if err != nil {
74
- return nil , err
114
+ return ffclient. DataExporter {}, nil , err
75
115
}
76
116
}
77
117
78
- // Manage the case where we have multiple data exporters
79
118
dataExporters := make ([]ffclient.DataExporter , 0 )
80
119
if proxyConf .Exporters != nil {
81
120
for _ , e := range * proxyConf .Exporters {
82
121
currentExporter , err := initDataExporter (& e )
83
122
if err != nil {
84
- return nil , err
123
+ return ffclient. DataExporter {}, nil , err
85
124
}
86
125
dataExporters = append (dataExporters , currentExporter )
87
126
}
88
127
}
89
128
90
- notif , err := initNotifier (proxyConf .Notifiers )
129
+ return mainDataExporter , dataExporters , nil
130
+ }
131
+
132
+ func initNotifiers (configNotifiers []config.NotifierConf , additionalNotifiers []notifier.Notifier ) ([]notifier.Notifier , error ) {
133
+ notif , err := initNotifier (configNotifiers )
91
134
if err != nil {
92
135
return nil , err
93
136
}
94
- notif = append (notif , notifiers ... )
95
-
96
- f := ffclient.Config {
97
- PollingInterval : time .Duration (proxyConf .PollingInterval ) * time .Millisecond ,
98
- LeveledLogger : slog .New (slogzap.Option {Level : slog .LevelDebug , Logger : logger }.NewZapHandler ()),
99
- Context : context .Background (),
100
- Retriever : mainRetriever ,
101
- Retrievers : retrievers ,
102
- Notifiers : notif ,
103
- FileFormat : proxyConf .FileFormat ,
104
- DataExporter : mainDataExporter ,
105
- DataExporters : dataExporters ,
106
- StartWithRetrieverError : proxyConf .StartWithRetrieverError ,
107
- EnablePollingJitter : proxyConf .EnablePollingJitter ,
108
- EvaluationContextEnrichment : proxyConf .EvaluationContextEnrichment ,
109
- PersistentFlagConfigurationFile : proxyConf .PersistentFlagConfigurationFile ,
110
- }
111
-
112
- return ffclient .New (f )
137
+ return append (notif , additionalNotifiers ... ), nil
113
138
}
114
139
115
140
// initRetriever initialize the retriever based on the configuration
0 commit comments