From 4e10c139f827221d89e6b2dff59a693cef073d0a Mon Sep 17 00:00:00 2001 From: Hepatica Date: Sat, 17 Aug 2024 03:39:14 +0200 Subject: [PATCH] Fix --- SpCloudMain/Controllers/PublishController.cpp | 6 ++-- SpCloudMain/Models/App.cpp | 10 +++---- SpCloudMain/Service/FileProcessingService.cpp | 28 ++++++++++++++++--- SpCloudMain/Service/MongoDbService.cpp | 4 +-- SpCloudMain/SpCloudMain.cpp | 6 ++-- 5 files changed, 37 insertions(+), 17 deletions(-) diff --git a/SpCloudMain/Controllers/PublishController.cpp b/SpCloudMain/Controllers/PublishController.cpp index 6e4ba3e..3481737 100644 --- a/SpCloudMain/Controllers/PublishController.cpp +++ b/SpCloudMain/Controllers/PublishController.cpp @@ -67,11 +67,11 @@ public: file_processing->delete_file(filename); - /*app->set_url("https://" + app->get_name() + ".almavid.ru/"); + app->set_url("https://" + app->get_name() + ".almavid.ru/"); - app->set_url_on_local_machine("http://localhost:" + std::to_string(last_available_port));*/ + app->set_url_on_local_machine("http://localhost:" + std::to_string(last_available_port)); - //app->set_service_name(app_final_file_path); + app->set_service_name(app_final_file_path); return "Publish successfully: " + filename; } diff --git a/SpCloudMain/Models/App.cpp b/SpCloudMain/Models/App.cpp index 73d7c88..84808a5 100644 --- a/SpCloudMain/Models/App.cpp +++ b/SpCloudMain/Models/App.cpp @@ -8,25 +8,25 @@ private: std::string url; std::string url_on_local_machine; std::string target; - //std::string service_name; + std::string service_name; public: App(const std::string& name, const std::string& user_id, const std::string& url, - const std::string& url_on_local_machine, const std::string& target/*, const std::string& service_name*/) - : name(name), user_id(user_id), url(url), url_on_local_machine(url_on_local_machine), target(target)/*, service_name(service_name)*/ {} + const std::string& url_on_local_machine, const std::string& target, const std::string& service_name) + : name(name), user_id(user_id), url(url), url_on_local_machine(url_on_local_machine), target(target), service_name(service_name) {} std::string get_name() const { return name; } std::string get_user_id() const { return user_id; } std::string get_url() const { return url; } std::string get_url_on_local_machine() const { return url_on_local_machine; } std::string get_target() const { return target; } - //std::string get_service_name() const { return service_name; } + std::string get_service_name() const { return service_name; } void set_name(const std::string& name) { this->name = name; } void set_user_id(const std::string& user_id) { this->user_id = user_id; } void set_url(const std::string& url) { this->url = url; } void set_url_on_local_machine(const std::string& url_on_local_machine) { this->url_on_local_machine = url_on_local_machine; } void set_target(const std::string& target) { this->target = target; } - //void set_service_name(const std::string& service_name) { this->service_name = service_name; } + void set_service_name(const std::string& service_name) { this->service_name = service_name; } }; #endif // APP_H diff --git a/SpCloudMain/Service/FileProcessingService.cpp b/SpCloudMain/Service/FileProcessingService.cpp index 4228641..4e6cd12 100644 --- a/SpCloudMain/Service/FileProcessingService.cpp +++ b/SpCloudMain/Service/FileProcessingService.cpp @@ -209,15 +209,23 @@ public: std::string command_reload = "sudo systemctl daemon-reload"; - std::thread commandThreadReload(&CommandService::execute_command, command_reload); + /*std::thread commandThreadReload(&CommandService::execute_command, command_reload); - commandThreadReload.join(); + commandThreadReload.join();*/ std::string command_start = "sudo systemctl start " + name + ".service"; - std::thread commandThreadStart(&CommandService::execute_command, commandThreadStart); + //std::thread commandThreadStart(&CommandService::execute_command, commandThreadStart); - commandThreadStart.join(); + //commandThreadStart.join(); + + auto request_reload = std::async(std::launch::async, &FileProcessingService::execute_command, this, command_reload); + + std::string response_reload = request_reload.get(); + + auto request_start = std::async(std::launch::async, &FileProcessingService::execute_command, this, command_start); + + std::string response_start = request_start.get(); //Todo check service ->sudo systemctl status .service @@ -230,6 +238,18 @@ public: } } + + std::string execute_command(const std::string& command) { + std::array buffer; + std::string result; + std::shared_ptr pipe(popen(command.c_str(), "r"), pclose); + if (!pipe) throw std::runtime_error("popen() failed!"); + while (fgets(buffer.data(), buffer.size(), pipe.get()) != nullptr) { + result += buffer.data(); + } + return result; + } + void create_directory(const std::string& path) { std::filesystem::create_directories(path); } diff --git a/SpCloudMain/Service/MongoDbService.cpp b/SpCloudMain/Service/MongoDbService.cpp index 218537a..20b056a 100644 --- a/SpCloudMain/Service/MongoDbService.cpp +++ b/SpCloudMain/Service/MongoDbService.cpp @@ -114,7 +114,7 @@ public: return "App name isn't free please select another one"; } - std::string add_app(std::string name, std::string user_id, std::string url, std::string url_on_local_mahcine, std::string target/*, std::string service_name*/) + std::string add_app(std::string name, std::string user_id, std::string url, std::string url_on_local_mahcine, std::string target, std::string service_name) { std::string json_data = R"({ "dataSource": "SpCloudCluster", @@ -124,7 +124,7 @@ public: "name": ")" + name + R"(", "user_id": ")" + user_id + R"(", "url": ")" + url + R"(", - "service_name": ")" + "TEST" + R"(", + "service_name": ")" + service_name + R"(", "url_on_local_machine": ")" + url_on_local_mahcine + R"(", "target": ")" + target + R"(" } diff --git a/SpCloudMain/SpCloudMain.cpp b/SpCloudMain/SpCloudMain.cpp index a6d1403..86f3b13 100644 --- a/SpCloudMain/SpCloudMain.cpp +++ b/SpCloudMain/SpCloudMain.cpp @@ -72,12 +72,12 @@ int main() return; } - App* app = new App(name, user_id, "url", "local_url", target/*,"service_name"*/); + App* app = new App(name, user_id, "url", "local_url", target,"service_name"); publish_controller.process_publish(req, app); - //mongo_service.add_app(app->get_name(), app->get_user_id(), app->get_url(), - // app->get_url_on_local_machine(), app->get_target()/*, app->get_service_name()*/);//TODO UNCOMMENT AND FIX + mongo_service.add_app(app->get_name(), app->get_user_id(), app->get_url(), + app->get_url_on_local_machine(), app->get_target(), app->get_service_name());//TODO UNCOMMENT AND FIX delete app;