Commit 1f17cfcb authored by Tien-Thinh Nguyen's avatar Tien-Thinh Nguyen

add RetrieveCompleteSearch and RetrieveStoredSearch operations

parent 463ea1a6
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
*/ */
#include "CompleteStoredSearchDocumentApiImpl.h" #include "CompleteStoredSearchDocumentApiImpl.h"
#include "3gpp_29.500.h"
namespace oai { namespace oai {
namespace nrf { namespace nrf {
...@@ -30,7 +31,33 @@ CompleteStoredSearchDocumentApiImpl::CompleteStoredSearchDocumentApiImpl( ...@@ -30,7 +31,33 @@ CompleteStoredSearchDocumentApiImpl::CompleteStoredSearchDocumentApiImpl(
void CompleteStoredSearchDocumentApiImpl::retrieve_complete_search( void CompleteStoredSearchDocumentApiImpl::retrieve_complete_search(
const std::string &searchId, Pistache::Http::ResponseWriter &response) { const std::string &searchId, Pistache::Http::ResponseWriter &response) {
response.send(Pistache::Http::Code::Ok, "Do some magic\n"); Logger::nrf_sbi().info(
"Got a request to retrieve a complete search with ID %s",
searchId.c_str());
nlohmann::json sr_json = { };
nlohmann::json json_data = { };
json_data["nfInstances"] = nlohmann::json::array();
std::string content_type = "application/json";
std::shared_ptr<nrf_search_result> search_result = { };
m_nrf_app->find_search_result(searchId, search_result);
// convert the profile to Json
if (search_result != nullptr) {
search_result.get()->to_json(sr_json, 0); //with maximum number of NF profiles
json_data["nfInstances"] = sr_json["nfInstances"];
}
Logger::nrf_sbi().debug("Json data: %s", json_data.dump().c_str());
// content type
response.headers().add < Pistache::Http::Header::ContentType
> (Pistache::Http::Mime::MediaType(content_type));
response.send(Pistache::Http::Code(HTTP_STATUS_CODE_200_OK),
json_data.dump().c_str());
} }
} }
......
...@@ -102,13 +102,22 @@ void DiscNFInstancesStoreApiImpl::search_nf_instances( ...@@ -102,13 +102,22 @@ void DiscNFInstancesStoreApiImpl::search_nf_instances(
Logger::nrf_sbi().debug("\tRequested NF instance id: %s", Logger::nrf_sbi().debug("\tRequested NF instance id: %s",
requester_nf_instance_id.c_str()); requester_nf_instance_id.c_str());
} }
uint32_t limit_nfs = 0;
if (!limit.isEmpty()) {
limit_nfs = limit.get();
Logger::nrf_sbi().debug("\tMaximum number of NFProfiles to be returned in the response: %d",
limit_nfs);
}
// TODO: other query parameters // TODO: other query parameters
int http_code = 0; int http_code = 0;
ProblemDetails problem_details = {}; ProblemDetails problem_details = {};
std::string search_id = {}; std::string search_id = {};
m_nrf_app->handle_search_nf_instances(target_nf_type, requester_nf_type, m_nrf_app->handle_search_nf_instances(target_nf_type, requester_nf_type,
requester_nf_instance_id, search_id, requester_nf_instance_id, limit_nfs, search_id,
http_code, 1, problem_details); http_code, 1, problem_details);
nlohmann::json json_data = {}; nlohmann::json json_data = {};
...@@ -122,14 +131,19 @@ void DiscNFInstancesStoreApiImpl::search_nf_instances( ...@@ -122,14 +131,19 @@ void DiscNFInstancesStoreApiImpl::search_nf_instances(
content_type = "application/problem+json"; content_type = "application/problem+json";
} else { } else {
// convert the profile to Json // convert the profile to Json
if (search_result != nullptr) search_result.get()->to_json(json_data); if (search_result != nullptr) search_result.get()->to_json(json_data, limit_nfs);
} }
//TODO: applying client restrictions in terms of the number of
//instances to be returned (i.e. "limit" or "max-
//payload-size" query parameters) .
Logger::nrf_sbi().debug("Json data: %s", json_data.dump().c_str()); Logger::nrf_sbi().debug("Json data: %s", json_data.dump().c_str());
// content type // content type
response.headers().add<Pistache::Http::Header::ContentType>( response.headers().add<Pistache::Http::Header::ContentType>(
Pistache::Http::Mime::MediaType(content_type)); Pistache::Http::Mime::MediaType(content_type));
//TODO: add headers: Cache-Control, ETag
response.send(Pistache::Http::Code(http_code), json_data.dump().c_str()); response.send(Pistache::Http::Code(http_code), json_data.dump().c_str());
} }
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
*/ */
#include "StoredSearchDocumentApiImpl.h" #include "StoredSearchDocumentApiImpl.h"
#include "3gpp_29.500.h"
namespace oai { namespace oai {
namespace nrf { namespace nrf {
...@@ -30,7 +31,34 @@ StoredSearchDocumentApiImpl::StoredSearchDocumentApiImpl( ...@@ -30,7 +31,34 @@ StoredSearchDocumentApiImpl::StoredSearchDocumentApiImpl(
void StoredSearchDocumentApiImpl::retrieve_stored_search( void StoredSearchDocumentApiImpl::retrieve_stored_search(
const std::string &searchId, Pistache::Http::ResponseWriter &response) { const std::string &searchId, Pistache::Http::ResponseWriter &response) {
response.send(Pistache::Http::Code::Ok, "Do some magic\n");
Logger::nrf_sbi().info("Got a request to retrieve a stored search with ID %s",
searchId.c_str());
nlohmann::json sr_json = { };
nlohmann::json json_data = { };
json_data["nfInstances"] = nlohmann::json::array();
std::string content_type = "application/json";
std::shared_ptr<nrf_search_result> search_result = { };
m_nrf_app->find_search_result(searchId, search_result);
// convert the profile to Json
if (search_result != nullptr) {
search_result.get()->to_json(sr_json, search_result.get()->get_limit_nf_instances());
json_data["nfInstances"] = sr_json["nfInstances"];
}
Logger::nrf_sbi().debug("Json data: %s", json_data.dump().c_str());
// content type
response.headers().add < Pistache::Http::Header::ContentType
> (Pistache::Http::Mime::MediaType(content_type));
//TODO: add headers: Cache-Control, ETag
response.send(Pistache::Http::Code(HTTP_STATUS_CODE_200_OK),
json_data.dump().c_str());
} }
} }
......
This diff is collapsed.
...@@ -179,6 +179,7 @@ class nrf_app { ...@@ -179,6 +179,7 @@ class nrf_app {
* @param [const std::string &] requester_nf_type: Requester NF type * @param [const std::string &] requester_nf_type: Requester NF type
* @param [const std::string &] requester_nf_instance_id: Requester NF * @param [const std::string &] requester_nf_instance_id: Requester NF
* instance id * instance id
* @param [uint32_t &] limit_nfs: Maximum number of NFProfiles to be returned in the response:
* @param [std::string &] search_id: Store search result ID * @param [std::string &] search_id: Store search result ID
* @param [int &] http_code: HTTP code used to return to the consumer * @param [int &] http_code: HTTP code used to return to the consumer
* @param [const uint8_t] http_version: HTTP version * @param [const uint8_t] http_version: HTTP version
...@@ -188,7 +189,7 @@ class nrf_app { ...@@ -188,7 +189,7 @@ class nrf_app {
void handle_search_nf_instances(const std::string &target_nf_type, void handle_search_nf_instances(const std::string &target_nf_type,
const std::string &requester_nf_type, const std::string &requester_nf_type,
const std::string &requester_nf_instance_id, const std::string &requester_nf_instance_id,
std::string &search_id, uint32_t &limit_nfs, std::string &search_id,
int &http_code, const uint8_t http_version, int &http_code, const uint8_t http_version,
ProblemDetails &problem_details); ProblemDetails &problem_details);
......
...@@ -36,13 +36,19 @@ ...@@ -36,13 +36,19 @@
using namespace oai::nrf::app; using namespace oai::nrf::app;
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void nrf_search_result::set_search_id(const std::string &id) { search_id = id; } void nrf_search_result::set_search_id(const std::string &id) {
search_id = id;
}
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void nrf_search_result::get_search_id(std::string &id) const { id = search_id; } void nrf_search_result::get_search_id(std::string &id) const {
id = search_id;
}
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
std::string nrf_search_result::get_search_id() const { return search_id; } std::string nrf_search_result::get_search_id() const {
return search_id;
}
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void nrf_search_result::set_nf_instances( void nrf_search_result::set_nf_instances(
...@@ -63,8 +69,7 @@ void nrf_search_result::get_nf_instances( ...@@ -63,8 +69,7 @@ void nrf_search_result::get_nf_instances(
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
std::vector<std::shared_ptr<nrf_profile>> nrf_search_result::get_nf_instances() std::vector<std::shared_ptr<nrf_profile>> nrf_search_result::get_nf_instances() const {
const {
return nf_instances; return nf_instances;
} }
...@@ -83,6 +88,30 @@ uint64_t nrf_search_result::get_validity_period() const { ...@@ -83,6 +88,30 @@ uint64_t nrf_search_result::get_validity_period() const {
return validity_period; return validity_period;
} }
//------------------------------------------------------------------------------
void nrf_search_result::set_num_nf_inst_complete(const uint32_t &n) {
num_nf_inst_complete = n;
}
//------------------------------------------------------------------------------
void nrf_search_result::get_num_nf_inst_complete(uint32_t &n) const {
n = num_nf_inst_complete;
}
//------------------------------------------------------------------------------
void nrf_search_result::set_limit_nf_instances(const uint32_t &l) {
limit_nf_instances = l;
}
//------------------------------------------------------------------------------
void nrf_search_result::get_limit_nf_instances(uint32_t &l) const {
l = limit_nf_instances;
}
//------------------------------------------------------------------------------
uint32_t nrf_search_result::get_limit_nf_instances() const {
return limit_nf_instances;
}
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void nrf_search_result::display() { void nrf_search_result::display() {
Logger::nrf_app().debug("Search result information"); Logger::nrf_app().debug("Search result information");
...@@ -97,15 +126,22 @@ void nrf_search_result::display() { ...@@ -97,15 +126,22 @@ void nrf_search_result::display() {
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void nrf_search_result::to_json(nlohmann::json &data) const { void nrf_search_result::to_json(nlohmann::json &data, const uint32_t &limit_nfs) const {
data = {}; data = { };
data["validityPeriod"] = validity_period; data["validityPeriod"] = validity_period;
data["nfInstances"] = nlohmann::json::array(); data["nfInstances"] = nlohmann::json::array();
uint32_t limit = limit_nfs>0?limit_nfs:nf_instances.size();
int i = 0;
for (auto instance : nf_instances) { for (auto instance : nf_instances) {
nlohmann::json instance_json = {}; if (i < limit) {
nlohmann::json instance_json = { };
instance.get()->to_json(instance_json); instance.get()->to_json(instance_json);
data["nfInstances"].push_back(instance_json); data["nfInstances"].push_back(instance_json);
} else {
break;
}
i++;
} }
data["searchId"] = search_id; data["searchId"] = search_id;
} }
...@@ -41,16 +41,17 @@ using namespace std; ...@@ -41,16 +41,17 @@ using namespace std;
class nrf_search_result { class nrf_search_result {
public: public:
nrf_search_result(){ nrf_search_result() {
limit_nf_instances = 10; //default value, TODO: to be removed
}; }
nrf_search_result(nrf_search_result const &) = delete; ;
nrf_search_result(nrf_search_result const&) = delete;
virtual ~nrf_search_result() { virtual ~nrf_search_result() {
Logger::nrf_app().debug("Delete NRF Subscription instance..."); Logger::nrf_app().debug("Delete NRF Subscription instance...");
} }
void operator=(nrf_search_result const &) = delete; void operator=(nrf_search_result const&) = delete;
/* /*
* Set the search id * Set the search id
...@@ -128,6 +129,41 @@ class nrf_search_result { ...@@ -128,6 +129,41 @@ class nrf_search_result {
*/ */
uint64_t get_validity_period() const; uint64_t get_validity_period() const;
/*
* Set the the total number of NF Instances found by NRF
* @param [const uint32_t &] n: the total number of NF Instances found by NRF
* @return void
*/
void set_num_nf_inst_complete(const uint32_t &n);
/*
* Get the the total number of NF Instances found by NRF
* @param [uint32_t &] n: the total number of NF Instances found by NRF
* @return void
*/
void get_num_nf_inst_complete(uint32_t &n) const;
/*
* Set the maximum number of NFProfiles to be returned in the response
* @param [const uint32_t &] l: the maximum number of NFProfiles to be returned in the response
* @return void
*/
void set_limit_nf_instances(const uint32_t &l);
/*
* Get the maximum number of NFProfiles to be returned in the response
* @param [uint32_t &] l: the maximum number of NFProfiles to be returned in the response
* @return void
*/
void get_limit_nf_instances(uint32_t &l) const;
/*
* Get the maximum number of NFProfiles to be returned in the response
* @param [void]
* @return the maximum number of NFProfiles to be returned in the response
*/
uint32_t get_limit_nf_instances() const;
/* /*
* Display all the members of a subscription * Display all the members of a subscription
* @param [void] * @param [void]
...@@ -138,15 +174,18 @@ class nrf_search_result { ...@@ -138,15 +174,18 @@ class nrf_search_result {
/* /*
* Represent NF profile as json object * Represent NF profile as json object
* @param [nlohmann::json &] data: Json data * @param [nlohmann::json &] data: Json data
* @param [uint32_t &] limit_nfs: maximum number of NF profiles stored in the json data
* 0, means without any restriction
* @return void * @return void
*/ */
void to_json(nlohmann::json &data) const; void to_json(nlohmann::json &data, const uint32_t &limit_nfs) const;
private: private:
std::vector<std::shared_ptr<nrf_profile>> nf_instances; std::vector<std::shared_ptr<nrf_profile>> nf_instances;
std::string search_id; std::string search_id;
uint64_t validity_period; uint64_t validity_period;
uint32_t num_nf_inst_complete; uint32_t num_nf_inst_complete;
uint32_t limit_nf_instances;
std::string nrf_supported_features; std::string nrf_supported_features;
}; };
} // namespace app } // namespace app
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment