diff --git a/CHANGES.txt b/CHANGES.txt index fae1833..2487ecb 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,6 +1,9 @@ CHANGES file for AGHAST Server ============================== +AGHAST v0.5.1 (release 2022-05-08) - Fix PostgreSQL Logging Issue + - Bug Fix: Postgres integration was failing when expecting Integers and Floats arrived. + AGHAST v0.5.0 (released 2021-08-21) - Simpler Conditions - New Feature: Conditions may now use a value from the triggering message diff --git a/cmd/aghastServer/aghastServer.go b/cmd/aghastServer/aghastServer.go index 04d0d64..f3eab46 100644 --- a/cmd/aghastServer/aghastServer.go +++ b/cmd/aghastServer/aghastServer.go @@ -31,7 +31,7 @@ import ( "github.com/SMerrony/aghast/server" ) -const SemVer = "v0.5.0" // TODO Update SemVer on each release +const SemVer = "v0.5.1" // TODO Update SemVer on each release var ( configFlag = flag.String("configdir", "", "directory containing configuration files") diff --git a/integrations/postgres/postgres.go b/integrations/postgres/postgres.go index c8d0cd5..f107c60 100644 --- a/integrations/postgres/postgres.go +++ b/integrations/postgres/postgres.go @@ -1,4 +1,4 @@ -// Copyright ©2021 Steve Merrony +// Copyright ©2021,2022 Steve Merrony // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -22,8 +22,10 @@ package postgres import ( "context" "encoding/json" + "errors" "fmt" "log" + "math" "strconv" "sync" @@ -154,12 +156,12 @@ func (p *Postgres) logger(l loggerT) { jsonMap := make(map[string]interface{}) err := json.Unmarshal([]byte(msg.Payload.([]uint8)), &jsonMap) if err != nil { - log.Printf("ERROR: DataLogger - Could not understand JSON %s\n", msg.Payload.(string)) + log.Printf("ERROR: Postgres Logger - Could not understand JSON %s\n", msg.Payload.(string)) return } v, found := jsonMap[l.Key] if !found { - log.Printf("ERROR: DataLogger - Could find Key in JSON %s\n", msg.Payload.(string)) + log.Printf("ERROR: Postgres Logger - Could find Key in JSON %s\n", msg.Payload.(string)) return } value = v @@ -175,25 +177,30 @@ func (p *Postgres) logger(l loggerT) { case string: fl, err = strconv.ParseFloat(value.(string), 64) if err != nil { - log.Printf("WARNING: Postgres logger could not parse float from %v\n", value.(string)) + log.Printf("WARNING: Postgres logger could not parse float from %v\n", value) continue } } sql = fmt.Sprintf("INSERT INTO logged_floats(id, ts, float_val) VALUES( %s, NOW(), %f)", idString, fl) case "integer": var num int - switch value.(type) { + switch t := value.(type) { case int: num = value.(int) case int32: num = int(value.(int32)) case int64: num = int(value.(int64)) + case float64: + num = int(math.Round(value.(float64))) case string: num, err = strconv.Atoi(value.(string)) + default: + log.Printf("WARNING: Postgres Logger expected integer type, got: %T\n", t) + err = errors.New("Type error") } if err != nil { - log.Printf("WARNING: Postgres logger could not parse integer from %v\n", value.(string)) + log.Printf("WARNING: Postgres logger could not parse integer from %v\n", value) continue } sql = fmt.Sprintf("INSERT INTO logged_integers(id, ts, int_val) VALUES( %s, NOW(), %d)", idString, num)