From b799302fd6bca63f798049e92af85418c207d7d3 Mon Sep 17 00:00:00 2001 From: Soufiane Echkem Date: Thu, 24 Oct 2024 16:11:21 +0100 Subject: [PATCH] feat(engine/gRPC): GetContactGroup return information about a contact group. --- engine/enginerpc/engine.proto | 11 +++++ engine/enginerpc/engine_impl.cc | 45 +++++++++++++++++++ engine/inc/com/centreon/engine/engine_impl.hh | 3 ++ 3 files changed, 59 insertions(+) diff --git a/engine/enginerpc/engine.proto b/engine/enginerpc/engine.proto index a0c91ffdcf..2ef1e00443 100644 --- a/engine/enginerpc/engine.proto +++ b/engine/enginerpc/engine.proto @@ -36,6 +36,7 @@ service Engine { rpc GetContact(ContactIdentifier) returns (EngineContact) {} rpc GetService(ServiceIdentifier) returns (EngineService) {} rpc GetHostGroup(HostGroupIdentifier) returns (EngineHostGroup) {} + rpc GetContactGroup(ContactGroupIdentifier) returns (EngineContactGroup) {} rpc GetHostsCount(google.protobuf.Empty) returns (GenericValue) {} rpc GetContactsCount(google.protobuf.Empty) returns (GenericValue) {} rpc GetServicesCount(google.protobuf.Empty) returns (GenericValue) {} @@ -690,6 +691,16 @@ message EngineHostGroup { string action_url = 7; } +message ContactGroupIdentifier { + string name = 1; +} + +message EngineContactGroup { + string name = 1; + string alias = 2; + repeated string members = 3; +} + message EngineComment { string host_name = 1; string svc_desc = 2; diff --git a/engine/enginerpc/engine_impl.cc b/engine/enginerpc/engine_impl.cc index 737d577887..cd08e32405 100644 --- a/engine/enginerpc/engine_impl.cc +++ b/engine/enginerpc/engine_impl.cc @@ -845,6 +845,51 @@ grpc::Status engine_impl::GetHostGroup(grpc::ServerContext* context return grpc::Status(grpc::INVALID_ARGUMENT, err); } +/** + * @brief Return ContactGroup informations. + * + * @param context gRPC context + * @param request ContactGroup's identifier (by ContactGroup name) + * @param response The filled fields + * + *@return Status::OK + */ +grpc::Status engine_impl::GetContactGroup(grpc::ServerContext* context + [[maybe_unused]], + const ContactGroupIdentifier* request, + EngineContactGroup* response) { + std::string err; + auto fn = std::packaged_task([&err, request, + contactgroup = + response]() -> int32_t { + std::shared_ptr selectedcontactgroup; + auto itcontactgroup = contactgroup::contactgroups.find(request->name()); + if (itcontactgroup != contactgroup::contactgroups.end()) + selectedcontactgroup = itcontactgroup->second; + else { + err = fmt::format("could not find contactgroup '{}'", request->name()); + return 1; + } + + contactgroup->set_name(selectedcontactgroup->get_name()); + contactgroup->set_alias(selectedcontactgroup->get_alias()); + + if (!selectedcontactgroup->get_members().empty()) + for (const auto& [key, _] : selectedcontactgroup->get_members()) + contactgroup->add_members(key); + + return 0; + }); + + std::future result = fn.get_future(); + command_manager::instance().enqueue(std::move(fn)); + + if (result.get() == 0) + return grpc::Status::OK; + else + return grpc::Status(grpc::INVALID_ARGUMENT, err); +} + /** * @brief Return the total number of hosts. * diff --git a/engine/inc/com/centreon/engine/engine_impl.hh b/engine/inc/com/centreon/engine/engine_impl.hh index 2c06af3bc0..69c7ae2fe1 100644 --- a/engine/inc/com/centreon/engine/engine_impl.hh +++ b/engine/inc/com/centreon/engine/engine_impl.hh @@ -60,6 +60,9 @@ class engine_impl final : public Engine::Service { grpc::Status GetHostGroup(grpc::ServerContext* context, const HostGroupIdentifier*, EngineHostGroup*) override; + grpc::Status GetContactGroup(grpc::ServerContext* context, + const ContactGroupIdentifier* request, + EngineContactGroup* response) override; grpc::Status AddHostComment(grpc::ServerContext* context, const EngineComment* request, CommandSuccess* response) override;