From c2d9280ff660aeb5957156b0317d2b18f56b243c Mon Sep 17 00:00:00 2001
From: Sergey Yakubov <sergey.yakubov@desy.de>
Date: Fri, 1 Jun 2018 14:29:59 +0200
Subject: [PATCH] access discovery service via nginx

---
 CMakeModules/prepare_asapo.cmake              |  3 +++
 config/nomad/{nginx.nmd => nginx.nmd.in}      | 19 ++++++++++++-------
 config/nomad/payload.json                     |  9 ---------
 .../server/server_nottested.go                |  2 --
 .../api/src/receiver_discovery_service.cpp    |  4 +++-
 producer/api/src/receiver_discovery_service.h |  1 +
 producer/api/src/request_handler_tcp.cpp      |  4 ++--
 .../test_receiver_discovery_service.cpp       |  2 +-
 .../full_chain/simple_chain/check_linux.sh    |  4 +++-
 .../full_chain/simple_chain/check_windows.bat |  4 +++-
 .../check_monitoring/check_linux.sh           |  4 +++-
 .../transfer_single_file/check_linux.sh       |  4 +++-
 .../transfer_single_file/check_windows.bat    |  4 +++-
 .../automatic/settings/nginx.conf.tpl         | 10 +++++++---
 worker/api/cpp/src/server_data_broker.cpp     | 10 +++++-----
 worker/api/cpp/src/server_data_broker.h       |  4 ++--
 16 files changed, 51 insertions(+), 37 deletions(-)
 rename config/nomad/{nginx.nmd => nginx.nmd.in} (71%)
 delete mode 100644 config/nomad/payload.json
 rename config/nomad/nginx.conf => tests/automatic/settings/nginx.conf.tpl (51%)

diff --git a/CMakeModules/prepare_asapo.cmake b/CMakeModules/prepare_asapo.cmake
index 53580a80b..26bedee49 100644
--- a/CMakeModules/prepare_asapo.cmake
+++ b/CMakeModules/prepare_asapo.cmake
@@ -14,5 +14,8 @@ function(prepare_asapo)
     configure_file(${CMAKE_SOURCE_DIR}/config/nomad/broker.nmd.in  broker.nmd @ONLY)
     configure_file(${CMAKE_SOURCE_DIR}/tests/automatic/settings/discovery_settings.json.tpl discovery.json.tpl COPYONLY)
     configure_file(${CMAKE_SOURCE_DIR}/tests/automatic/settings/broker_settings.json.tpl broker.json.tpl COPYONLY)
+    configure_file(${CMAKE_SOURCE_DIR}/tests/automatic/settings/nginx.conf.tpl nginx.conf.tpl COPYONLY)
+    configure_file(${CMAKE_SOURCE_DIR}/config/nomad/nginx.nmd.in nginx.nmd @ONLY)
+
 endfunction()
 
diff --git a/config/nomad/nginx.nmd b/config/nomad/nginx.nmd.in
similarity index 71%
rename from config/nomad/nginx.nmd
rename to config/nomad/nginx.nmd.in
index 097b74aa6..6399b0ca2 100644
--- a/config/nomad/nginx.nmd
+++ b/config/nomad/nginx.nmd.in
@@ -21,14 +21,11 @@ job "nginx" {
     }
 
     task "nginx" {
-      driver = "docker"
+      driver = "raw_exec"
 
       config {
-        image = "nginx:latest"
-        volumes = ["/home/yakubov/projects/asapo/config/nomad/nginx.conf:/etc/nginx/nginx.conf","local/:/logs" ]
-        network_mode = "host"
-        dns_servers = ["127.0.0.1"]
-        dns_search_domains=["consul"]
+        command = "nginx",
+        args =  ["-c","${NOMAD_TASK_DIR}/nginx.conf"]
       }
 
       resources {
@@ -37,7 +34,7 @@ job "nginx" {
         network {
           mbits = 10
           port "nginx" {
-          static = 8080
+          static = 8400
           }
         }
       }
@@ -52,6 +49,14 @@ job "nginx" {
           timeout  = "2s"
         }
       }
+
+      template {
+         source        = "@WORK_DIR@/nginx.conf.tpl"
+         destination   = "local/nginx.conf"
+         change_mode   = "restart"
+      }
+
+
    }
   }
 }
\ No newline at end of file
diff --git a/config/nomad/payload.json b/config/nomad/payload.json
deleted file mode 100644
index ed49f9bbc..000000000
--- a/config/nomad/payload.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
-  "Name": "discovery",
-  "Address": "127.0.0.1",
-  "Port": 5006,
-  "Check": {
-    "HTTP": "http://localhost:5006/receivers",
-    "Interval": "15s"
-  }
-}
diff --git a/discovery/src/asapo_discovery/server/server_nottested.go b/discovery/src/asapo_discovery/server/server_nottested.go
index 903786660..d193d8663 100644
--- a/discovery/src/asapo_discovery/server/server_nottested.go
+++ b/discovery/src/asapo_discovery/server/server_nottested.go
@@ -23,7 +23,5 @@ func ReadConfig(fname string) (log.Level, error) {
 	if err := settings.Validate(); err != nil {
 		return log.FatalLevel,err
 	}
-
 	return log.LevelFromString(settings.LogLevel)
-
 }
diff --git a/producer/api/src/receiver_discovery_service.cpp b/producer/api/src/receiver_discovery_service.cpp
index 5ca5f7315..aba9b56c2 100644
--- a/producer/api/src/receiver_discovery_service.cpp
+++ b/producer/api/src/receiver_discovery_service.cpp
@@ -9,9 +9,11 @@
 
 namespace  asapo {
 
+const std::string ReceiverDiscoveryService::kServiceEndpointSuffix = "/discovery/receivers";
+
 ReceiverDiscoveryService::ReceiverDiscoveryService(std::string endpoint, uint64_t update_frequency_ms): httpclient__{DefaultHttpClient()},
     log__{GetDefaultProducerLogger()},
-    endpoint_{std::move(endpoint) + "/receivers"}, update_frequency_ms_{update_frequency_ms} {
+    endpoint_{std::move(endpoint) + kServiceEndpointSuffix}, update_frequency_ms_{update_frequency_ms} {
 
 }
 
diff --git a/producer/api/src/receiver_discovery_service.h b/producer/api/src/receiver_discovery_service.h
index c9893423e..c1eab17ff 100644
--- a/producer/api/src/receiver_discovery_service.h
+++ b/producer/api/src/receiver_discovery_service.h
@@ -28,6 +28,7 @@ class ReceiverDiscoveryService {
     std::unique_ptr<HttpClient> httpclient__;
     AbstractLogger* log__;
   private:
+    static const std::string kServiceEndpointSuffix;
     void ThreadHandler();
     Error UpdateFromEndpoint(ReceiversList* list, uint64_t* max_connections);
     Error ParseResponse(const std::string& responce, ReceiversList* list, uint64_t* max_connections);
diff --git a/producer/api/src/request_handler_tcp.cpp b/producer/api/src/request_handler_tcp.cpp
index 3b5972d8a..e85d51645 100644
--- a/producer/api/src/request_handler_tcp.cpp
+++ b/producer/api/src/request_handler_tcp.cpp
@@ -70,7 +70,7 @@ Error RequestHandlerTcp::TrySendToReceiver(const Request* request) {
     }
 
     log__->Debug(std::string("successfully sent data ") + " id: " + std::to_string(request->header.data_id) + " to " +
-        connected_receiver_uri_);
+                 connected_receiver_uri_);
     return nullptr;
 }
 
@@ -94,7 +94,7 @@ bool RequestHandlerTcp::UpdateReceiversList() {
 
 bool RequestHandlerTcp::TimeToUpdateReceiverList() {
     uint64_t elapsed_ms = std::chrono::duration_cast<std::chrono::milliseconds>( high_resolution_clock::now() -
-        last_receivers_uri_update_).count();
+                          last_receivers_uri_update_).count();
     return elapsed_ms > discovery_service__->UpdateFrequency();
 }
 
diff --git a/producer/api/unittests/test_receiver_discovery_service.cpp b/producer/api/unittests/test_receiver_discovery_service.cpp
index c69af5fdd..c31136152 100644
--- a/producer/api/unittests/test_receiver_discovery_service.cpp
+++ b/producer/api/unittests/test_receiver_discovery_service.cpp
@@ -48,7 +48,7 @@ class ReceiversStatusTests : public Test {
     NiceMock<asapo::MockLogger> mock_logger;
     NiceMock<MockHttpClient>* mock_http_client;
 
-    std::string expected_endpoint{"endpoint/receivers"};
+    std::string expected_endpoint{"endpoint/discovery/receivers"};
     ReceiverDiscoveryService status{"endpoint", 20};
 
     void SetUp() override {
diff --git a/tests/automatic/full_chain/simple_chain/check_linux.sh b/tests/automatic/full_chain/simple_chain/check_linux.sh
index f384a4b70..f4724e1c0 100644
--- a/tests/automatic/full_chain/simple_chain/check_linux.sh
+++ b/tests/automatic/full_chain/simple_chain/check_linux.sh
@@ -13,6 +13,7 @@ receiver_folder=/tmp/asapo/receiver/files
 Cleanup() {
     echo cleanup
     rm -rf ${receiver_folder}
+    nomad stop nginx
     nomad stop receiver
     nomad stop discovery
     nomad stop broker
@@ -24,6 +25,7 @@ Cleanup() {
 influx -execute "create database ${monitor_database_name}"
 echo "db.${broker_database_name}.insert({dummy:1})" | mongo ${broker_database_name}
 
+nomad run nginx.nmd
 nomad run receiver.nmd
 nomad run discovery.nmd
 nomad run broker.nmd
@@ -32,7 +34,7 @@ sleep 1
 
 #producer
 mkdir -p ${receiver_folder}
-$1 localhost:5006 100 1000 4 0 &
+$1 localhost:8400 100 1000 4 0 &
 #producerid=`echo $!`
 
 
diff --git a/tests/automatic/full_chain/simple_chain/check_windows.bat b/tests/automatic/full_chain/simple_chain/check_windows.bat
index bd7115b38..e8d63bbe8 100644
--- a/tests/automatic/full_chain/simple_chain/check_windows.bat
+++ b/tests/automatic/full_chain/simple_chain/check_windows.bat
@@ -7,12 +7,13 @@ echo db.%broker_database_name%.insert({dummy:1}) | %mongo_exe% %broker_database_
 c:\opt\consul\nomad run receiver.nmd
 c:\opt\consul\nomad run discovery.nmd
 c:\opt\consul\nomad run broker.nmd
+c:\opt\consul\nomad run nginx.nmd
 
 ping 1.0.0.0 -n 10 -w 100 > nul
 
 REM producer
 mkdir %receiver_folder%
-start /B "" "%1" localhost:5006 100 1000 4 0
+start /B "" "%1" localhost:8400 100 1000 4 0
 ping 1.0.0.0 -n 1 -w 100 > nul
 
 REM worker
@@ -30,6 +31,7 @@ exit /b 1
 c:\opt\consul\nomad stop receiver
 c:\opt\consul\nomad stop discovery
 c:\opt\consul\nomad stop broker
+c:\opt\consul\nomad stop nginx
 rmdir /S /Q %receiver_folder%
 echo db.dropDatabase() | %mongo_exe% %broker_database_name%
 
diff --git a/tests/automatic/producer_receiver/check_monitoring/check_linux.sh b/tests/automatic/producer_receiver/check_monitoring/check_linux.sh
index 817e76757..936ca16de 100644
--- a/tests/automatic/producer_receiver/check_monitoring/check_linux.sh
+++ b/tests/automatic/producer_receiver/check_monitoring/check_linux.sh
@@ -12,6 +12,7 @@ Cleanup() {
 	influx -execute "drop database ${database_name}"
     nomad stop receiver
     nomad stop discovery
+    nomad stop nginx
     echo "db.dropDatabase()" | mongo ${mongo_database_name}
     rm -rf ${receiver_folder}
 }
@@ -22,10 +23,11 @@ influx -execute "create database ${database_name}"
 
 nomad run receiver.nmd
 nomad run discovery.nmd
+nomad run nginx.nmd
 
 sleep 1
 
-$1 localhost:5006 100 112 4  0
+$1 localhost:8400 100 112 4  0
 
 sleep 1
 
diff --git a/tests/automatic/producer_receiver/transfer_single_file/check_linux.sh b/tests/automatic/producer_receiver/transfer_single_file/check_linux.sh
index d904c84f6..d2b4f5f5a 100644
--- a/tests/automatic/producer_receiver/transfer_single_file/check_linux.sh
+++ b/tests/automatic/producer_receiver/transfer_single_file/check_linux.sh
@@ -13,6 +13,7 @@ Cleanup() {
 	rm -rf ${receiver_folder}
     nomad stop receiver
     nomad stop discovery
+    nomad stop nginx
     echo "db.dropDatabase()" | mongo ${mongo_database_name}
     influx -execute "drop database ${database_name}"
 }
@@ -20,12 +21,13 @@ Cleanup() {
 influx -execute "create database ${database_name}"
 echo "db.${mongo_database_name}.insert({dummy:1})" | mongo ${mongo_database_name}
 
+nomad run nginx.nmd
 nomad run receiver.nmd
 nomad run discovery.nmd
 
 mkdir -p ${receiver_folder}
 
-$1 localhost:5006 100 1 1  0
+$1 localhost:8400 100 1 1  0
 
 
 ls -ln ${receiver_folder}/1.bin | awk '{ print $5 }'| grep 102400
diff --git a/tests/automatic/producer_receiver/transfer_single_file/check_windows.bat b/tests/automatic/producer_receiver/transfer_single_file/check_windows.bat
index af71a9d81..cb26780f3 100644
--- a/tests/automatic/producer_receiver/transfer_single_file/check_windows.bat
+++ b/tests/automatic/producer_receiver/transfer_single_file/check_windows.bat
@@ -7,12 +7,13 @@ echo db.%database_name%.insert({dummy:1})" | %mongo_exe% %database_name%
 
 c:\opt\consul\nomad run receiver.nmd
 c:\opt\consul\nomad run discovery.nmd
+c:\opt\consul\nomad run nginx.nmd
 
 ping 1.0.0.0 -n 1 -w 100 > nul
 
 mkdir %receiver_folder%
 
-%1 localhost:5006 100 1 1 0
+%1 localhost:8400 100 1 1 0
 
 ping 1.0.0.0 -n 1 -w 100 > nul
 
@@ -28,6 +29,7 @@ exit /b 1
 :clean
 c:\opt\consul\nomad stop receiver
 c:\opt\consul\nomad stop discovery
+c:\opt\consul\nomad stop nginx
 rmdir /S /Q %receiver_folder%
 echo db.dropDatabase() | %mongo_exe% %database_name%
 
diff --git a/config/nomad/nginx.conf b/tests/automatic/settings/nginx.conf.tpl
similarity index 51%
rename from config/nomad/nginx.conf
rename to tests/automatic/settings/nginx.conf.tpl
index 357a7c157..5d7672054 100644
--- a/config/nomad/nginx.conf
+++ b/tests/automatic/settings/nginx.conf.tpl
@@ -13,10 +13,14 @@ http {
 
 #    keepalive_timeout  0;
 #    keepalive_timeout  65;
+
+    resolver 127.0.0.1:8600 valid=1s;
     server {
-        listen       8080;
-	    location /discovery/ {
-        proxy_pass http://discovery.service.consul:5006/;
+        listen       8400;
+          set $discovery_endpoint discovery.service.asapo;
+          location /discovery/ {
+            rewrite ^/discovery(/.*) $1 break;
+            proxy_pass http://$discovery_endpoint:5006$uri;
         }
     }
 }
diff --git a/worker/api/cpp/src/server_data_broker.cpp b/worker/api/cpp/src/server_data_broker.cpp
index 887c9bfc7..da6940895 100644
--- a/worker/api/cpp/src/server_data_broker.cpp
+++ b/worker/api/cpp/src/server_data_broker.cpp
@@ -56,7 +56,7 @@ std::string GetIDFromJson(const std::string& json_string, Error* err) {
     return std::to_string(id);
 }
 
-void ServerDataBroker::ProcessServerError(Error* err,const std::string& response,std::string* redirect_uri) {
+void ServerDataBroker::ProcessServerError(Error* err, const std::string& response, std::string* redirect_uri) {
     if ((*err)->GetErrorType() != asapo::ErrorType::kEndOfFile) {
         (*err)->Append(response);
         return;
@@ -69,11 +69,11 @@ void ServerDataBroker::ProcessServerError(Error* err,const std::string& response
             *redirect_uri = server_uri_ + "/database/" + source_name_ + "/" + id;
         }
     }
-    *err=nullptr;
+    *err = nullptr;
     return;
 }
 
-Error ServerDataBroker::ProcessRequest(std::string* response,std::string request_uri) {
+Error ServerDataBroker::ProcessRequest(std::string* response, std::string request_uri) {
     Error err;
     HttpCode code;
     *response = httpclient__->Get(request_uri, &code, &err);
@@ -88,12 +88,12 @@ Error ServerDataBroker::GetFileInfoFromServer(FileInfo* info, const std::string&
     uint64_t elapsed_ms = 0;
     std::string response;
     while (true) {
-        auto err = ProcessRequest(&response,request_uri);
+        auto err = ProcessRequest(&response, request_uri);
         if (err == nullptr) {
             break;
         }
 
-        ProcessServerError(&err,response,&request_uri);
+        ProcessServerError(&err, response, &request_uri);
         if (err != nullptr) {
             return err;
         }
diff --git a/worker/api/cpp/src/server_data_broker.h b/worker/api/cpp/src/server_data_broker.h
index f17ce25c3..03f18b8a3 100644
--- a/worker/api/cpp/src/server_data_broker.h
+++ b/worker/api/cpp/src/server_data_broker.h
@@ -20,8 +20,8 @@ class ServerDataBroker final : public asapo::DataBroker {
     std::unique_ptr<HttpClient> httpclient__;
   private:
     Error GetFileInfoFromServer(FileInfo* info, const std::string& operation);
-    void ProcessServerError(Error* err,const std::string& response,std::string* redirect_uri);
-    Error ProcessRequest(std::string* response,std::string request_uri);
+    void ProcessServerError(Error* err, const std::string& response, std::string* redirect_uri);
+    Error ProcessRequest(std::string* response, std::string request_uri);
     std::string server_uri_;
     std::string source_name_;
     uint64_t timeout_ms_ = 0;
-- 
GitLab