Skip to content
Snippets Groups Projects
Commit fa62046e authored by Jonas Leder's avatar Jonas Leder
Browse files

sort keys by alphabet and fix time in csv

parent 1796d852
No related branches found
No related tags found
No related merge requests found
Pipeline #54468 passed
...@@ -15,7 +15,7 @@ func JsonToCsv(jsonData string) { ...@@ -15,7 +15,7 @@ func JsonToCsv(jsonData string) {
panic(err) panic(err)
} }
currentDate := time.Now().Format("2006-01-02 13:44") currentDate := time.Now().Local().Format("2006-01-02 15:04:05")
file, err := os.OpenFile(os.Getenv("OUTPUT_FILE_NAME"), os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) file, err := os.OpenFile(os.Getenv("OUTPUT_FILE_NAME"), os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
if err != nil { if err != nil {
...@@ -23,28 +23,31 @@ func JsonToCsv(jsonData string) { ...@@ -23,28 +23,31 @@ func JsonToCsv(jsonData string) {
} }
defer file.Close() defer file.Close()
// Create a CSV writer
writer := csv.NewWriter(file) writer := csv.NewWriter(file)
defer writer.Flush() defer writer.Flush()
// Check if file is empty to write header
fileInfo, err := file.Stat() fileInfo, err := file.Stat()
if err != nil { if err != nil {
panic(err) panic(err)
} }
// Sort keys for consistent column order
keys := helper.SortMapKeys(data)
// Write the header if the file is empty
if fileInfo.Size() == 0 { if fileInfo.Size() == 0 {
// Write header header := append([]string{"Date"}, keys...)
header := []string{"Date"}
for key := range data {
header = append(header, key)
}
if err := writer.Write(header); err != nil { if err := writer.Write(header); err != nil {
panic(err) panic(err)
} }
} }
// Write data as a single line with the date // Write data row with the current date
row := []string{currentDate} row := []string{currentDate}
for _, value := range data { for _, key := range keys {
row = append(row, helper.AnyToString(value)) row = append(row, helper.AnyToString(data[key]))
} }
if err := writer.Write(row); err != nil { if err := writer.Write(row); err != nil {
panic(err) panic(err)
......
package helper
import "sort"
// Helper function to get sorted keys from a map
func SortMapKeys(data map[string]interface{}) []string {
keys := make([]string, 0, len(data))
for key := range data {
keys = append(keys, key)
}
sort.Strings(keys) // Sort keys alphabetically
return keys
}
...@@ -16,6 +16,7 @@ var messagePubHandler mqtt.MessageHandler = func(client mqtt.Client, msg mqtt.Me ...@@ -16,6 +16,7 @@ var messagePubHandler mqtt.MessageHandler = func(client mqtt.Client, msg mqtt.Me
var messagePubHandlerBoiler mqtt.MessageHandler = func(client mqtt.Client, msg mqtt.Message) { var messagePubHandlerBoiler mqtt.MessageHandler = func(client mqtt.Client, msg mqtt.Message) {
log.Log.Debugf("Received message for boiler: %s from topic: %s\n", msg.Payload(), msg.Topic()) log.Log.Debugf("Received message for boiler: %s from topic: %s\n", msg.Payload(), msg.Topic())
log.Log.Info("Received new boiler data")
csv.JsonToCsv(string(msg.Payload())) csv.JsonToCsv(string(msg.Payload()))
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment