Files
MQTTLogger/internal/csv/helper.go
2025-09-29 14:08:19 +03:30

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
}