@@ -543,9 +543,6 @@ func Test_MissingLabels(t *testing.T) {
543543 },
544544 }
545545 params := api.PromEncode {
546- ExpiryTime : api.Duration {
547- Duration : time .Duration (60 * time .Second ),
548- },
549546 Metrics : []api.MetricsItem {
550547 {
551548 Name : "my_counter" ,
@@ -588,9 +585,6 @@ func Test_Remap(t *testing.T) {
588585 },
589586 }
590587 params := api.PromEncode {
591- ExpiryTime : api.Duration {
592- Duration : time .Duration (60 * time .Second ),
593- },
594588 Metrics : []api.MetricsItem {
595589 {
596590 Name : "my_counter" ,
@@ -616,6 +610,204 @@ func Test_Remap(t *testing.T) {
616610 require .Contains (t , exposed , `my_counter{ip="10.0.0.3",namespace="B"} 4` )
617611}
618612
613+ func Test_WithListField (t * testing.T ) {
614+ metrics := []config.GenericMap {
615+ {
616+ "namespace" : "A" ,
617+ "interfaces" : []string {"eth0" , "123456" },
618+ "bytes" : 7 ,
619+ },
620+ {
621+ "namespace" : "A" ,
622+ "interfaces" : []any {"eth0" , "abcdef" },
623+ "bytes" : 1 ,
624+ },
625+ {
626+ "namespace" : "A" ,
627+ "interfaces" : []any {"eth0" , "xyz" },
628+ "bytes" : 10 ,
629+ },
630+ {
631+ "namespace" : "B" ,
632+ "bytes" : 2 ,
633+ },
634+ {
635+ "namespace" : "C" ,
636+ "interfaces" : []string {},
637+ "bytes" : 3 ,
638+ },
639+ }
640+ params := api.PromEncode {
641+ Metrics : []api.MetricsItem {
642+ {
643+ Name : "my_counter" ,
644+ Type : "counter" ,
645+ ValueKey : "bytes" ,
646+ Filters : []api.MetricsFilter {
647+ {Key : "interfaces" , Value : "xyz" , Type : api .MetricFilterNotEqual },
648+ },
649+ Flatten : []string {"interfaces" },
650+ Labels : []string {"namespace" , "interfaces" },
651+ Remap : map [string ]string {"interfaces" : "interface" },
652+ },
653+ },
654+ }
655+
656+ encodeProm , err := initProm (& params )
657+ require .NoError (t , err )
658+ for _ , metric := range metrics {
659+ encodeProm .Encode (metric )
660+ }
661+ time .Sleep (100 * time .Millisecond )
662+
663+ exposed := test .ReadExposedMetrics (t , encodeProm .server )
664+
665+ require .Contains (t , exposed , `my_counter{interface="eth0",namespace="A"} 18` )
666+ require .Contains (t , exposed , `my_counter{interface="123456",namespace="A"} 7` )
667+ require .Contains (t , exposed , `my_counter{interface="abcdef",namespace="A"} 1` )
668+ require .Contains (t , exposed , `my_counter{interface="",namespace="B"} 2` )
669+ require .Contains (t , exposed , `my_counter{interface="",namespace="C"} 3` )
670+ require .NotContains (t , exposed , `"xyz"` )
671+ }
672+
673+ func Test_WithObjectListField (t * testing.T ) {
674+ metrics := []config.GenericMap {
675+ {
676+ "namespace" : "A" ,
677+ "events" : []any {
678+ config.GenericMap {"type" : "acl" , "name" : "my_policy" },
679+ },
680+ "bytes" : 1 ,
681+ },
682+ {
683+ "namespace" : "A" ,
684+ "events" : []any {
685+ config.GenericMap {"type" : "egress" , "name" : "my_egress" },
686+ config.GenericMap {"type" : "acl" , "name" : "my_policy" },
687+ },
688+ "bytes" : 10 ,
689+ },
690+ {
691+ "namespace" : "B" ,
692+ "bytes" : 2 ,
693+ },
694+ {
695+ "namespace" : "C" ,
696+ "events" : []string {},
697+ "bytes" : 3 ,
698+ },
699+ }
700+ params := api.PromEncode {
701+ Metrics : []api.MetricsItem {
702+ {
703+ Name : "policy_counter" ,
704+ Type : "counter" ,
705+ ValueKey : "bytes" ,
706+ Filters : []api.MetricsFilter {
707+ {Key : "events>type" , Value : "acl" , Type : api .MetricFilterEqual },
708+ },
709+ Labels : []string {"namespace" , "events>name" },
710+ Flatten : []string {"events" },
711+ Remap : map [string ]string {"events>name" : "name" },
712+ },
713+ },
714+ }
715+
716+ encodeProm , err := initProm (& params )
717+ require .NoError (t , err )
718+ for _ , metric := range metrics {
719+ encodeProm .Encode (metric )
720+ }
721+ time .Sleep (100 * time .Millisecond )
722+
723+ exposed := test .ReadExposedMetrics (t , encodeProm .server )
724+
725+ require .Contains (t , exposed , `policy_counter{name="my_policy",namespace="A"} 11` )
726+ require .NotContains (t , exposed , `"my_egress"` )
727+ require .NotContains (t , exposed , `"B"` )
728+ require .NotContains (t , exposed , `"C"` )
729+ }
730+
731+ func Test_WithObjectListField_bis (t * testing.T ) {
732+ metrics := []config.GenericMap {
733+ {
734+ "namespace" : "A" ,
735+ "events" : []any {
736+ config.GenericMap {"type" : "egress" , "name" : "my_egress" },
737+ config.GenericMap {"type" : "acl" , "name" : "my_policy" },
738+ },
739+ "bytes" : 10 ,
740+ },
741+ }
742+ params := api.PromEncode {
743+ Metrics : []api.MetricsItem {
744+ {
745+ Name : "policy_counter" ,
746+ Type : "counter" ,
747+ ValueKey : "bytes" ,
748+ Filters : []api.MetricsFilter {
749+ {Key : "events>type" , Value : "acl" , Type : api .MetricFilterEqual },
750+ },
751+ Flatten : []string {"events" },
752+ Labels : []string {"namespace" },
753+ },
754+ },
755+ }
756+
757+ encodeProm , err := initProm (& params )
758+ require .NoError (t , err )
759+ for _ , metric := range metrics {
760+ encodeProm .Encode (metric )
761+ }
762+ time .Sleep (100 * time .Millisecond )
763+
764+ exposed := test .ReadExposedMetrics (t , encodeProm .server )
765+
766+ require .Contains (t , exposed , `policy_counter{namespace="A"} 10` )
767+ require .NotContains (t , exposed , `"my_egress"` )
768+ require .NotContains (t , exposed , `"B"` )
769+ require .NotContains (t , exposed , `"C"` )
770+ }
771+
772+ func Test_WithObjectListField_ter (t * testing.T ) {
773+ metrics := []config.GenericMap {
774+ {
775+ "namespace" : "A" ,
776+ "events" : []any {
777+ config.GenericMap {"type" : "egress" , "name" : "my_egress" },
778+ config.GenericMap {"type" : "acl" , "name" : "my_policy" },
779+ },
780+ "bytes" : 10 ,
781+ },
782+ }
783+ params := api.PromEncode {
784+ Metrics : []api.MetricsItem {
785+ {
786+ Name : "policy_counter" ,
787+ Type : "counter" ,
788+ ValueKey : "bytes" ,
789+ Labels : []string {"namespace" , "events>name" },
790+ Flatten : []string {"events" },
791+ Remap : map [string ]string {"events>name" : "name" },
792+ },
793+ },
794+ }
795+
796+ encodeProm , err := initProm (& params )
797+ require .NoError (t , err )
798+ for _ , metric := range metrics {
799+ encodeProm .Encode (metric )
800+ }
801+ time .Sleep (100 * time .Millisecond )
802+
803+ exposed := test .ReadExposedMetrics (t , encodeProm .server )
804+
805+ require .Contains (t , exposed , `policy_counter{name="my_policy",namespace="A"} 10` )
806+ require .Contains (t , exposed , `policy_counter{name="my_egress",namespace="A"} 10` )
807+ require .NotContains (t , exposed , `"B"` )
808+ require .NotContains (t , exposed , `"C"` )
809+ }
810+
619811func buildFlow () config.GenericMap {
620812 return config.GenericMap {
621813 "srcIP" : "10.0.0." + strconv .Itoa (rand .Intn (20 )),
@@ -754,12 +946,3 @@ func Test_MultipleProm(t *testing.T) {
754946
755947 // TODO: Add test for different addresses, but need to deal with StartPromServer (ListenAndServe)
756948}
757-
758- func Test_Filters_extractVarLookups (t * testing.T ) {
759- variables := extractVarLookups ("$(abc)--$(def)" )
760-
761- require .Equal (t , [][]string {{"$(abc)" , "abc" }, {"$(def)" , "def" }}, variables )
762-
763- variables = extractVarLookups ("" )
764- require .Empty (t , variables )
765- }
0 commit comments