From 32faaaf4180be9438b87548d6314499256d35e3a Mon Sep 17 00:00:00 2001 From: Henrik Hautakoski Date: Wed, 24 Jun 2020 14:38:46 +0200 Subject: [PATCH 1/2] Adding src/utils/json.go --- src/utils/json.go | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 src/utils/json.go diff --git a/src/utils/json.go b/src/utils/json.go new file mode 100644 index 0000000..17feeba --- /dev/null +++ b/src/utils/json.go @@ -0,0 +1,17 @@ + +package utils + +// JsonGetInt64 +// performs float64 (json numbers are always float64) +// type assertion and casts to int64. +// +// if the type assertion fails, the function defaults 0 (zero). +// --------------------------------------------------------- + +func JsonGetInt64(input interface{}) (int64) { + v, res := input.(float64) + if res { + return (int64) (v) + } + return 0 +} From ba6b79ae0ecc8efd749f9f111bc7e483afd8a8ab Mon Sep 17 00:00:00 2001 From: Henrik Hautakoski Date: Wed, 24 Jun 2020 14:41:13 +0200 Subject: [PATCH 2/2] src/server.go: in check_api_v2() use utils.JsonGetInt64() to safely get a int64 value from json. If json contains "nil" value, the type assertion will fail. JsonGetInt64() will in that case return "0" --- src/server.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/server.go b/src/server.go index 595efcc..c46c799 100644 --- a/src/server.go +++ b/src/server.go @@ -9,6 +9,7 @@ import ( "./pid" "./haproxy" "./eosapi" + "./utils" "github.com/firstrow/tcp_server" "github.com/pborman/getopt/v2" ) @@ -55,9 +56,9 @@ func check_api_v2(p eosapi.ReqParams, offset int64) (haproxy.HealthCheckStatus, for _, v := range health.Health { if v.Name == "Elasticsearch" { - es_block = (int64) (v.Data["last_indexed_block"].(float64)) + es_block = utils.JsonGetInt64(v.Data["last_indexed_block"]) } else if v.Name == "NodeosRPC" { - node_block = (int64) (v.Data["head_block_num"].(float64)) + node_block = utils.JsonGetInt64(v.Data["head_block_num"]) } }