-
Notifications
You must be signed in to change notification settings - Fork 2.1k
/
extension.go
45 lines (37 loc) · 1.3 KB
/
extension.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
package ecsobserver // import "github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/ecsobserver"
import (
"context"
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/extension"
"go.uber.org/zap"
)
var _ extension.Extension = (*ecsObserver)(nil)
// ecsObserver implements component.ServiceExtension interface.
type ecsObserver struct {
telemetrySettings component.TelemetrySettings
sd *serviceDiscovery
// for Shutdown
cancel func()
}
// Start runs the service discovery in background
func (e *ecsObserver) Start(_ context.Context, _ component.Host) error {
e.telemetrySettings.Logger.Info("Starting ECSDiscovery")
// Ignore the ctx parameter as it is not for long running operation
ctx, cancel := context.WithCancel(context.Background())
e.cancel = cancel
go func() {
if err := e.sd.runAndWriteFile(ctx); err != nil {
e.telemetrySettings.Logger.Error("ECSDiscovery stopped by error", zap.Error(err))
// Stop the collector
e.telemetrySettings.ReportStatus(component.NewFatalErrorEvent(err))
}
}()
return nil
}
func (e *ecsObserver) Shutdown(_ context.Context) error {
e.telemetrySettings.Logger.Info("Stopping ECSDiscovery")
e.cancel()
return nil
}