From cbc1425de9c04247bbe3fcc2addc7f8b1502570c Mon Sep 17 00:00:00 2001 From: Sergey Yakubov <sergey.yakubov@desy.de> Date: Wed, 28 Feb 2018 17:07:46 +0100 Subject: [PATCH] More work on monitoring, add integration test --- broker/src/hidra2_broker/server/server.go | 8 +++-- .../hidra2_broker/server/server_nottested.go | 23 +++++++++++++- .../src/hidra2_broker/server/server_test.go | 2 +- broker/src/hidra2_broker/server/statistics.go | 8 +++++ ...istics_writer.go => statistics_writers.go} | 9 +++--- broker/src/hidra2_broker/utils/helpers.go | 1 + tests/broker/CMakeLists.txt | 3 ++ tests/broker/check_monitoring/CMakeLists.txt | 8 +++++ tests/broker/check_monitoring/check_linux.sh | 31 +++++++++++++++++++ tests/broker/read_config/check_linux.sh | 2 +- tests/broker/read_config/settings_bad.json | 4 +-- tests/settings/broker_settings.json | 4 ++- 12 files changed, 89 insertions(+), 14 deletions(-) rename broker/src/hidra2_broker/server/{statistics_writer.go => statistics_writers.go} (78%) create mode 100644 tests/broker/check_monitoring/CMakeLists.txt create mode 100644 tests/broker/check_monitoring/check_linux.sh diff --git a/broker/src/hidra2_broker/server/server.go b/broker/src/hidra2_broker/server/server.go index d517d373f..eadd2ba6b 100644 --- a/broker/src/hidra2_broker/server/server.go +++ b/broker/src/hidra2_broker/server/server.go @@ -7,8 +7,10 @@ import ( var db database.Agent type serverSettings struct { - DbAddress string - Port int + BrokerDbAddress string + MonitorDbAddress string + MonitorDbName string + Port int } var settings serverSettings @@ -16,7 +18,7 @@ var statistics serverStatistics func InitDB(dbAgent database.Agent) error { db = dbAgent - return db.Connect(settings.DbAddress) + return db.Connect(settings.BrokerDbAddress) } func CleanupDB() { diff --git a/broker/src/hidra2_broker/server/server_nottested.go b/broker/src/hidra2_broker/server/server_nottested.go index e31a0d2df..39320081e 100644 --- a/broker/src/hidra2_broker/server/server_nottested.go +++ b/broker/src/hidra2_broker/server/server_nottested.go @@ -7,6 +7,7 @@ import ( "log" "net/http" "strconv" + "errors" ) func StartStatistics() { @@ -22,5 +23,25 @@ func Start() { } func ReadConfig(fname string) error { - return utils.ReadJsonFromFile(fname, &settings) + if err := utils.ReadJsonFromFile(fname, &settings); err != nil { + return err + } + + if settings.BrokerDbAddress == "" { + return errors.New("BrokerDbAddress not set") + } + + if settings.MonitorDbAddress == "" { + return errors.New("MonitorDbAddress not set") + } + + if settings.Port == 0 { + return errors.New("Server port not set") + } + + if settings.MonitorDbName == "" { + return errors.New("MonitorDbName not set") + } + + return nil } diff --git a/broker/src/hidra2_broker/server/server_test.go b/broker/src/hidra2_broker/server/server_test.go index 9d6d3d730..baba3ed60 100644 --- a/broker/src/hidra2_broker/server/server_test.go +++ b/broker/src/hidra2_broker/server/server_test.go @@ -34,7 +34,7 @@ func TestInitDBWithWrongAddress(t *testing.T) { mock_db.ExpectedCalls = nil - settings.DbAddress = "0.0.0.0:0000" + settings.BrokerDbAddress = "0.0.0.0:0000" for _, test := range initDBTests { mock_db.On("Connect", "0.0.0.0:0000").Return(test.answer) diff --git a/broker/src/hidra2_broker/server/statistics.go b/broker/src/hidra2_broker/server/statistics.go index 860c766ea..f0851ae33 100644 --- a/broker/src/hidra2_broker/server/statistics.go +++ b/broker/src/hidra2_broker/server/statistics.go @@ -4,6 +4,7 @@ import ( "fmt" "log" "time" + "sync" ) type statisticsWriter interface { @@ -12,18 +13,25 @@ type statisticsWriter interface { type serverStatistics struct { counter int + mux sync.Mutex Writer statisticsWriter } func (st *serverStatistics) IncreaseCounter() { + st.mux.Lock() + defer st.mux.Unlock() st.counter++ } func (st *serverStatistics) GetCounter() int { + st.mux.Lock() + defer st.mux.Unlock() return st.counter } func (st *serverStatistics) Reset() { + st.mux.Lock() + defer st.mux.Unlock() st.counter = 0 } diff --git a/broker/src/hidra2_broker/server/statistics_writer.go b/broker/src/hidra2_broker/server/statistics_writers.go similarity index 78% rename from broker/src/hidra2_broker/server/statistics_writer.go rename to broker/src/hidra2_broker/server/statistics_writers.go index ffc619145..db6e46fb2 100644 --- a/broker/src/hidra2_broker/server/statistics_writer.go +++ b/broker/src/hidra2_broker/server/statistics_writers.go @@ -21,7 +21,7 @@ type StatisticInfluxDbWriter struct { func (writer *StatisticInfluxDbWriter) Write(statistics *serverStatistics) error { c, err := client.NewHTTPClient(client.HTTPConfig{ - Addr: "http://localhost:8086", + Addr: "http://"+ settings.MonitorDbAddress, }) if err != nil { return err @@ -29,15 +29,14 @@ func (writer *StatisticInfluxDbWriter) Write(statistics *serverStatistics) error defer c.Close() bp, _ := client.NewBatchPoints(client.BatchPointsConfig{ - Database: "db", - Precision: "s", + Database: settings.MonitorDbName, }) - // tags := map[string]string{"rate": "rate-total"} + tags := map[string]string{"Group ID": "0"} fields := map[string]interface{}{ "rate": statistics.GetCounter(), } - pt, err := client.NewPoint("RequestsRate", nil, fields, time.Now()) + pt, err := client.NewPoint("RequestsRate", tags, fields, time.Now()) if err != nil { return err } diff --git a/broker/src/hidra2_broker/utils/helpers.go b/broker/src/hidra2_broker/utils/helpers.go index 02bb46796..f1d0da4dc 100644 --- a/broker/src/hidra2_broker/utils/helpers.go +++ b/broker/src/hidra2_broker/utils/helpers.go @@ -33,5 +33,6 @@ func ReadJsonFromFile(fname string, config interface{}) error { if err != nil { return err } + return nil } diff --git a/tests/broker/CMakeLists.txt b/tests/broker/CMakeLists.txt index c37417477..6f1685c7d 100644 --- a/tests/broker/CMakeLists.txt +++ b/tests/broker/CMakeLists.txt @@ -1,3 +1,6 @@ add_subdirectory(get_next) add_subdirectory(read_config) +if (UNIX) +add_subdirectory(check_monitoring) +endif() \ No newline at end of file diff --git a/tests/broker/check_monitoring/CMakeLists.txt b/tests/broker/check_monitoring/CMakeLists.txt new file mode 100644 index 000000000..de66ca8b3 --- /dev/null +++ b/tests/broker/check_monitoring/CMakeLists.txt @@ -0,0 +1,8 @@ +set(TARGET_NAME hidra2-broker) + +################################ +# Testing +################################ +configure_file(${CMAKE_SOURCE_DIR}/tests/settings/broker_settings.json settings.json COPYONLY) +add_script_test("${TARGET_NAME}-monitoring" "$<TARGET_PROPERTY:${TARGET_NAME},EXENAME>" nomem + ) diff --git a/tests/broker/check_monitoring/check_linux.sh b/tests/broker/check_monitoring/check_linux.sh new file mode 100644 index 000000000..9af764908 --- /dev/null +++ b/tests/broker/check_monitoring/check_linux.sh @@ -0,0 +1,31 @@ +#!/usr/bin/env bash + +database_name=db_test + +set -e + +trap Cleanup EXIT + +Cleanup() { + echo cleanup + influx -execute "drop database ${database_name}" + kill -9 $brokerid +} + +influx -execute "create database ${database_name}" + +$@ settings.json & + +sleep 0.3 + +brokerid=`echo $!` + +for i in `seq 1 50`; +do + curl --silent 127.0.0.1:5005/database/data/next >/dev/null 2>&1 & +done + + +sleep 2 + +influx -execute "select sum(rate) from RequestsRate" -database=${database_name} -format=json | jq .results[0].series[0].values[0][1] | grep 50 diff --git a/tests/broker/read_config/check_linux.sh b/tests/broker/read_config/check_linux.sh index e491171a3..5b9e9c78c 100644 --- a/tests/broker/read_config/check_linux.sh +++ b/tests/broker/read_config/check_linux.sh @@ -9,7 +9,7 @@ brokerid=`echo $!` kill -9 $brokerid # check if gives error with bad json file -$@ settings_bad.json 2>&1 | grep "invalid" +$@ settings_bad.json 2>&1 | grep "not set" # check if gives error non-existing file $@ settings_notexist.json 2>&1 | grep "no such" diff --git a/tests/broker/read_config/settings_bad.json b/tests/broker/read_config/settings_bad.json index 01598594a..88157fb1b 100644 --- a/tests/broker/read_config/settings_bad.json +++ b/tests/broker/read_config/settings_bad.json @@ -1,4 +1,4 @@ { - "dbaddress":"127.0.0.1:27017", - "port": + "BrokerDbAddres":"127.0.0.1:27017", + "port":12 } \ No newline at end of file diff --git a/tests/settings/broker_settings.json b/tests/settings/broker_settings.json index 841f19946..56bf15f52 100644 --- a/tests/settings/broker_settings.json +++ b/tests/settings/broker_settings.json @@ -1,4 +1,6 @@ { - "dbaddress":"127.0.0.1:27017", + "BrokerDbAddress":"127.0.0.1:27017", + "MonitorDbAddress": "localhost:8086", + "MonitorDbName": "db_test", "port":5005 } \ No newline at end of file -- GitLab