diff --git a/Online/GauchoServer/src/GauchoRPC.cpp b/Online/GauchoServer/src/GauchoRPC.cpp index 52984d6e5377717c699ab8ba7738ebcc3efeed6c..a259c48873b0f74d2262f55290724f76843ca446 100644 --- a/Online/GauchoServer/src/GauchoRPC.cpp +++ b/Online/GauchoServer/src/GauchoRPC.cpp @@ -74,6 +74,8 @@ namespace Online { /// Access histogram list by regular expression json task_histogram(const std::string& dns, const std::string& task, const std::string& selection); /// Access histogram list by regular expression + json task_regex_histogram(const std::string& dns, const std::string& task, const std::string& selection); + /// Access histogram list by regular expression json task_histograms_regex(const std::string& dns, const std::string& task, const std::string& selection); /// List histogram pages for implementation of the presenter @@ -100,6 +102,7 @@ namespace Online { // C++ include files #include <iostream> #include <stdexcept> +#include <fstream> #include <memory> // Framework includes @@ -239,6 +242,32 @@ GauchoRPC::json GauchoRPC::task_histogram(const std::string& dns, const std::str return answer; } +/// Access histogram list by regular expression +GauchoRPC::json GauchoRPC::task_regex_histogram(const std::string& dns, const std::string& task, const std::string& selection) { + _check_dns_task(this, dns, task); + std::vector<std::string> tasks; + HistTaskJson::taskList(dns, tasks); + auto flags = std::regex_constants::icase; + std::regex regex(task, flags); + + for( const auto& t : tasks ) { + std::smatch sm; + bool stat = std::regex_match(t, sm, regex); + if ( stat ) { + HistTaskJson obj(t, dns); + auto answer = obj.histos(selection); + if ( answer.size() > 0 ) { + ++m_counters.numSuccess; + return answer.at(0); + } + ++m_counters.numError; + return answer; + } + } + ++m_counters.numError; + return {}; +} + /// List histogram pages for implementation of the presenter GauchoRPC::json GauchoRPC::list_histogram_pages() { struct Scanner { @@ -270,7 +299,7 @@ GauchoRPC::json GauchoRPC::list_histogram_pages() { //std::cout << obj << std::endl; return obj; } -#include <fstream> + /// Load single histogram page identified by the relative path GauchoRPC::json GauchoRPC::load_histogram_page(const std::string& path) { std::filesystem::path loc(pages_location.string()+path.substr(path.find("/",1))); @@ -290,14 +319,17 @@ static void help_server() {} /// Main entry point to start the application extern "C" int run_gaucho_rpc(int argc, char** argv) { - int debug = 0; - int port = 8000; + int debug = 0; + int threads = 0; + int port = 8000; std::string host = "0.0.0.0"; for(int i = 0; i < argc && argv[i]; ++i) { if ( 0 == ::strncmp("-port",argv[i],4) ) port = ::atol(argv[++i]); else if ( 0 == ::strncmp("-host",argv[i],4) ) host = argv[++i]; + else if ( 0 == ::strncmp("-threads",argv[i],3) ) + threads = ::atol(argv[++i]); else if ( 0 == ::strncmp("-debug",argv[i],4) ) debug = 1; else if ( 0 == ::strncmp("-help",argv[i],2) ) @@ -316,6 +348,7 @@ extern "C" int run_gaucho_rpc(int argc, char** argv) { (*json_handler)->define("task_histogram_directory", jsonrpc::Call(&callable).make(&GauchoRPC::task_histogram_directory)); (*json_handler)->define("task_histograms_regex", jsonrpc::Call(&callable).make(&GauchoRPC::task_histograms_regex)); (*json_handler)->define("task_histogram", jsonrpc::Call(&callable).make(&GauchoRPC::task_histogram)); + (*json_handler)->define("task_regex_histogram", jsonrpc::Call(&callable).make(&GauchoRPC::task_regex_histogram)); callable.pages_location = "/home/frankm/Presenter/web/Pages"; (*json_handler)->define("list_histogram_pages", jsonrpc::Call(&callable).make(&GauchoRPC::list_histogram_pages)); @@ -329,7 +362,7 @@ extern "C" int run_gaucho_rpc(int argc, char** argv) { rpc::HttpServer server(std::move(handler), host, port, rpc::HttpServer::SERVER); server.setDebug(debug != 0); ::dis_start_serving(RTL::processName().c_str()); - server.start(false,0); + server.start(false, threads); return 0; }