@@ -10,6 +10,8 @@ import (
10
10
11
11
corev1 "k8s.io/api/core/v1"
12
12
"k8s.io/apimachinery/pkg/types"
13
+ "k8s.io/client-go/discovery"
14
+ "k8s.io/client-go/rest"
13
15
"sigs.k8s.io/controller-runtime/pkg/client"
14
16
"sigs.k8s.io/controller-runtime/pkg/log"
15
17
@@ -18,18 +20,24 @@ import (
18
20
19
21
// Collector handles telemetry data collection and sending
20
22
type Collector struct {
21
- client client.Client
22
- config * Config
23
- ticker * time.Ticker
24
- stopCh chan struct {}
23
+ client client.Client
24
+ discoveryClient discovery.DiscoveryInterface
25
+ config * Config
26
+ ticker * time.Ticker
27
+ stopCh chan struct {}
25
28
}
26
29
27
30
// NewCollector creates a new telemetry collector
28
- func NewCollector (client client.Client , config * Config ) * Collector {
29
- return & Collector {
30
- client : client ,
31
- config : config ,
31
+ func NewCollector (client client.Client , config * Config , kubeConfig * rest. Config ) ( * Collector , error ) {
32
+ discoveryClient , err := discovery . NewDiscoveryClientForConfig ( kubeConfig )
33
+ if err != nil {
34
+ return nil , fmt . Errorf ( "failed to create discovery client: %w" , err )
32
35
}
36
+ return & Collector {
37
+ client : client ,
38
+ discoveryClient : discoveryClient ,
39
+ config : config ,
40
+ }, nil
33
41
}
34
42
35
43
// Start implements manager.Runnable
@@ -80,6 +88,14 @@ func (c *Collector) collect(ctx context.Context) {
80
88
81
89
clusterID := string (kubeSystemNS .UID )
82
90
91
+ var cozystackCM corev1.ConfigMap
92
+ if err := c .client .Get (ctx , types.NamespacedName {Namespace : "cozy-system" , Name : "cozystack" }, & cozystackCM ); err != nil {
93
+ logger .Error (err , "Failed to get cozystack configmap in cozy-system namespace" )
94
+ return
95
+ }
96
+
97
+ bundle := cozystackCM .Data ["bundle-name" ]
98
+
83
99
// Get Kubernetes version from nodes
84
100
var nodeList corev1.NodeList
85
101
if err := c .client .List (ctx , & nodeList ); err != nil {
@@ -90,13 +106,14 @@ func (c *Collector) collect(ctx context.Context) {
90
106
// Create metrics buffer
91
107
var metrics strings.Builder
92
108
93
- // Add CozyStack info metric
109
+ // Add Cozystack info metric
94
110
if len (nodeList .Items ) > 0 {
95
- k8sVersion := nodeList . Items [ 0 ]. Status . NodeInfo . KubeletVersion
111
+ k8sVersion , _ := c . discoveryClient . ServerVersion ()
96
112
metrics .WriteString (fmt .Sprintf (
97
- "cozystack_info {version=\" %s\" ,kubernetes_version=\" %s\" } 1\n " ,
98
- c .config .CozyStackVersion ,
113
+ "cozystack_cluster_info {version=\" %s\" ,kubernetes_version= \" %s \" ,bundle =\" %s\" } 1\n " ,
114
+ c .config .CozystackVersion ,
99
115
k8sVersion ,
116
+ bundle ,
100
117
))
101
118
}
102
119
@@ -109,7 +126,7 @@ func (c *Collector) collect(ctx context.Context) {
109
126
110
127
for osKey , count := range nodeOSCount {
111
128
metrics .WriteString (fmt .Sprintf (
112
- "nodes_count {os=\" %s\" ,kernel=\" %s\" } %d\n " ,
129
+ "cozystack_nodes {os=\" %s\" ,kernel=\" %s\" } %d\n " ,
113
130
osKey ,
114
131
nodeList .Items [0 ].Status .NodeInfo .KernelVersion ,
115
132
count ,
@@ -125,8 +142,8 @@ func (c *Collector) collect(ctx context.Context) {
125
142
126
143
for _ , monitor := range monitorList .Items {
127
144
metrics .WriteString (fmt .Sprintf (
128
- "workload_count {uid=\" %s\" ,kind=\" %s\" ,type=\" %s\" ,version=\" %s\" } %d\n " ,
129
- clusterID ,
145
+ "cozystack_workload_replicas {uid=\" %s\" ,kind=\" %s\" ,type=\" %s\" ,version=\" %s\" } %d\n " ,
146
+ monitor . UID ,
130
147
monitor .Spec .Kind ,
131
148
monitor .Spec .Type ,
132
149
monitor .Spec .Version ,
0 commit comments