Skip to content
Snippets Groups Projects
main.go 1.73 KiB
Newer Older
package messageworker

import (
	"encoding/json"
Jonas Leder's avatar
Jonas Leder committed
	"time"
	"jonasled.dev/jonasled/ems-esp-logger/database"
	"jonasled.dev/jonasled/ems-esp-logger/database/tables"
	"jonasled.dev/jonasled/ems-esp-logger/helper"
	"jonasled.dev/jonasled/ems-esp-logger/log"
Jonas Leder's avatar
Jonas Leder committed
	"jonasled.dev/jonasled/ems-esp-logger/queue"
	"jonasled.dev/jonasled/ems-esp-logger/types"
		taskData, taskId, err := queue.MainQueue.Dequeue()
Jonas Leder's avatar
Jonas Leder committed
		if err != nil {
			time.Sleep(time.Second)
			continue
		}
		log.Log.Debug("Received new task: ", taskData)
Jonas Leder's avatar
Jonas Leder committed
		var task types.Task
		err = json.Unmarshal([]byte(taskData), &task)
		if err != nil {
			log.Log.Error("Failed decoding task as JSON: ", err.Error())
			return
		}
		var instance tables.Instance
		err = database.Db.Where("name = ?", task.Instance).First(&instance).Error
		if err != nil {
			log.Log.Error("Failed retreiving instance from database, pushing task back to queue: ", err.Error())
			queue.MainQueue.Enqueue(taskData, 60)
			return
		}
Jonas Leder's avatar
Jonas Leder committed
		var jsonData map[string]interface{}
		err = json.Unmarshal([]byte(task.Data), &jsonData)
		if err != nil {
			log.Log.Error("Failed decoding boiler JSON: ", err.Error())
			queue.MainQueue.Enqueue(taskData, 60)
			return
		}
		valuesToInsert := []tables.Value{}
		for key, value := range jsonData {
			valueType := database.GetOrCreateValueType(key)
			dbValue := tables.Value{
				Date:      task.Date,
				ValueType: valueType,
				Value:     helper.AnyToString(value),
				Instance:  instance,
Jonas Leder's avatar
Jonas Leder committed
			valuesToInsert = append(valuesToInsert, dbValue)
		}
		database.Db.Create(&valuesToInsert)
		err = queue.MainQueue.MarkDone(taskId)
		if err != nil {
			log.Log.Error("Failed marking element in queue as done: ", err.Error())
		}
		log.Log.Info("Stored boiler data in database")