@@ -20,6 +20,7 @@ import (
20
20
"os"
21
21
"os/signal"
22
22
"path/filepath"
23
+ "sync"
23
24
"syscall"
24
25
25
26
"github.com/open-telemetry/opentelemetry-lambda/collector/internal/extensionapi"
@@ -40,14 +41,15 @@ func main() {
40
41
ctx , lm := newLifecycleManager (context .Background (), logger )
41
42
42
43
// Will block until shutdown event is received or cancelled via the context.
43
- lm .processEvents (ctx )
44
+ logger . Info ( "done" , zap . Error ( lm .run (ctx )) )
44
45
}
45
46
46
47
type lifecycleManager struct {
47
48
logger * zap.Logger
48
49
collector * Collector
49
50
extensionClient * extensionapi.Client
50
51
listener * telemetryapi.Listener
52
+ wg sync.WaitGroup
51
53
}
52
54
53
55
func newLifecycleManager (ctx context.Context , logger * zap.Logger ) (context.Context , * lifecycleManager ) {
@@ -79,23 +81,35 @@ func newLifecycleManager(ctx context.Context, logger *zap.Logger) (context.Conte
79
81
logger .Fatal ("Cannot register Telemetry API client" , zap .Error (err ))
80
82
}
81
83
82
- factories , _ := lambdacomponents .Components ()
83
- collector := NewCollector (logger , factories )
84
-
85
- if err = collector .Start (ctx ); err != nil {
86
- logger .Fatal ("Failed to start the extension" , zap .Error (err ))
87
- extensionClient .InitError (ctx , fmt .Sprintf ("failed to start the collector: %v" , err ))
88
- }
89
-
90
- return ctx , & lifecycleManager {
84
+ lm := & lifecycleManager {
91
85
logger : logger .Named ("lifecycleManager" ),
92
- collector : collector ,
93
86
extensionClient : extensionClient ,
94
87
listener : listener ,
95
88
}
89
+
90
+ go lm .processEvents (ctx )
91
+
92
+ factories , _ := lambdacomponents .Components ()
93
+ lm .collector = NewCollector (logger , factories )
94
+
95
+ return ctx , lm
96
+ }
97
+
98
+ func (lm * lifecycleManager ) run (ctx context.Context ) error {
99
+ if err := lm .collector .Start (ctx ); err != nil {
100
+ lm .logger .Warn ("Failed to start the extension" , zap .Error (err ))
101
+ lm .extensionClient .InitError (ctx , fmt .Sprintf ("failed to start the collector: %v" , err ))
102
+ return err
103
+ }
104
+
105
+ lm .wg .Wait ()
106
+ return nil
96
107
}
97
108
98
109
func (lm * lifecycleManager ) processEvents (ctx context.Context ) {
110
+ lm .wg .Add (1 )
111
+ defer lm .wg .Done ()
112
+
99
113
for {
100
114
select {
101
115
case <- ctx .Done ():
0 commit comments