mirror of
https://github.com/falcosecurity/falco.git
synced 2025-07-01 09:02:18 +00:00
new(userspace/falco): register version gRPC service
Signed-off-by: Leonardo Di Donato <leodidonato@gmail.com>
This commit is contained in:
parent
bc297bdc8f
commit
c7aff2d4cb
@ -50,6 +50,7 @@ add_executable(
|
|||||||
webserver.cpp
|
webserver.cpp
|
||||||
grpc_context.cpp
|
grpc_context.cpp
|
||||||
grpc_server_impl.cpp
|
grpc_server_impl.cpp
|
||||||
|
grpc_request_context.cpp
|
||||||
grpc_server.cpp
|
grpc_server.cpp
|
||||||
utils.cpp
|
utils.cpp
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/version.grpc.pb.cc
|
${CMAKE_CURRENT_BINARY_DIR}/version.grpc.pb.cc
|
||||||
@ -58,6 +59,8 @@ add_executable(
|
|||||||
${CMAKE_CURRENT_BINARY_DIR}/output.pb.cc
|
${CMAKE_CURRENT_BINARY_DIR}/output.pb.cc
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/schema.pb.cc)
|
${CMAKE_CURRENT_BINARY_DIR}/schema.pb.cc)
|
||||||
|
|
||||||
|
add_dependencies(falco civetweb)
|
||||||
|
|
||||||
if(USE_BUNDLED_DEPS)
|
if(USE_BUNDLED_DEPS)
|
||||||
add_dependencies(falco yamlcpp)
|
add_dependencies(falco yamlcpp)
|
||||||
endif()
|
endif()
|
||||||
|
@ -33,7 +33,7 @@ void request_stream_context<falco::output::service, falco::output::request, falc
|
|||||||
m_stream_ctx.reset();
|
m_stream_ctx.reset();
|
||||||
m_req.Clear();
|
m_req.Clear();
|
||||||
auto cq = srv->m_completion_queue.get();
|
auto cq = srv->m_completion_queue.get();
|
||||||
(srv->m_svc.*m_request_func)(srvctx, &m_req, m_res_writer.get(), cq, cq, this);
|
(srv->m_output_svc.*m_request_func)(srvctx, &m_req, m_res_writer.get(), cq, cq, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
@ -86,22 +86,20 @@ void falco::grpc::request_context<falco::version::service, falco::version::reque
|
|||||||
m_state = request_context_base::REQUEST;
|
m_state = request_context_base::REQUEST;
|
||||||
m_srv_ctx.reset(new ::grpc::ServerContext);
|
m_srv_ctx.reset(new ::grpc::ServerContext);
|
||||||
auto srvctx = m_srv_ctx.get();
|
auto srvctx = m_srv_ctx.get();
|
||||||
m_res_writer.reset(new ::grpc::ServerAsyncWriter<version::response>(srvctx));
|
m_res_writer.reset(new ::grpc::ServerAsyncResponseWriter<version::response>(srvctx));
|
||||||
m_req.Clear();
|
m_req.Clear();
|
||||||
// auto cq = srv->m_completion_queue.get();
|
auto cq = srv->m_completion_queue.get();
|
||||||
// fixme(leodido) > m_svc is output::service not version::service
|
(srv->m_version_svc.*m_request_func)(srvctx, &m_req, m_res_writer.get(), cq, cq, this);
|
||||||
// (srv->m_svc.*m_request_func)(srvctx, &m_req, m_res_writer.get(), cq, cq, this);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
void falco::grpc::request_context<falco::version::service, falco::version::request, falco::version::response>::process(server* srv)
|
void falco::grpc::request_context<falco::version::service, falco::version::request, falco::version::response>::process(server* srv)
|
||||||
{
|
{
|
||||||
version::response res;
|
version::response res;
|
||||||
(srv->*m_process_func)(m_srv_ctx.get(), m_req, res);
|
(srv->*m_process_func)(m_srv_ctx.get(), m_req, res); // version()
|
||||||
// Done
|
// Done
|
||||||
m_state = request_context_base::FINISH;
|
m_state = request_context_base::FINISH;
|
||||||
m_res_writer->Write(res, this);
|
m_res_writer->Finish(res, ::grpc::Status::OK, this);
|
||||||
m_res_writer->Finish(::grpc::Status::OK, this);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
|
@ -93,7 +93,7 @@ public:
|
|||||||
void end(server* srv, bool isError);
|
void end(server* srv, bool isError);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::unique_ptr<::grpc::ServerAsyncWriter<Response>> m_res_writer;
|
std::unique_ptr<::grpc::ServerAsyncResponseWriter<Response>> m_res_writer;
|
||||||
Request m_req;
|
Request m_req;
|
||||||
};
|
};
|
||||||
} // namespace grpc
|
} // namespace grpc
|
||||||
|
@ -117,8 +117,8 @@ void falco::grpc::server::run()
|
|||||||
|
|
||||||
::grpc::ServerBuilder builder;
|
::grpc::ServerBuilder builder;
|
||||||
builder.AddListeningPort(m_server_addr, ::grpc::SslServerCredentials(ssl_opts));
|
builder.AddListeningPort(m_server_addr, ::grpc::SslServerCredentials(ssl_opts));
|
||||||
builder.RegisterService(&m_svc);
|
builder.RegisterService(&m_output_svc);
|
||||||
// fixme(leodido) > register various services ...
|
builder.RegisterService(&m_version_svc);
|
||||||
|
|
||||||
m_completion_queue = builder.AddCompletionQueue();
|
m_completion_queue = builder.AddCompletionQueue();
|
||||||
m_server = builder.BuildAndStart();
|
m_server = builder.BuildAndStart();
|
||||||
@ -129,9 +129,10 @@ void falco::grpc::server::run()
|
|||||||
// For this approach to be sufficient server::IMPL have to be fast
|
// For this approach to be sufficient server::IMPL have to be fast
|
||||||
int context_num = m_threadiness * 10;
|
int context_num = m_threadiness * 10;
|
||||||
|
|
||||||
//REGISTER_UNARY(version::request, version::response, version::service, version, version, context_num)
|
REGISTER_UNARY(version::request, version::response, version::service, version, version, context_num)
|
||||||
REGISTER_STREAM(output::request, output::response, output::service, subscribe, subscribe, context_num)
|
REGISTER_STREAM(output::request, output::response, output::service, subscribe, subscribe, context_num)
|
||||||
|
|
||||||
|
// todo(leodido, fntlnz) > do we need to size thrediness to context_num * number of registered services here? eg., context_num * 2
|
||||||
m_threads.resize(m_threadiness);
|
m_threads.resize(m_threadiness);
|
||||||
int thread_idx = 0;
|
int thread_idx = 0;
|
||||||
for(std::thread& thread : m_threads)
|
for(std::thread& thread : m_threads)
|
||||||
|
@ -47,12 +47,10 @@ public:
|
|||||||
void run();
|
void run();
|
||||||
void stop();
|
void stop();
|
||||||
|
|
||||||
// fixme(leodido) > wny the output::service:: ..?
|
output::service::AsyncService m_output_svc;
|
||||||
output::service::AsyncService m_svc;
|
version::service::AsyncService m_version_svc;
|
||||||
std::unique_ptr<::grpc::ServerCompletionQueue> m_completion_queue;
|
|
||||||
|
|
||||||
// version::service::AsyncService m_version_svc;
|
std::unique_ptr<::grpc::ServerCompletionQueue> m_completion_queue;
|
||||||
// std::unique_ptr<::grpc::ServerCompletionQueue> m_version_completion_queue;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::string m_server_addr;
|
std::string m_server_addr;
|
||||||
|
Loading…
Reference in New Issue
Block a user