diff --git a/broker/src/hidra2_broker/server/server.go b/broker/src/hidra2_broker/server/server.go index d517d373ff0bdaadc11445ee7c0cdd93cd34bedf..eadd2ba6b3cc0b202c92f3901ecec985f0d7ceb8 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 e31a0d2df355b2dcc7b3a8c010399a8f3aed61f1..39320081e2c2b60fc31cdeba7c1ca5dc8d20a25c 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 9d6d3d73074f68c138b54fe02b3d3339b9b41363..baba3ed60dbd538d5b1fa85b01c2490fa1d62e13 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 860c766ea38f97a214061970ff72c6f19f0bdf6d..f0851ae33f58070035d51fc3588f99843718043d 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 ffc619145736391933f41935089712368196950f..db6e46fb293895c77fdfe9599d635f8f4f52ace9 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 02bb46796c257c6f8f784e25d8a47ee202e84e57..f1d0da4dc985d0231cbe34602f1942ce01fde362 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 c3741747744a36054595915d91f42ecd5eb96943..6f1685c7d12bf036a9fa6f126b357fd962d2b954 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 0000000000000000000000000000000000000000..de66ca8b3e7f809565b6352cb17b31a0942ea685 --- /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 0000000000000000000000000000000000000000..9af76490853e00d86cc70d3118295d9a5faba76f --- /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 e491171a3c8d00802b7e1beb55c77acc3bb3040a..5b9e9c78c8b9c5c814b907ea08dfd4c745043e73 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 01598594a92d5cbcd01cacc8e8c27e27cf2c42ea..88157fb1b06da72f529ea9f42a808a58e91533cb 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 841f1994677df8ab075b7e71859991527f438b67..56bf15f52fa9666103ac542903195def198733d7 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