@@ -4,12 +4,13 @@ import (
4
4
"encoding/json"
5
5
"errors"
6
6
"fmt"
7
- "github.com/harness/ff-golang-server-sdk/sdk_codes"
8
7
"regexp"
9
8
"sort"
10
9
"strconv"
11
10
"strings"
12
11
12
+ "github.com/harness/ff-golang-server-sdk/sdk_codes"
13
+
13
14
"github.com/harness/ff-golang-server-sdk/logger"
14
15
15
16
"github.com/harness/ff-golang-server-sdk/rest"
@@ -96,11 +97,13 @@ func (e Evaluator) evaluateClause(clause *rest.Clause, target *Target) bool {
96
97
97
98
operator := clause .Op
98
99
if operator == "" {
100
+ e .logger .Warnf ("Clause has no valid operator: Clause (%v)" , clause )
99
101
return false
100
102
}
101
103
102
104
attrValue := getAttrValue (target , clause .Attribute )
103
105
if operator != segmentMatchOperator && ! attrValue .IsValid () {
106
+ e .logger .Debugf ("Operator is not a segment match and attribute value is not valid: Operator (%s), attributeVal (%s)" , operator , attrValue .String ())
104
107
return false
105
108
}
106
109
@@ -154,6 +157,7 @@ func (e Evaluator) evaluateRule(servingRule *rest.ServingRule, target *Target) b
154
157
155
158
func (e Evaluator ) evaluateRules (servingRules []rest.ServingRule , target * Target ) string {
156
159
if target == nil || servingRules == nil {
160
+ e .logger .Debugf ("Serving Rules or Target are Nil" )
157
161
return ""
158
162
}
159
163
@@ -162,6 +166,9 @@ func (e Evaluator) evaluateRules(servingRules []rest.ServingRule, target *Target
162
166
})
163
167
for i := range servingRules {
164
168
rule := servingRules [i ]
169
+ if len (rule .Clauses ) == 0 {
170
+ e .logger .Warnf ("Serving Rule has no Clauses: Rule (%v)" , rule )
171
+ }
165
172
// if evaluation is false just continue to next rule
166
173
if ! e .evaluateRule (& rule , target ) {
167
174
continue
@@ -174,7 +181,10 @@ func (e Evaluator) evaluateRules(servingRules []rest.ServingRule, target *Target
174
181
175
182
// rule matched, here must be variation if distribution is undefined or null
176
183
if rule .Serve .Variation != nil {
184
+ e .logger .Debugf ("Rule Matched for Target(%v), Variation returned (%v)" , target , rule .Serve .Variation )
177
185
return * rule .Serve .Variation
186
+ } else {
187
+ e .logger .Warnf ("No Variation on Serve for Rule (%v), Target (%v)" , rule , target )
178
188
}
179
189
}
180
190
return ""
@@ -201,6 +211,7 @@ func (e Evaluator) evaluateVariationMap(variationsMap []rest.VariationMap, targe
201
211
if variationMap .Targets != nil {
202
212
for _ , t := range * variationMap .Targets {
203
213
if * t .Identifier != "" && * t .Identifier == target .Identifier {
214
+ e .logger .Debugf ("Specific targeting matched in Variation Map: Variation Map (%v) Target(%v), Variation returned (%s)" , t .Identifier , target , variationMap .Variation )
204
215
return variationMap .Variation
205
216
}
206
217
}
@@ -230,6 +241,8 @@ func (e Evaluator) evaluateFlag(fc rest.FeatureConfig, target *Target) (rest.Var
230
241
if variation == "" && fc .DefaultServe .Variation != nil {
231
242
variation = * fc .DefaultServe .Variation
232
243
}
244
+ } else {
245
+ e .logger .Debugf ("Flag is off: Flag(%s)" , fc .Feature )
233
246
}
234
247
235
248
if variation != "" {
@@ -245,11 +258,12 @@ func (e Evaluator) isTargetIncludedOrExcludedInSegment(segmentList []string, tar
245
258
for _ , segmentIdentifier := range segmentList {
246
259
segment , err := e .query .GetSegment (segmentIdentifier )
247
260
if err != nil {
261
+ e .logger .Errorf ("Error on GetSegment returning false. Target (%v), Segment (%s)" , target , segmentIdentifier )
248
262
return false
249
263
}
250
264
// Should Target be excluded - if in excluded list we return false
251
265
if segment .Excluded != nil && isTargetInList (target , * segment .Excluded ) {
252
- e .logger .Debugf ("Target %s excluded from segment %s via exclude list" , target . Name , segment . Name )
266
+ e .logger .Debugf ("Target (%v) excluded from segment %s via exclude list" , target , segmentIdentifier )
253
267
return false
254
268
}
255
269
@@ -341,7 +355,10 @@ func (e Evaluator) evaluateAll(target *Target) ([]FlagVariation, error) {
341
355
return variations , err
342
356
}
343
357
for _ , f := range flags {
344
- v , _ := e .getVariationForTheFlag (f , target )
358
+ v , err := e .getVariationForTheFlag (f , target )
359
+ if err != nil {
360
+ e .logger .Warnf ("Error Getting Variation for Flag: Flag (%s), Target (%v), Err: %s" , f .Feature , target , err )
361
+ }
345
362
variations = append (variations , FlagVariation {f .Feature , f .Kind , v })
346
363
}
347
364
@@ -355,18 +372,20 @@ func (e Evaluator) Evaluate(identifier string, target *Target) (FlagVariation, e
355
372
356
373
// this is evaluating flag.
357
374
func (e Evaluator ) evaluate (identifier string , target * Target ) (FlagVariation , error ) {
358
-
375
+ e . logger . Debugf ( "Evaluating: Flag(%s) Target(%v)" , identifier , target )
359
376
if e .query == nil {
360
377
e .logger .Errorf (ErrQueryProviderMissing .Error ())
361
378
return FlagVariation {}, ErrQueryProviderMissing
362
379
}
363
380
flag , err := e .query .GetFlag (identifier )
364
381
if err != nil {
382
+ e .logger .Warnf ("Error Getting Flag: Flag (%s), Target(%v), Err: %s" , identifier , target , err )
365
383
return FlagVariation {}, err
366
384
}
367
385
368
386
variation , err := e .getVariationForTheFlag (& flag , target )
369
387
if err != nil {
388
+ e .logger .Warnf ("Error Getting Variation for Flag: Flag (%s), Target(%v), Err: %s" , identifier , target , err )
370
389
return FlagVariation {}, err
371
390
}
372
391
return FlagVariation {flag .Feature , flag .Kind , variation }, nil
0 commit comments