@@ -24,7 +24,6 @@ import (
24
24
"github.com/xmidt-org/clortho/clorthozap"
25
25
"github.com/xmidt-org/touchstone"
26
26
"go.opentelemetry.io/contrib/instrumentation/github.com/gorilla/mux/otelmux"
27
- "go.uber.org/multierr"
28
27
"go.uber.org/zap"
29
28
30
29
"github.com/xmidt-org/webpa-common/secure/handler"
@@ -69,16 +68,19 @@ const (
69
68
deviceID = "deviceID"
70
69
71
70
enforceCheck = "enforce"
71
+
72
+ zapWRPValidatorLabel = "wrp_validator_level"
72
73
)
73
74
74
75
// Default values
75
76
const (
76
77
UnknownPartner = "unknown"
77
78
)
78
79
79
- var errNoDeviceName = errors .New ("no device name" )
80
-
81
- type validators []wrpvalidator.Validator
80
+ var (
81
+ errNoDeviceName = errors .New ("no device name" )
82
+ errWRPValidatorConfigError = errors .New ("failed to configure wrp validators" )
83
+ )
82
84
83
85
func authChain (v * viper.Viper , logger * zap.Logger , registry xmetrics.Registry , tf * touchstone.Factory ) (alice.Chain , error ) {
84
86
if registry == nil {
@@ -581,25 +583,31 @@ func validateWRP(v *viper.Viper, logger *zap.Logger, tf *touchstone.Factory) (fu
581
583
582
584
if valsConig := v .Get (wrpValidatorConfigKey ); valsConig != nil {
583
585
if b , err := json .Marshal (valsConig ); err != nil {
584
- return nil , err
586
+ return nil , errors . Join ( errWRPValidatorConfigError , err )
585
587
} else if err = json .Unmarshal (b , & vals ); err != nil {
586
- return nil , err
588
+ return nil , errors . Join ( errWRPValidatorConfigError , err )
587
589
}
588
590
589
591
labelNames := []string {wrpvalidator .ClientIDLabel , wrpvalidator .PartnerIDLabel , wrpvalidator .MessageTypeLabel }
590
592
for _ , v := range vals {
591
593
if err := v .AddMetric (tf , labelNames ... ); err != nil {
592
- errs = multierr . Append (errs , err )
594
+ errs = errors . Join (errs , err )
593
595
}
594
596
}
595
597
}
596
598
599
+ if errs != nil {
600
+ return nil , errors .Join (errWRPValidatorConfigError , errs )
601
+ }
602
+
597
603
return func (delegate http.Handler ) http.Handler {
598
604
return http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
599
605
if msg , ok := wrpcontext .GetMessage (r .Context ()); ok {
600
606
var (
607
+ infoErrors error
601
608
warningErrors error
602
609
failureError error
610
+ unknownError error
603
611
satClientID = "N/A"
604
612
partnerID = device .UnknownPartner
605
613
)
@@ -628,19 +636,35 @@ func validateWRP(v *viper.Viper, logger *zap.Logger, tf *touchstone.Factory) (fu
628
636
)
629
637
630
638
switch v .Level () {
631
- case wrpvalidator .ErrorLevel :
632
- failureError = multierr . Append ( failureError , err )
639
+ case wrpvalidator .InfoLevel :
640
+ infoErrors = errors . Join ( infoErrors , err )
633
641
case wrpvalidator .WarningLevel :
634
- warningErrors = multierr .Append (warningErrors , err )
642
+ warningErrors = errors .Join (warningErrors , err )
643
+ case wrpvalidator .ErrorLevel :
644
+ failureError = errors .Join (failureError , err )
645
+ default :
646
+ unknownError = errors .Join (unknownError , err )
635
647
}
636
648
}
637
649
650
+ if unknownError != nil {
651
+ logger .Warn ("WRP message validation errors found" ,
652
+ zap .Error (unknownError ), zap .String (zapWRPValidatorLabel , wrpvalidator .UnknownLevel .String ()))
653
+ }
654
+
655
+ if infoErrors != nil {
656
+ logger .Warn ("WRP message validation errors found" ,
657
+ zap .Error (infoErrors ), zap .String (zapWRPValidatorLabel , wrpvalidator .InfoLevel .String ()))
658
+ }
659
+
638
660
if warningErrors != nil {
639
- logger .Warn ("WRP message validation warnings found" , zap .Error (warningErrors ))
661
+ logger .Warn ("WRP message validation errors found" ,
662
+ zap .Error (warningErrors ), zap .String (zapWRPValidatorLabel , wrpvalidator .WarningLevel .String ()))
640
663
}
641
664
642
665
if failureError != nil {
643
- logger .Error ("WRP message validation failures found" , zap .Error (failureError ))
666
+ logger .Error ("WRP message validation (failure error level) found" ,
667
+ zap .Error (failureError ), zap .String (zapWRPValidatorLabel , wrpvalidator .ErrorLevel .String ()))
644
668
w .Header ().Set ("Content-Type" , "application/json" )
645
669
w .WriteHeader (http .StatusBadRequest )
646
670
fmt .Fprintf (
0 commit comments