@@ -13,6 +13,9 @@ import (
13
13
"sync"
14
14
"time"
15
15
16
+ "github.com/prometheus/client_golang/prometheus"
17
+
18
+ "github.com/prometheus/client_golang/prometheus"
16
19
"go.uber.org/zap"
17
20
18
21
"github.com/ava-labs/avalanchego/api/health"
@@ -490,15 +493,15 @@ func (m *manager) buildChain(chainParams ChainParameters, sb subnets.Subnet) (*c
490
493
return nil , fmt .Errorf ("error while creating chain's log %w" , err )
491
494
}
492
495
493
- snowmanMetrics , err := metrics . MakeAndRegister (
496
+ snowmanMetrics , registerSnowmanMetrics := makeAndRegister (
494
497
m .snowmanGatherer ,
495
498
primaryAlias ,
496
499
)
497
500
if err != nil {
498
501
return nil , err
499
502
}
500
503
501
- vmMetrics , err := m .getOrMakeVMRegisterer (chainParams .VMID , primaryAlias )
504
+ vmMetrics , registerChainMetrics , err := m .getOrMakeVMRegisterer (chainParams .VMID , primaryAlias )
502
505
if err != nil {
503
506
return nil , err
504
507
}
@@ -601,7 +604,7 @@ func (m *manager) buildChain(chainParams ChainParameters, sb subnets.Subnet) (*c
601
604
return nil , err
602
605
}
603
606
604
- return chain , nil
607
+ return chain , errors . Join ( registerChainMetrics (), registerSnowmanMetrics ())
605
608
}
606
609
607
610
func (m * manager ) AddRegistrant (r Registrant ) {
@@ -1558,7 +1561,7 @@ func (m *manager) getChainConfig(id ids.ID) (ChainConfig, error) {
1558
1561
return ChainConfig {}, nil
1559
1562
}
1560
1563
1561
- func (m * manager ) getOrMakeVMRegisterer (vmID ids.ID , chainAlias string ) (metrics.MultiGatherer , error ) {
1564
+ func (m * manager ) getOrMakeVMRegisterer (vmID ids.ID , chainAlias string ) (metrics.MultiGatherer , func () error , error ) {
1562
1565
vmGatherer , ok := m .vmGatherer [vmID ]
1563
1566
if ! ok {
1564
1567
vmName := constants .VMName (vmID )
@@ -1569,15 +1572,27 @@ func (m *manager) getOrMakeVMRegisterer(vmID ids.ID, chainAlias string) (metrics
1569
1572
vmGatherer ,
1570
1573
)
1571
1574
if err != nil {
1572
- return nil , err
1575
+ return nil , nil , err
1573
1576
}
1574
1577
m .vmGatherer [vmID ] = vmGatherer
1575
1578
}
1576
1579
1577
1580
chainReg := metrics .NewPrefixGatherer ()
1578
- err := vmGatherer .Register (
1579
- chainAlias ,
1580
- chainReg ,
1581
- )
1582
- return chainReg , err
1581
+
1582
+ return chainReg , func () error {
1583
+ return vmGatherer .Register (
1584
+ chainAlias ,
1585
+ chainReg ,
1586
+ )
1587
+ }, nil
1588
+ }
1589
+
1590
+ func makeAndRegister (gatherer metrics.MultiGatherer , name string ) (* prometheus.Registry , func () error ) {
1591
+ reg := prometheus .NewRegistry ()
1592
+ return reg , func () error {
1593
+ if err := gatherer .Register (name , reg ); err != nil {
1594
+ return fmt .Errorf ("couldn't register %q metrics: %w" , name , err )
1595
+ }
1596
+ return nil
1597
+ }
1583
1598
}
0 commit comments