55 "fmt"
66 "sync/atomic"
77
8+ "sigs.k8s.io/controller-runtime/pkg/client"
9+
810 "go.opentelemetry.io/otel/attribute"
911 "go.opentelemetry.io/otel/metric"
1012
@@ -20,16 +22,14 @@ type Observer struct {
2022 backupLastScheduleTime , backupLastSuccessfulTime metric.Int64ObservableGauge
2123}
2224
23- func Register (meter metric.Meter , cluster * apiv1. EtcdCluster ) (* Observer , error ) {
24- observer := & Observer {
25+ func Register (meter metric.Meter , key client. ObjectKey ) (* Observer , error ) {
26+ o := & Observer {
2527 attributes : attribute .NewSet (
26- attribute .String ("fleet.etcd.cluster.namespace" , cluster .Namespace ),
27- attribute .String ("fleet.etcd.cluster.name" , cluster .Name ),
28+ attribute .String ("fleet.etcd.cluster.namespace" , key .Namespace ),
29+ attribute .String ("fleet.etcd.cluster.name" , key .Name ),
2830 ),
2931 }
3032
31- observer .cluster .Store (cluster )
32-
3333 gauges := []struct {
3434 name string
3535 description string
@@ -38,42 +38,42 @@ func Register(meter metric.Meter, cluster *apiv1.EtcdCluster) (*Observer, error)
3838 {
3939 name : "fleet.etcd.cluster.desired_replicas" ,
4040 description : "Number of desired replicas" ,
41- dest : & observer .desiredReplicas ,
41+ dest : & o .desiredReplicas ,
4242 },
4343 {
4444 name : "fleet.etcd.cluster.replicas" ,
4545 description : "Number of replicas" ,
46- dest : & observer .replicas ,
46+ dest : & o .replicas ,
4747 },
4848 {
4949 name : "fleet.etcd.cluster.ready_replicas" ,
5050 description : "Number of ready replicas" ,
51- dest : & observer .readyReplicas ,
51+ dest : & o .readyReplicas ,
5252 },
5353 {
5454 name : "fleet.etcd.cluster.updated_replicas" ,
5555 description : "Number of updated replicas" ,
56- dest : & observer .updatedReplicas ,
56+ dest : & o .updatedReplicas ,
5757 },
5858 {
5959 name : "fleet.etcd.cluster.available_replicas" ,
6060 description : "Number of available replicas" ,
61- dest : & observer .availableReplicas ,
61+ dest : & o .availableReplicas ,
6262 },
6363 {
6464 name : "fleet.etcd.cluster.learner_replicas" ,
6565 description : "Number of learner replicas" ,
66- dest : & observer .learnerReplicas ,
66+ dest : & o .learnerReplicas ,
6767 },
6868 {
6969 name : "fleet.etcd.cluster.backup.last_schedule_time" ,
7070 description : "Last backup schedule time" ,
71- dest : & observer .backupLastScheduleTime ,
71+ dest : & o .backupLastScheduleTime ,
7272 },
7373 {
7474 name : "fleet.etcd.cluster.backup.last_successful_time" ,
7575 description : "Last backup successful time" ,
76- dest : & observer .backupLastSuccessfulTime ,
76+ dest : & o .backupLastSuccessfulTime ,
7777 },
7878 }
7979
@@ -88,40 +88,42 @@ func Register(meter metric.Meter, cluster *apiv1.EtcdCluster) (*Observer, error)
8888 observables = append (observables , observable )
8989 }
9090
91- registration , err := meter .RegisterCallback (func (ctx context.Context , o metric.Observer ) error {
92- cluster := observer .cluster .Load ()
93- if cluster == nil {
94- return nil
95- }
91+ registration , err := meter .RegisterCallback (o .Observe , observables ... )
92+ if err != nil {
93+ return nil , fmt .Errorf ("register callback: %w" , err )
94+ }
9695
97- opts := []metric.ObserveOption {
98- metric .WithAttributeSet (observer .attributes ),
99- }
96+ o .registration = registration
10097
101- o .ObserveInt64 (observer .desiredReplicas , int64 (cluster .Spec .Replicas ), opts ... )
102- o .ObserveInt64 (observer .replicas , int64 (cluster .Status .Replicas ), opts ... )
103- o .ObserveInt64 (observer .readyReplicas , int64 (cluster .Status .ReadyReplicas ), opts ... )
104- o .ObserveInt64 (observer .updatedReplicas , int64 (cluster .Status .UpdatedReplicas ), opts ... )
105- o .ObserveInt64 (observer .availableReplicas , int64 (cluster .Status .AvailableReplicas ), opts ... )
106- o .ObserveInt64 (observer .learnerReplicas , int64 (cluster .Status .LearnerReplicas ), opts ... )
98+ return o , nil
99+ }
107100
108- if cluster .Status .Backup != nil && cluster .Status .Backup .LastScheduleTime != nil {
109- o .ObserveInt64 (observer .backupLastScheduleTime , cluster .Status .Backup .LastScheduleTime .Unix (), opts ... )
110- }
101+ func (o * Observer ) Observe (ctx context.Context , observer metric.Observer ) error {
102+ cluster := o .cluster .Load ()
103+ if cluster == nil {
104+ return nil
105+ }
111106
112- if cluster . Status . Backup != nil && cluster . Status . Backup . LastSuccessfulTime != nil {
113- o . ObserveInt64 ( observer . backupLastSuccessfulTime , cluster . Status . Backup . LastSuccessfulTime . Unix (), opts ... )
114- }
107+ opts := []metric. ObserveOption {
108+ metric . WithAttributeSet ( o . attributes ),
109+ }
115110
116- return nil
117- }, observables ... )
118- if err != nil {
119- return nil , fmt .Errorf ("register callback: %w" , err )
111+ observer .ObserveInt64 (o .desiredReplicas , int64 (cluster .Spec .Replicas ), opts ... )
112+ observer .ObserveInt64 (o .replicas , int64 (cluster .Status .Replicas ), opts ... )
113+ observer .ObserveInt64 (o .readyReplicas , int64 (cluster .Status .ReadyReplicas ), opts ... )
114+ observer .ObserveInt64 (o .updatedReplicas , int64 (cluster .Status .UpdatedReplicas ), opts ... )
115+ observer .ObserveInt64 (o .availableReplicas , int64 (cluster .Status .AvailableReplicas ), opts ... )
116+ observer .ObserveInt64 (o .learnerReplicas , int64 (cluster .Status .LearnerReplicas ), opts ... )
117+
118+ if cluster .Status .Backup != nil && cluster .Status .Backup .LastScheduleTime != nil {
119+ observer .ObserveInt64 (o .backupLastScheduleTime , cluster .Status .Backup .LastScheduleTime .Unix (), opts ... )
120120 }
121121
122- observer .registration = registration
122+ if cluster .Status .Backup != nil && cluster .Status .Backup .LastSuccessfulTime != nil {
123+ observer .ObserveInt64 (o .backupLastSuccessfulTime , cluster .Status .Backup .LastSuccessfulTime .Unix (), opts ... )
124+ }
123125
124- return observer , nil
126+ return nil
125127}
126128
127129func (o * Observer ) Update (cluster * apiv1.EtcdCluster ) {
0 commit comments