@@ -93,11 +93,15 @@ type Component struct {
93
93
94
94
receiversMut sync.RWMutex
95
95
receivers []loki.LogsReceiver
96
+
97
+ healthMut sync.RWMutex
98
+ health component.Health
96
99
}
97
100
98
101
var (
99
- _ component.Component = (* Component )(nil )
100
- _ component.DebugComponent = (* Component )(nil )
102
+ _ component.Component = (* Component )(nil )
103
+ _ component.DebugComponent = (* Component )(nil )
104
+ _ component.HealthComponent = (* Component )(nil )
101
105
)
102
106
103
107
// New creates a new loki.source.kubernetes_events component.
@@ -152,6 +156,7 @@ func (c *Component) Run(ctx context.Context) error {
152
156
c .tasksMut .RUnlock ()
153
157
154
158
if err := c .runner .ApplyTasks (ctx , tasks ); err != nil {
159
+ c .setHealth (err )
155
160
level .Error (c .log ).Log ("msg" , "failed to apply event watchers" , "err" , err )
156
161
}
157
162
}
@@ -180,7 +185,10 @@ func (c *Component) Run(ctx context.Context) error {
180
185
cancel ()
181
186
})
182
187
183
- return rg .Run ()
188
+ err := rg .Run ()
189
+ c .setHealth (err )
190
+
191
+ return err
184
192
}
185
193
186
194
// Update implements component.Component.
@@ -255,3 +263,29 @@ func (c *Component) DebugInfo() interface{} {
255
263
}
256
264
return info
257
265
}
266
+
267
+ // CurrentHealth implements component.HealthComponent
268
+ func (c * Component ) CurrentHealth () component.Health {
269
+ c .healthMut .RLock ()
270
+ defer c .healthMut .RUnlock ()
271
+ return c .health
272
+ }
273
+
274
+ func (c * Component ) setHealth (err error ) {
275
+ c .healthMut .Lock ()
276
+ defer c .healthMut .Unlock ()
277
+
278
+ if err == nil {
279
+ c .health = component.Health {
280
+ Health : component .HealthTypeHealthy ,
281
+ Message : "component is ready" ,
282
+ UpdateTime : time .Now (),
283
+ }
284
+ } else {
285
+ c .health = component.Health {
286
+ Health : component .HealthTypeUnhealthy ,
287
+ Message : fmt .Sprintf ("component encounters error: %s" , err ),
288
+ UpdateTime : time .Now (),
289
+ }
290
+ }
291
+ }
0 commit comments