55 lines
		
	
	
		
			1011 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			55 lines
		
	
	
		
			1011 B
		
	
	
	
		
			Go
		
	
	
	
	
	
package csv
 | 
						|
 | 
						|
import (
 | 
						|
	"encoding/csv"
 | 
						|
	"os"
 | 
						|
 | 
						|
	"go.uber.org/fx"
 | 
						|
	"go.uber.org/zap"
 | 
						|
)
 | 
						|
 | 
						|
type Helper struct {
 | 
						|
	fx.In
 | 
						|
	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)
 | 
						|
 | 
						|
	return &Helper{
 | 
						|
		csvFile:   csvFile,
 | 
						|
		csvWriter: csvWriter,
 | 
						|
		logger:    logger,
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
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
 | 
						|
}
 |