@@ -512,7 +512,7 @@ func (o Objective) Burnrate(timerange time.Duration) string {
512
512
513
513
return expr .String ()
514
514
case LatencyNative :
515
- expr , err := parser .ParseExpr (`1 - histogram_fraction(0,0.696969, rate(metric{matchers="total"}[1s]))` )
515
+ expr , err := parser .ParseExpr (`1 - histogram_fraction(0,0.696969, sum( rate(metric{matchers="total"}[1s]) ))` )
516
516
if err != nil {
517
517
return err .Error ()
518
518
}
@@ -911,7 +911,7 @@ func (o Objective) IncreaseRules() (monitoringv1.RuleGroup, error) {
911
911
}
912
912
}
913
913
914
- expr , err := parser .ParseExpr (`histogram_count(increase(metric{matchers="total"}[1s]))` )
914
+ expr , err := parser .ParseExpr (`histogram_count(sum( increase(metric{matchers="total"}[1s]) ))` )
915
915
if err != nil {
916
916
return monitoringv1.RuleGroup {}, err
917
917
}
@@ -929,7 +929,7 @@ func (o Objective) IncreaseRules() (monitoringv1.RuleGroup, error) {
929
929
Labels : ruleLabels ,
930
930
})
931
931
932
- expr , err = parser .ParseExpr (`histogram_fraction(0, 0.696969, increase(metric{matchers="total"}[1s])) * histogram_count(increase(metric{matchers="total"}[1s]))` )
932
+ expr , err = parser .ParseExpr (`histogram_fraction(0, 0.696969, sum( increase(metric{matchers="total"}[1s]))) * histogram_count(sum( increase(metric{matchers="total"}[1s]) ))` )
933
933
if err != nil {
934
934
return monitoringv1.RuleGroup {}, err
935
935
}
@@ -1384,6 +1384,47 @@ func (o Objective) GenericRules() (monitoringv1.RuleGroup, error) {
1384
1384
Labels : ruleLabels ,
1385
1385
})
1386
1386
}
1387
+ case LatencyNative :
1388
+ latencySeconds := time .Duration (o .Indicator .LatencyNative .Latency ).Seconds ()
1389
+
1390
+ // availability
1391
+ {
1392
+ expr , err := parser .ParseExpr (`sum(metric{matchers="errors"} or vector(0)) / sum(metric{matchers="total"})` )
1393
+ if err != nil {
1394
+ return monitoringv1.RuleGroup {}, err
1395
+ }
1396
+
1397
+ metric := increaseName (o .Indicator .LatencyNative .Total .Name , o .Window )
1398
+ matchers := o .Indicator .LatencyNative .Total .LabelMatchers
1399
+ for _ , m := range matchers {
1400
+ if m .Name == labels .MetricName {
1401
+ m .Value = metric
1402
+ break
1403
+ }
1404
+ }
1405
+ matchers = append (matchers , & labels.Matcher {
1406
+ Type : labels .MatchEqual ,
1407
+ Name : "slo" ,
1408
+ Value : o .Name (),
1409
+ })
1410
+
1411
+ errorMatchers := slices .Clone (matchers )
1412
+ errorMatchers = append (errorMatchers , & labels.Matcher {Type : labels .MatchEqual , Name : "le" , Value : fmt .Sprintf ("%g" , latencySeconds )})
1413
+ matchers = append (matchers , & labels.Matcher {Type : labels .MatchEqual , Name : "le" , Value : "" })
1414
+
1415
+ objectiveReplacer {
1416
+ metric : metric ,
1417
+ matchers : matchers ,
1418
+ errorMatchers : errorMatchers ,
1419
+ window : time .Duration (o .Window ),
1420
+ }.replace (expr )
1421
+
1422
+ rules = append (rules , monitoringv1.Rule {
1423
+ Record : "pyrra_availability" ,
1424
+ Expr : intstr .FromString (expr .String ()),
1425
+ Labels : ruleLabels ,
1426
+ })
1427
+ }
1387
1428
1388
1429
case BoolGauge :
1389
1430
if len (o .Indicator .BoolGauge .Grouping ) > 0 {
0 commit comments