@@ -11,6 +11,7 @@ import (
1111 "time"
1212
1313 "go.opentelemetry.io/collector/component"
14+ "go.opentelemetry.io/collector/component/componentstatus"
1415 "go.opentelemetry.io/collector/consumer"
1516 "go.opentelemetry.io/collector/extension/xextension/storage"
1617 "go.opentelemetry.io/collector/pdata/pcommon"
@@ -38,6 +39,7 @@ type logsReceiver struct {
3839 id component.ID
3940 storageClient storage.Client
4041 obsrecv * receiverhelper.ObsReport
42+ host component.Host
4143}
4244
4345func newLogsReceiver (
@@ -88,6 +90,7 @@ func (receiver *logsReceiver) Start(ctx context.Context, host component.Host) er
8890 }
8991 receiver .settings .Logger .Debug ("starting..." )
9092 receiver .isStarted = true
93+ receiver .host = host
9194
9295 var err error
9396 receiver .storageClient , err = adapter .GetStorageClient (ctx , host , receiver .config .StorageID , receiver .settings .ID )
@@ -162,21 +165,39 @@ func (receiver *logsReceiver) startCollecting() {
162165}
163166
164167func (receiver * logsReceiver ) collect () {
165- logsChannel := make (chan plog.Logs )
168+ type collectResult struct {
169+ logs plog.Logs
170+ err error
171+ }
172+ resultsChannel := make (chan collectResult , len (receiver .queryReceivers ))
166173 for _ , queryReceiver := range receiver .queryReceivers {
167174 go func (queryReceiver * logsQueryReceiver ) {
168175 logs , err := queryReceiver .collect (context .Background ())
169176 if err != nil {
170177 receiver .settings .Logger .Error ("error collecting logs" , zap .Error (err ), zap .String ("query" , queryReceiver .ID ()))
171178 }
172- logsChannel <- logs
179+ resultsChannel <- collectResult { logs : logs , err : err }
173180 }(queryReceiver )
174181 }
175182
176183 allLogs := plog .NewLogs ()
184+ var collectErr error
177185 for range receiver .queryReceivers {
178- logs := <- logsChannel
179- logs .ResourceLogs ().MoveAndAppendTo (allLogs .ResourceLogs ())
186+ select {
187+ case result := <- resultsChannel :
188+ result .logs .ResourceLogs ().MoveAndAppendTo (allLogs .ResourceLogs ())
189+ if result .err != nil {
190+ collectErr = errors .Join (collectErr , result .err )
191+ }
192+ case <- receiver .shutdownRequested :
193+ return
194+ }
195+ }
196+
197+ if collectErr != nil {
198+ componentstatus .ReportStatus (receiver .host , componentstatus .NewRecoverableErrorEvent (collectErr ))
199+ } else {
200+ componentstatus .ReportStatus (receiver .host , componentstatus .NewEvent (componentstatus .StatusOK ))
180201 }
181202
182203 logRecordCount := allLogs .LogRecordCount ()
0 commit comments