63 lines
1.1 KiB
Go
63 lines
1.1 KiB
Go
package csv
|
|
|
|
import (
|
|
"context"
|
|
"encoding/csv"
|
|
"os"
|
|
|
|
"go.uber.org/fx"
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
type Helper struct {
|
|
csvFile *os.File
|
|
csvWriter *csv.Writer
|
|
logger *zap.Logger
|
|
}
|
|
|
|
func NewHelper(lc fx.Lifecycle, logger *zap.Logger) *Helper {
|
|
csvFile, err := os.OpenFile("mqtt-logs.csv", os.O_CREATE|os.O_RDWR|os.O_APPEND, 0644)
|
|
if err != nil {
|
|
logger.Fatal("error opening csv file", zap.Error(err))
|
|
}
|
|
|
|
csvWriter := csv.NewWriter(csvFile)
|
|
|
|
helper := &Helper{
|
|
csvFile: csvFile,
|
|
csvWriter: csvWriter,
|
|
logger: logger,
|
|
}
|
|
|
|
lc.Append(fx.Hook{
|
|
OnStop: func(context.Context) error {
|
|
return helper.Close()
|
|
},
|
|
})
|
|
|
|
return helper
|
|
}
|
|
|
|
func (h *Helper) AddEntry(date string, topic string, message string) error {
|
|
record := []string{date, topic, message}
|
|
if err := h.csvWriter.Write(record); err != nil {
|
|
h.logger.Error("error writing to csv file", zap.Error(err))
|
|
return err
|
|
}
|
|
|
|
h.csvWriter.Flush()
|
|
|
|
return nil
|
|
}
|
|
|
|
func (h *Helper) Close() error {
|
|
h.csvWriter.Flush()
|
|
|
|
if err := h.csvFile.Close(); err != nil {
|
|
h.logger.Error("error closing csv file", zap.Error(err))
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|