Skip to content

Commit 1235b8a

Browse files
committed
chore: reduce cognitive complexity
1 parent 1c17a54 commit 1235b8a

File tree

1 file changed

+54
-29
lines changed

1 file changed

+54
-29
lines changed

cmd/relayproxy/service/gofeatureflag.go

+54-29
Original file line numberDiff line numberDiff line change
@@ -41,75 +41,100 @@ func NewGoFeatureFlagClient(
4141
logger *zap.Logger,
4242
notifiers []notifier.Notifier,
4343
) (*ffclient.GoFeatureFlag, error) {
44-
var mainRetriever retriever.Retriever
45-
var err error
46-
4744
if proxyConf == nil {
4845
return nil, fmt.Errorf("proxy config is empty")
4946
}
5047

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+
5186
if proxyConf.Retriever != nil {
5287
mainRetriever, err = initRetriever(proxyConf.Retriever)
5388
if err != nil {
54-
return nil, err
89+
return nil, nil, err
5590
}
5691
}
5792

58-
// Manage if we have more than 1 retriever
5993
retrievers := make([]retriever.Retriever, 0)
6094
if proxyConf.Retrievers != nil {
6195
for _, r := range *proxyConf.Retrievers {
6296
currentRetriever, err := initRetriever(&r)
6397
if err != nil {
64-
return nil, err
98+
return nil, nil, err
6599
}
66100
retrievers = append(retrievers, currentRetriever)
67101
}
68102
}
69103

104+
return mainRetriever, retrievers, nil
105+
}
106+
107+
func initExporters(proxyConf *config.Config) (ffclient.DataExporter, []ffclient.DataExporter, error) {
70108
var mainDataExporter ffclient.DataExporter
109+
var err error
110+
71111
if proxyConf.Exporter != nil {
72112
mainDataExporter, err = initDataExporter(proxyConf.Exporter)
73113
if err != nil {
74-
return nil, err
114+
return ffclient.DataExporter{}, nil, err
75115
}
76116
}
77117

78-
// Manage the case where we have multiple data exporters
79118
dataExporters := make([]ffclient.DataExporter, 0)
80119
if proxyConf.Exporters != nil {
81120
for _, e := range *proxyConf.Exporters {
82121
currentExporter, err := initDataExporter(&e)
83122
if err != nil {
84-
return nil, err
123+
return ffclient.DataExporter{}, nil, err
85124
}
86125
dataExporters = append(dataExporters, currentExporter)
87126
}
88127
}
89128

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)
91134
if err != nil {
92135
return nil, err
93136
}
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
113138
}
114139

115140
// initRetriever initialize the retriever based on the configuration

0 commit comments

Comments
 (0)