Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 21 additions & 3 deletions exporter/fileexporter/factory.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,13 @@ func createTracesExporter(
fe := exporters.GetOrAdd(cfg, func() component.Component {
return &fileExporter{path: cfg.(*Config).Path}
})
return exporterhelper.NewTracesExporter(cfg, params.Logger, fe.Unwrap().(*fileExporter).ConsumeTraces)
return exporterhelper.NewTracesExporter(
cfg,
params.Logger,
fe.Unwrap().(*fileExporter).ConsumeTraces,
exporterhelper.WithStart(fe.Unwrap().(*fileExporter).Start),
exporterhelper.WithShutdown(fe.Unwrap().(*fileExporter).Shutdown),
)
}

func createMetricsExporter(
Expand All @@ -63,7 +69,13 @@ func createMetricsExporter(
fe := exporters.GetOrAdd(cfg, func() component.Component {
return &fileExporter{path: cfg.(*Config).Path}
})
return exporterhelper.NewMetricsExporter(cfg, params.Logger, fe.Unwrap().(*fileExporter).ConsumeMetrics)
return exporterhelper.NewMetricsExporter(
cfg,
params.Logger,
fe.Unwrap().(*fileExporter).ConsumeMetrics,
exporterhelper.WithStart(fe.Unwrap().(*fileExporter).Start),
exporterhelper.WithShutdown(fe.Unwrap().(*fileExporter).Shutdown),
)
}

func createLogsExporter(
Expand All @@ -74,7 +86,13 @@ func createLogsExporter(
fe := exporters.GetOrAdd(cfg, func() component.Component {
return &fileExporter{path: cfg.(*Config).Path}
})
return exporterhelper.NewLogsExporter(cfg, params.Logger, fe.Unwrap().(*fileExporter).ConsumeLogs)
return exporterhelper.NewLogsExporter(
cfg,
params.Logger,
fe.Unwrap().(*fileExporter).ConsumeLogs,
exporterhelper.WithStart(fe.Unwrap().(*fileExporter).Start),
exporterhelper.WithShutdown(fe.Unwrap().(*fileExporter).Shutdown),
)
}

// This is the map of already created File exporters for particular configurations.
Expand Down
20 changes: 16 additions & 4 deletions exporter/fileexporter/file_exporter.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,10 @@ var marshaler = &jsonpb.Marshaler{}
// fileExporter is the implementation of file exporter that writes telemetry data to a file
// in Protobuf-JSON format.
type fileExporter struct {
path string
file io.WriteCloser
mutex sync.Mutex
path string
file io.WriteCloser
mutex sync.Mutex
isFileClosed bool
}

func (e *fileExporter) Capabilities() consumer.Capabilities {
Expand Down Expand Up @@ -72,10 +73,21 @@ func exportMessageAsLine(e *fileExporter, message proto.Message) error {
func (e *fileExporter) Start(context.Context, component.Host) error {
var err error
e.file, err = os.OpenFile(e.path, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0600)
if err == nil {
e.isFileClosed = false
}
return err
}

// Shutdown stops the exporter and is invoked during shutdown.
func (e *fileExporter) Shutdown(context.Context) error {
return e.file.Close()
if e.isFileClosed {
return nil
}

err := e.file.Close()
if err == nil {
e.isFileClosed = true
}
return err
}