@@ -472,32 +472,39 @@ func (r *Ruler) newManager(ctx context.Context, userID string) (*promRules.Manag
472
472
473
473
// GetRules retrieves the running rules from this ruler and all running rulers in the ring if
474
474
// sharding is enabled
475
- func (r * Ruler ) GetRules (ctx context.Context , userID string ) ([]* rules.RuleGroupDesc , error ) {
475
+ func (r * Ruler ) GetRules (ctx context.Context ) ([]* GroupStateDesc , error ) {
476
+ userID , err := user .ExtractOrgID (ctx )
477
+ if err != nil {
478
+ return nil , fmt .Errorf ("no user id found in context" )
479
+ }
480
+
476
481
if r .cfg .EnableSharding {
477
- return r .getShardedRules (ctx , userID )
482
+ return r .getShardedRules (ctx )
478
483
}
479
484
480
485
return r .getLocalRules (userID )
481
486
}
482
487
483
- func (r * Ruler ) getLocalRules (userID string ) ([]* rules. RuleGroupDesc , error ) {
488
+ func (r * Ruler ) getLocalRules (userID string ) ([]* GroupStateDesc , error ) {
484
489
var groups []* promRules.Group
485
490
r .userManagerMtx .Lock ()
486
491
if mngr , exists := r .userManagers [userID ]; exists {
487
492
groups = mngr .RuleGroups ()
488
493
}
489
494
r .userManagerMtx .Unlock ()
490
495
491
- groupDescs := make ([]* rules. RuleGroupDesc , 0 , len (groups ))
496
+ groupDescs := make ([]* GroupStateDesc , 0 , len (groups ))
492
497
prefix := filepath .Join (r .cfg .RulePath , userID ) + "/"
493
498
494
499
for _ , group := range groups {
495
500
interval := group .Interval ()
496
- groupDesc := & rules.RuleGroupDesc {
497
- Name : group .Name (),
498
- Namespace : strings .TrimPrefix (group .File (), prefix ),
499
- Interval : interval ,
500
- User : userID ,
501
+ groupDesc := & GroupStateDesc {
502
+ Group : & rules.RuleGroupDesc {
503
+ Name : group .Name (),
504
+ Namespace : strings .TrimPrefix (group .File (), prefix ),
505
+ Interval : interval ,
506
+ User : userID ,
507
+ },
501
508
EvaluationTimestamp : group .GetEvaluationTimestamp (),
502
509
EvaluationDuration : group .GetEvaluationDuration (),
503
510
}
@@ -507,13 +514,13 @@ func (r *Ruler) getLocalRules(userID string) ([]*rules.RuleGroupDesc, error) {
507
514
lastError = r .LastError ().Error ()
508
515
}
509
516
510
- var ruleDesc * rules. RuleDesc
517
+ var ruleDesc * RuleStateDesc
511
518
switch rule := r .(type ) {
512
519
case * promRules.AlertingRule :
513
520
rule .ActiveAlerts ()
514
- alerts := []* rules. AlertDesc {}
521
+ alerts := []* AlertStateDesc {}
515
522
for _ , a := range rule .ActiveAlerts () {
516
- alerts = append (alerts , & rules. AlertDesc {
523
+ alerts = append (alerts , & AlertStateDesc {
517
524
State : a .State .String (),
518
525
Labels : client .FromLabelsToLabelAdapters (a .Labels ),
519
526
Annotations : client .FromLabelsToLabelAdapters (a .Annotations ),
@@ -525,12 +532,14 @@ func (r *Ruler) getLocalRules(userID string) ([]*rules.RuleGroupDesc, error) {
525
532
ValidUntil : a .ValidUntil ,
526
533
})
527
534
}
528
- ruleDesc = & rules.RuleDesc {
529
- Expr : rule .Query ().String (),
530
- Alert : rule .Name (),
531
- For : rule .Duration (),
532
- Labels : client .FromLabelsToLabelAdapters (rule .Labels ()),
533
- Annotations : client .FromLabelsToLabelAdapters (rule .Annotations ()),
535
+ ruleDesc = & RuleStateDesc {
536
+ Rule : & rules.RuleDesc {
537
+ Expr : rule .Query ().String (),
538
+ Alert : rule .Name (),
539
+ For : rule .Duration (),
540
+ Labels : client .FromLabelsToLabelAdapters (rule .Labels ()),
541
+ Annotations : client .FromLabelsToLabelAdapters (rule .Annotations ()),
542
+ },
534
543
State : rule .State ().String (),
535
544
Health : string (rule .Health ()),
536
545
LastError : lastError ,
@@ -539,10 +548,12 @@ func (r *Ruler) getLocalRules(userID string) ([]*rules.RuleGroupDesc, error) {
539
548
EvaluationDuration : rule .GetEvaluationDuration (),
540
549
}
541
550
case * promRules.RecordingRule :
542
- ruleDesc = & rules.RuleDesc {
543
- Record : rule .Name (),
544
- Expr : rule .Query ().String (),
545
- Labels : client .FromLabelsToLabelAdapters (rule .Labels ()),
551
+ ruleDesc = & RuleStateDesc {
552
+ Rule : & rules.RuleDesc {
553
+ Record : rule .Name (),
554
+ Expr : rule .Query ().String (),
555
+ Labels : client .FromLabelsToLabelAdapters (rule .Labels ()),
556
+ },
546
557
Health : string (rule .Health ()),
547
558
LastError : lastError ,
548
559
EvaluationTimestamp : rule .GetEvaluationTimestamp (),
@@ -551,14 +562,14 @@ func (r *Ruler) getLocalRules(userID string) ([]*rules.RuleGroupDesc, error) {
551
562
default :
552
563
return nil , errors .Errorf ("failed to assert type of rule '%v'" , rule .Name ())
553
564
}
554
- groupDesc .Rules = append (groupDesc .Rules , ruleDesc )
565
+ groupDesc .ActiveRules = append (groupDesc .ActiveRules , ruleDesc )
555
566
}
556
567
groupDescs = append (groupDescs , groupDesc )
557
568
}
558
569
return groupDescs , nil
559
570
}
560
571
561
- func (r * Ruler ) getShardedRules (ctx context.Context , userID string ) ([]* rules. RuleGroupDesc , error ) {
572
+ func (r * Ruler ) getShardedRules (ctx context.Context ) ([]* GroupStateDesc , error ) {
562
573
rulers , err := r .ring .GetAll ()
563
574
if err != nil {
564
575
return nil , err
@@ -569,9 +580,7 @@ func (r *Ruler) getShardedRules(ctx context.Context, userID string) ([]*rules.Ru
569
580
return nil , fmt .Errorf ("unable to inject user ID into grpc request, %v" , err )
570
581
}
571
582
572
- // len(rgs) can't be larger than len(rulers.Ingesters)
573
- // alloc it in advance to avoid realloc
574
- rgs := make ([]* rules.RuleGroupDesc , 0 , len (rulers .Ingesters ))
583
+ rgs := []* GroupStateDesc {}
575
584
576
585
for _ , rlr := range rulers .Ingesters {
577
586
conn , err := grpc .Dial (rlr .Addr , grpc .WithInsecure ())
0 commit comments