Skip to content
Snippets Groups Projects
main.go 1.5 KiB
Newer Older
  • Learn to ignore specific revisions
  • 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"
    
    Jonas Leder's avatar
    Jonas Leder committed
    		taskData, err := queue.MainQueue.Dequeue()
    		if err != nil {
    			time.Sleep(time.Second)
    			continue
    		}
    
    		log.Log.Debug("Received new task: ", taskData)
    		var task types.Task
    
    Jonas Leder's avatar
    Jonas Leder committed
    		err = json.Unmarshal([]byte(taskData), &task)
    
    		if err != nil {
    			log.Log.Error("Failed decoding task as JSON: ", err.Error())
    			continue
    		}
    		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)
    
    			continue
    		}
    
    		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)
    
    			continue
    		}
    		for key, value := range jsonData {
    			valueType := database.GetOrCreateValueType(key)
    			dbValue := tables.Value{
    				Date:      task.Date,
    				ValueType: valueType,
    				Value:     helper.AnyToString(value),
    				Instance:  instance,
    			}
    			database.Db.Create(&dbValue)
    		}
    		log.Log.Info("Stored boiler data in database")