diff --git a/.circleci/config.yml b/.circleci/config.yml index 59403e07..3943e45a 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -12,7 +12,7 @@ jobs: command: apt update -y - run: name: Install dependencies - command: DEBIAN_FRONTEND=noninteractive apt install libssl-dev libyaml-dev libncurses-dev libc-ares-dev libprotobuf-dev protobuf-compiler libjq-dev libyaml-cpp-dev libgrpc++-dev protobuf-compiler-grpc rpm libelf-dev cmake build-essential libcurl4-openssl-dev linux-headers-generic clang llvm -y + command: DEBIAN_FRONTEND=noninteractive apt install libssl-dev libyaml-dev libncurses-dev libc-ares-dev libprotobuf-dev protobuf-compiler libjq-dev libyaml-cpp-dev libgrpc++-dev protobuf-compiler-grpc rpm libelf-dev cmake build-essential libcurl4-openssl-dev linux-headers-generic clang llvm git -y - run: name: Prepare project command: | @@ -44,7 +44,7 @@ jobs: command: apt update -y - run: name: Install dependencies - command: DEBIAN_FRONTEND=noninteractive apt install libssl-dev libyaml-dev libncurses-dev libc-ares-dev libprotobuf-dev protobuf-compiler libjq-dev libyaml-cpp-dev libgrpc++-dev protobuf-compiler-grpc rpm libelf-dev cmake build-essential libcurl4-openssl-dev linux-headers-generic clang llvm -y + command: DEBIAN_FRONTEND=noninteractive apt install libssl-dev libyaml-dev libncurses-dev libc-ares-dev libprotobuf-dev protobuf-compiler libjq-dev libyaml-cpp-dev libgrpc++-dev protobuf-compiler-grpc rpm libelf-dev cmake build-essential libcurl4-openssl-dev linux-headers-generic clang llvm git -y - run: name: Prepare project command: | diff --git a/userspace/falco/falco.cpp b/userspace/falco/falco.cpp index 6ff5faf6..bf2a7ffc 100644 --- a/userspace/falco/falco.cpp +++ b/userspace/falco/falco.cpp @@ -1208,7 +1208,14 @@ int falco_init(int argc, char **argv) { // TODO(fntlnz,leodido): when we want to spawn multiple threads we need to have a queue per thread, or implement // different queuing mechanisms, round robin, fanout? What we want to achieve? - grpc_server.init(config.m_grpc_bind_address, config.m_grpc_threadiness, config.m_grpc_private_key, config.m_grpc_cert_chain, config.m_grpc_root_certs); + grpc_server.init( + config.m_grpc_bind_address, + config.m_grpc_threadiness, + config.m_grpc_private_key, + config.m_grpc_cert_chain, + config.m_grpc_root_certs, + config.m_log_level + ); grpc_server_thread = std::thread([&grpc_server] { grpc_server.run(); }); diff --git a/userspace/falco/grpc_server.cpp b/userspace/falco/grpc_server.cpp index f594aff8..b337f1f7 100644 --- a/userspace/falco/grpc_server.cpp +++ b/userspace/falco/grpc_server.cpp @@ -44,20 +44,22 @@ limitations under the License. c.start(this); \ } -static void gpr_falco_log_dispatcher_func(gpr_log_func_args* args) +static void gpr_log_dispatcher_func(gpr_log_func_args* args) { - int priority = LOG_INFO; - - if(args - ->severity == GPR_LOG_SEVERITY_ERROR) + int priority; + switch(args->severity) { + case GPR_LOG_SEVERITY_ERROR: priority = LOG_ERR; - } - if(args - ->severity == GPR_LOG_SEVERITY_DEBUG) - { + break; + case GPR_LOG_SEVERITY_DEBUG: priority = LOG_DEBUG; + break; + default: + priority = LOG_INFO; + break; } + falco_logger::log(priority, args->message); } @@ -113,7 +115,13 @@ void falco::grpc::server::thread_process(int thread_index) } } -void falco::grpc::server::init(std::string server_addr, int threadiness, std::string private_key, std::string cert_chain, std::string root_certs) +void falco::grpc::server::init( + std::string server_addr, + int threadiness, + std::string private_key, + std::string cert_chain, + std::string root_certs, + std::string log_level) { m_server_addr = server_addr; m_threadiness = threadiness; @@ -121,6 +129,26 @@ void falco::grpc::server::init(std::string server_addr, int threadiness, std::st m_cert_chain = cert_chain; m_root_certs = root_certs; + // Set the verbosity level of gpr logger + falco::schema::priority logging_level = falco::schema::INFORMATIONAL; + falco::schema::priority_Parse(log_level, &logging_level); + switch(logging_level) + { + case falco::schema::ERROR: + gpr_set_log_verbosity(GPR_LOG_SEVERITY_ERROR); + break; + case falco::schema::DEBUG: + gpr_set_log_verbosity(GPR_LOG_SEVERITY_DEBUG); + break; + case falco::schema::INFORMATIONAL: + default: + // note > info will always enter here since it is != from "informational" + gpr_set_log_verbosity(GPR_LOG_SEVERITY_INFO); + break; + } + gpr_log_verbosity_init(); + gpr_set_log_function(gpr_log_dispatcher_func); + if(falco::utils::network::is_unix_scheme(m_server_addr)) { init_unix_server_builder(); @@ -152,8 +180,6 @@ void falco::grpc::server::init_unix_server_builder() void falco::grpc::server::run() { - gpr_set_log_function(gpr_falco_log_dispatcher_func); - m_server_builder.RegisterService(&m_output_svc); m_server_builder.RegisterService(&m_version_svc); diff --git a/userspace/falco/grpc_server.h b/userspace/falco/grpc_server.h index 8271fdf5..9f24b651 100644 --- a/userspace/falco/grpc_server.h +++ b/userspace/falco/grpc_server.h @@ -29,20 +29,17 @@ namespace grpc class server : public server_impl { public: - server() - { - } - server(std::string server_addr, int threadiness, std::string private_key, std::string cert_chain, std::string root_certs): - m_server_addr(server_addr), - m_threadiness(threadiness), - m_private_key(private_key), - m_cert_chain(cert_chain), - m_root_certs(root_certs) - { - } + server() = default; virtual ~server() = default; - void init(std::string server_addr, int threadiness, std::string private_key, std::string cert_chain, std::string root_certs); + void init( + std::string server_addr, + int threadiness, + std::string private_key, + std::string cert_chain, + std::string root_certs, + std::string log_level + ); void thread_process(int thread_index); void run(); void stop();