Skip to content

Commit

Permalink
address comments
Browse files Browse the repository at this point in the history
  • Loading branch information
dan-du-car committed Nov 13, 2023
1 parent d468935 commit 7a4238a
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 34 deletions.
65 changes: 34 additions & 31 deletions src/v2i-hub/RSUHealthMonitorPlugin/src/RSUHealthMonitorPlugin.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,19 @@ namespace RSUHealthMonitor
RSUHealthMonitorPlugin::RSUHealthMonitorPlugin(std::string name) : PluginClient(name)
{
_rsuWorker = std::make_shared<RSUHealthMonitorWorker>();

UpdateConfigSettings();

// Send SNMP call to RSU periodically at configurable interval.
std::thread rsuStatus_t(&RSUHealthMonitorPlugin::PeriodicRSUStatusReq, this);
rsuStatus_t.join();
_rsuStatusTimer = make_unique<ThreadTimer>();
_rsuStatusTimer->AddPeriodicTick([this]()
{
// Periodic SNMP call to get RSU status based on RSU MIB version 4.1
auto rsuStatusJson = getRSUStatus();

//Broadcast RSU status periodically at _interval
BroadcastRSUStatus(rsuStatusJson); },
chrono::seconds(_interval));
}

void RSUHealthMonitorPlugin::UpdateConfigSettings()
Expand All @@ -37,7 +46,7 @@ namespace RSUHealthMonitor
else
{
_rsuMibVersion = UNKOWN_MIB_V;
PLOG(logERROR) << "Uknown RSU MIB version: " <<_rsuMIBVersionStr;
PLOG(logERROR) << "Uknown RSU MIB version: " << _rsuMIBVersionStr;
}
}

Expand All @@ -47,40 +56,34 @@ namespace RSUHealthMonitor
UpdateConfigSettings();
}

void RSUHealthMonitorPlugin::PeriodicRSUStatusReq()
void RSUHealthMonitorPlugin::BroadcastRSUStatus(const Json::Value &rsuStatusJson)
{
while (true)
try
{
try
// Broadcast the RSU status info when there are RSU responses.
if (!rsuStatusJson.empty())
{
// Periodic SNMP call to get RSU status based on RSU MIB version 4.1
auto rsuStatusJson = getRSUStatus();
// Broadcast the RSU status info when there are RSU responses.
if (!rsuStatusJson.empty())
vector<string> rsuStatusFields;
for (auto const &field : rsuStatusJson.getMemberNames())
{
vector<string> rsuStatusFields;
for (auto const &field : rsuStatusJson.getMemberNames())
{
rsuStatusFields.push_back(field);
}
// Only broadcast RSU status when all required fields are present.
if (_rsuWorker && _rsuWorker->isAllRequiredFieldsPresent(_rsuMibVersion, rsuStatusFields))
{
Json::FastWriter fasterWirter;
string json_str = fasterWirter.write(rsuStatusJson);
tmx::messages::RSUStatusMessage sendRsuStatusMsg;
sendRsuStatusMsg.set_contents(json_str);
string source = RSUHealthMonitorPlugin::GetName();
BroadcastMessage(sendRsuStatusMsg, source);
PLOG(logINFO) << "Broadcast RSU status: " << json_str;
}
rsuStatusFields.push_back(field);
}
// Only broadcast RSU status when all required fields are present.
if (_rsuWorker && _rsuWorker->isAllRequiredFieldsPresent(_rsuMibVersion, rsuStatusFields))
{
Json::FastWriter fasterWirter;
string json_str = fasterWirter.write(rsuStatusJson);
tmx::messages::RSUStatusMessage sendRsuStatusMsg;
sendRsuStatusMsg.set_contents(json_str);
string source = RSUHealthMonitorPlugin::GetName();
BroadcastMessage(sendRsuStatusMsg, source);
PLOG(logINFO) << "Broadcast RSU status: " << json_str;
}
}
catch (const std::exception &ex)
{
PLOG(logERROR) << ex.what();
}
this_thread::sleep_for(chrono::seconds(_interval));
}
catch (const std::exception &ex)
{
PLOG(logERROR) << ex.what();
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,8 @@ namespace RSUHealthMonitor
RSUMibVersion _rsuMibVersion;
const char *RSU4_1_str = "RSU4.1";
const char *RSU1218_str = "RSU1218";
std::shared_ptr<RSUHealthMonitorWorker> _rsuWorker;
shared_ptr<RSUHealthMonitorWorker> _rsuWorker;
unique_ptr<ThreadTimer> _rsuStatusTimer;
const long SEC_TO_MICRO = 1000000;
// std::shared_ptr<snmp_client> _snmpClientPtr;
/**
Expand All @@ -37,9 +38,9 @@ namespace RSUHealthMonitor
*/
void UpdateRSUOIDConfig(string &json_str);
/**
* @brief Periodically sending SNMP requests to get RSU status info.
* @brief Broadcast RSU status
*/
void PeriodicRSUStatusReq();
void BroadcastRSUStatus(const Json::Value& rsuStatusJson);
/**
* @brief Sending SNMP requests to get info for each field in the RSUStatusConfigTable, and return the RSU status in JSON
* Use RSU Status configuration table include RSU field, OIDs, and whether fields are required or optional
Expand Down

0 comments on commit 7a4238a

Please sign in to comment.