@@ -4,12 +4,13 @@ import (
44 "encoding/json"
55 "errors"
66 "fmt"
7- "github.com/harness/ff-golang-server-sdk/sdk_codes"
87 "regexp"
98 "sort"
109 "strconv"
1110 "strings"
1211
12+ "github.com/harness/ff-golang-server-sdk/sdk_codes"
13+
1314 "github.com/harness/ff-golang-server-sdk/logger"
1415
1516 "github.com/harness/ff-golang-server-sdk/rest"
@@ -96,11 +97,13 @@ func (e Evaluator) evaluateClause(clause *rest.Clause, target *Target) bool {
9697
9798 operator := clause .Op
9899 if operator == "" {
100+ e .logger .Warnf ("Clause has no valid operator: Clause (%v)" , clause )
99101 return false
100102 }
101103
102104 attrValue := getAttrValue (target , clause .Attribute )
103105 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 ())
104107 return false
105108 }
106109
@@ -154,6 +157,7 @@ func (e Evaluator) evaluateRule(servingRule *rest.ServingRule, target *Target) b
154157
155158func (e Evaluator ) evaluateRules (servingRules []rest.ServingRule , target * Target ) string {
156159 if target == nil || servingRules == nil {
160+ e .logger .Debugf ("Serving Rules or Target are Nil" )
157161 return ""
158162 }
159163
@@ -162,6 +166,9 @@ func (e Evaluator) evaluateRules(servingRules []rest.ServingRule, target *Target
162166 })
163167 for i := range servingRules {
164168 rule := servingRules [i ]
169+ if len (rule .Clauses ) == 0 {
170+ e .logger .Warnf ("Serving Rule has no Clauses: Rule (%v)" , rule )
171+ }
165172 // if evaluation is false just continue to next rule
166173 if ! e .evaluateRule (& rule , target ) {
167174 continue
@@ -174,7 +181,10 @@ func (e Evaluator) evaluateRules(servingRules []rest.ServingRule, target *Target
174181
175182 // rule matched, here must be variation if distribution is undefined or null
176183 if rule .Serve .Variation != nil {
184+ e .logger .Debugf ("Rule Matched for Target(%v), Variation returned (%v)" , target , rule .Serve .Variation )
177185 return * rule .Serve .Variation
186+ } else {
187+ e .logger .Warnf ("No Variation on Serve for Rule (%v), Target (%v)" , rule , target )
178188 }
179189 }
180190 return ""
@@ -201,6 +211,7 @@ func (e Evaluator) evaluateVariationMap(variationsMap []rest.VariationMap, targe
201211 if variationMap .Targets != nil {
202212 for _ , t := range * variationMap .Targets {
203213 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 )
204215 return variationMap .Variation
205216 }
206217 }
@@ -230,6 +241,8 @@ func (e Evaluator) evaluateFlag(fc rest.FeatureConfig, target *Target) (rest.Var
230241 if variation == "" && fc .DefaultServe .Variation != nil {
231242 variation = * fc .DefaultServe .Variation
232243 }
244+ } else {
245+ e .logger .Debugf ("Flag is off: Flag(%s)" , fc .Feature )
233246 }
234247
235248 if variation != "" {
@@ -245,11 +258,12 @@ func (e Evaluator) isTargetIncludedOrExcludedInSegment(segmentList []string, tar
245258 for _ , segmentIdentifier := range segmentList {
246259 segment , err := e .query .GetSegment (segmentIdentifier )
247260 if err != nil {
261+ e .logger .Errorf ("Error on GetSegment returning false. Target (%v), Segment (%s)" , target , segmentIdentifier )
248262 return false
249263 }
250264 // Should Target be excluded - if in excluded list we return false
251265 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 )
253267 return false
254268 }
255269
@@ -341,7 +355,10 @@ func (e Evaluator) evaluateAll(target *Target) ([]FlagVariation, error) {
341355 return variations , err
342356 }
343357 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+ }
345362 variations = append (variations , FlagVariation {f .Feature , f .Kind , v })
346363 }
347364
@@ -355,18 +372,20 @@ func (e Evaluator) Evaluate(identifier string, target *Target) (FlagVariation, e
355372
356373// this is evaluating flag.
357374func (e Evaluator ) evaluate (identifier string , target * Target ) (FlagVariation , error ) {
358-
375+ e . logger . Debugf ( "Evaluating: Flag(%s) Target(%v)" , identifier , target )
359376 if e .query == nil {
360377 e .logger .Errorf (ErrQueryProviderMissing .Error ())
361378 return FlagVariation {}, ErrQueryProviderMissing
362379 }
363380 flag , err := e .query .GetFlag (identifier )
364381 if err != nil {
382+ e .logger .Warnf ("Error Getting Flag: Flag (%s), Target(%v), Err: %s" , identifier , target , err )
365383 return FlagVariation {}, err
366384 }
367385
368386 variation , err := e .getVariationForTheFlag (& flag , target )
369387 if err != nil {
388+ e .logger .Warnf ("Error Getting Variation for Flag: Flag (%s), Target(%v), Err: %s" , identifier , target , err )
370389 return FlagVariation {}, err
371390 }
372391 return FlagVariation {flag .Feature , flag .Kind , variation }, nil
0 commit comments