Commit e86d2677 authored by Tien-Thinh Nguyen's avatar Tien-Thinh Nguyen

fix issue for task tick

parent 74858891
...@@ -81,17 +81,17 @@ void nrf_app::handle_register_nf_instance( ...@@ -81,17 +81,17 @@ void nrf_app::handle_register_nf_instance(
std::shared_ptr<nrf_profile> sn = { }; std::shared_ptr<nrf_profile> sn = { };
switch (type) { switch (type) {
case NF_TYPE_AMF: { case NF_TYPE_AMF: {
sn = std::make_shared<amf_profile>(); sn = std::make_shared<amf_profile>(m_event_sub);
} }
break; break;
case NF_TYPE_SMF: { case NF_TYPE_SMF: {
sn = std::make_shared<smf_profile>(); sn = std::make_shared<smf_profile>(m_event_sub);
} }
break; break;
default: { default: {
sn = std::make_shared<nrf_profile>(); sn = std::make_shared<nrf_profile>(m_event_sub);
} }
} }
...@@ -255,6 +255,13 @@ bool nrf_app::add_nf_profile(const std::string &profile_id, ...@@ -255,6 +255,13 @@ bool nrf_app::add_nf_profile(const std::string &profile_id,
}*/ }*/
//Create or update if profile exist //Create or update if profile exist
instance_id2nrf_profile[profile_id] = p; instance_id2nrf_profile[profile_id] = p;
//get current time
uint64_t ms = std::chrono::duration_cast < std::chrono::milliseconds
> (std::chrono::system_clock::now().time_since_epoch()).count();
p.get()->subscribe_task_tick(ms);
return true; return true;
} }
...@@ -381,7 +388,7 @@ void nrf_app::subscribe_task_tick(uint64_t ms) { ...@@ -381,7 +388,7 @@ void nrf_app::subscribe_task_tick(uint64_t ms) {
Logger::nrf_app().debug("subscribe_task_tick1: %d", ms); Logger::nrf_app().debug("subscribe_task_tick1: %d", ms);
m_event_sub.subscribe_task_tick( m_event_sub.subscribe_task_tick(
boost::bind(&nrf_app::handle_heartbeart_timeout, this, _1), interval, boost::bind(&nrf_app::handle_heartbeart_timeout, this, _1), interval,
ms % 20000/* start at time 0 */); ms%20000/* start at time 0 */);
} }
......
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
#include "nrf_event.hpp" #include "nrf_event.hpp"
#include "nrf_app.hpp" #include "nrf_app.hpp"
#include "nrf_event_sig.hpp" #include "nrf_event_sig.hpp"
#include <iostream>
using namespace oai::nrf::app; using namespace oai::nrf::app;
......
...@@ -42,6 +42,7 @@ namespace nrf { ...@@ -42,6 +42,7 @@ namespace nrf {
namespace app { namespace app {
class task_manager; class task_manager;
//class nrf_profile;
class nrf_event { class nrf_event {
...@@ -60,6 +61,7 @@ class nrf_event { ...@@ -60,6 +61,7 @@ class nrf_event {
// class register/handle event // class register/handle event
friend class nrf_app; friend class nrf_app;
friend class task_manager; friend class task_manager;
friend class nrf_profile;
bs2::connection subscribe_task_tick(const task_sig_t::slot_type &sig, bs2::connection subscribe_task_tick(const task_sig_t::slot_type &sig,
uint64_t period, uint64_t start = 0); uint64_t period, uint64_t start = 0);
......
...@@ -448,6 +448,34 @@ void nrf_profile::to_json(nlohmann::json &data) const { ...@@ -448,6 +448,34 @@ void nrf_profile::to_json(nlohmann::json &data) const {
data["json_data"] = json_data; data["json_data"] = json_data;
} }
//------------------------------------------------------------------------------
void nrf_profile::subscribe_task_tick(uint64_t ms) {
struct itimerspec its;
its.it_value.tv_sec = 10; //seconds
its.it_value.tv_nsec = 0; //100 * 1000 * 1000; //100ms
const uint64_t interval = its.it_value.tv_sec * 1000
+ its.it_value.tv_nsec / 1000000; // convert sec, nsec to msec
//uint64_t interval =10;
// m_event_sub.subscribe_task_tick(
// boost::bind<void>(&nrf_app::handle_heartbeart_timeout, _1), interval, 0 /* start at time 0 */);
Logger::nrf_app().debug("subscribe_task_tick2 %d", ms);
m_event_sub.subscribe_task_tick(
boost::bind(&nrf_profile::handle_heartbeart_timeout, this, _1), interval,
ms % 10000 /* start at time 0 */);
}
//------------------------------------------------------------------------------
void nrf_profile::handle_heartbeart_timeout(uint64_t ms) {
Logger::nrf_app().info("NRF PROFILE handle_heartbeart_timeout1 %d, PROFILE ID %s", ms, nf_instance_id.c_str());
}
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void amf_profile::add_amf_info(const amf_info_t &info) { void amf_profile::add_amf_info(const amf_info_t &info) {
amf_info = info; amf_info = info;
......
...@@ -39,6 +39,7 @@ ...@@ -39,6 +39,7 @@
#include <vector> #include <vector>
#include <nlohmann/json.hpp> #include <nlohmann/json.hpp>
#include "nrf.h" #include "nrf.h"
#include "nrf_event.hpp"
namespace oai { namespace oai {
namespace nrf { namespace nrf {
...@@ -49,8 +50,9 @@ using namespace std; ...@@ -49,8 +50,9 @@ using namespace std;
class nrf_profile : public std::enable_shared_from_this<nrf_profile> { class nrf_profile : public std::enable_shared_from_this<nrf_profile> {
public: public:
nrf_profile() nrf_profile(nrf_event &ev)
: :
m_event_sub(ev),
nf_type(NF_TYPE_UNKNOWN), nf_type(NF_TYPE_UNKNOWN),
heartBeat_timer(0), heartBeat_timer(0),
snssais(), snssais(),
...@@ -61,8 +63,9 @@ class nrf_profile : public std::enable_shared_from_this<nrf_profile> { ...@@ -61,8 +63,9 @@ class nrf_profile : public std::enable_shared_from_this<nrf_profile> {
nf_status = ""; nf_status = "";
json_data = { }; json_data = { };
} }
nrf_profile(const nf_type_t type) nrf_profile(nrf_event &ev, const nf_type_t type)
: :
m_event_sub(ev),
nf_type(type), nf_type(type),
heartBeat_timer(0), heartBeat_timer(0),
snssais(), snssais(),
...@@ -74,8 +77,9 @@ class nrf_profile : public std::enable_shared_from_this<nrf_profile> { ...@@ -74,8 +77,9 @@ class nrf_profile : public std::enable_shared_from_this<nrf_profile> {
json_data = { }; json_data = { };
} }
nrf_profile(const std::string &id) nrf_profile(nrf_event &ev, const std::string &id)
: :
m_event_sub(ev),
nf_instance_id(id), nf_instance_id(id),
heartBeat_timer(0), heartBeat_timer(0),
snssais(), snssais(),
...@@ -294,7 +298,8 @@ class nrf_profile : public std::enable_shared_from_this<nrf_profile> { ...@@ -294,7 +298,8 @@ class nrf_profile : public std::enable_shared_from_this<nrf_profile> {
* @param [const std::string &] value: new value * @param [const std::string &] value: new value
* @return true if success, otherwise false * @return true if success, otherwise false
*/ */
virtual bool replace_profile_info(const std::string &path, const std::string &value); virtual bool replace_profile_info(const std::string &path,
const std::string &value);
/* /*
* Add a new value for a member of NF profile * Add a new value for a member of NF profile
...@@ -302,7 +307,8 @@ class nrf_profile : public std::enable_shared_from_this<nrf_profile> { ...@@ -302,7 +307,8 @@ class nrf_profile : public std::enable_shared_from_this<nrf_profile> {
* @param [const std::string &] value: new value * @param [const std::string &] value: new value
* @return true if success, otherwise false * @return true if success, otherwise false
*/ */
virtual bool add_profile_info(const std::string &path, const std::string &value); virtual bool add_profile_info(const std::string &path,
const std::string &value);
/* /*
* Remove value of a member of NF profile * Remove value of a member of NF profile
...@@ -312,7 +318,11 @@ class nrf_profile : public std::enable_shared_from_this<nrf_profile> { ...@@ -312,7 +318,11 @@ class nrf_profile : public std::enable_shared_from_this<nrf_profile> {
*/ */
virtual bool remove_profile_info(const std::string &path); virtual bool remove_profile_info(const std::string &path);
virtual void to_json(nlohmann::json &data) const; virtual void to_json(nlohmann::json &data) const;
virtual void subscribe_task_tick (uint64_t ms);
virtual void handle_heartbeart_timeout(uint64_t ms);
protected: protected:
nrf_event &m_event_sub;
//From NFProfile (Section 6.1.6.2.2@3GPP TS 29.510 V16.0.0 (2019-06)) //From NFProfile (Section 6.1.6.2.2@3GPP TS 29.510 V16.0.0 (2019-06))
std::string nf_instance_id; std::string nf_instance_id;
std::string nf_instance_name; std::string nf_instance_name;
...@@ -394,15 +404,15 @@ class nrf_profile : public std::enable_shared_from_this<nrf_profile> { ...@@ -394,15 +404,15 @@ class nrf_profile : public std::enable_shared_from_this<nrf_profile> {
class amf_profile : public nrf_profile { class amf_profile : public nrf_profile {
public: public:
amf_profile() amf_profile(nrf_event &ev)
: :
nrf_profile(NF_TYPE_AMF) { nrf_profile(ev, NF_TYPE_AMF) {
amf_info = { }; amf_info = { };
} }
amf_profile(const std::string &id) amf_profile(nrf_event &ev, const std::string &id)
: :
nrf_profile(id) { nrf_profile(ev, id) {
nf_type = NF_TYPE_AMF; nf_type = NF_TYPE_AMF;
amf_info = { }; amf_info = { };
} }
...@@ -465,15 +475,15 @@ class amf_profile : public nrf_profile { ...@@ -465,15 +475,15 @@ class amf_profile : public nrf_profile {
class smf_profile : public nrf_profile { class smf_profile : public nrf_profile {
public: public:
smf_profile() smf_profile(nrf_event &ev)
: :
nrf_profile(NF_TYPE_SMF) { nrf_profile(ev, NF_TYPE_SMF) {
smf_info = { }; smf_info = { };
} }
smf_profile(const std::string &id) smf_profile(nrf_event &ev, const std::string &id)
: :
nrf_profile(id) { nrf_profile(ev, id) {
nf_type = NF_TYPE_SMF; nf_type = NF_TYPE_SMF;
smf_info = { }; smf_info = { };
} }
......
...@@ -66,6 +66,7 @@ void task_manager::manage_tasks() { ...@@ -66,6 +66,7 @@ void task_manager::manage_tasks() {
while (1) { while (1) {
event_sub_.task_tick(t); event_sub_.task_tick(t);
t++;
wait_for_cycle(); wait_for_cycle();
} }
} }
......
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