diff --git a/src/core/cm/monitoring/monitoring.cpp b/src/core/cm/monitoring/monitoring.cpp index af1b5e970..a69f6a307 100644 --- a/src/core/cm/monitoring/monitoring.cpp +++ b/src/core/cm/monitoring/monitoring.cpp @@ -227,10 +227,11 @@ Error Monitoring::FillNodeMonitoring(const String& nodeID, const aos::monitoring return it->mItems.EmplaceBack(nodeMonitoring.mMonitoringData); } -Error Monitoring::FillInstanceMonitoring(const aos::monitoring::InstanceMonitoringData& instanceMonitoring) +Error Monitoring::FillInstanceMonitoring( + const String& nodeID, const aos::monitoring::InstanceMonitoringData& instanceMonitoring) { - auto it = mMonitoring.mInstances.FindIf([&instanceMonitoring](const InstanceMonitoringData& data) { - return static_cast(data) == instanceMonitoring.mInstanceIdent; + auto it = mMonitoring.mInstances.FindIf([&instanceMonitoring, &nodeID](const InstanceMonitoringData& data) { + return static_cast(data) == instanceMonitoring.mInstanceIdent && data.mNodeID == nodeID; }); if (it == mMonitoring.mInstances.end()) { @@ -241,6 +242,7 @@ Error Monitoring::FillInstanceMonitoring(const aos::monitoring::InstanceMonitori it = &mMonitoring.mInstances.Back(); static_cast(*it) = instanceMonitoring.mInstanceIdent; + it->mNodeID = nodeID; } if (it->mItems.IsFull()) { @@ -257,7 +259,7 @@ Error Monitoring::CacheMonitoringData(const aos::monitoring::NodeMonitoringData& } for (const auto& instanceMonitoring : monitoringData.mInstances) { - if (auto err = FillInstanceMonitoring(instanceMonitoring); !err.IsNone()) { + if (auto err = FillInstanceMonitoring(monitoringData.mNodeID, instanceMonitoring); !err.IsNone()) { return err; } } diff --git a/src/core/cm/monitoring/monitoring.hpp b/src/core/cm/monitoring/monitoring.hpp index 79b071c8f..eb6a87dab 100644 --- a/src/core/cm/monitoring/monitoring.hpp +++ b/src/core/cm/monitoring/monitoring.hpp @@ -82,7 +82,8 @@ class Monitoring : public ReceiverItf, void OnConnect() override; void OnDisconnect() override; Error FillNodeMonitoring(const String& nodeID, const aos::monitoring::NodeMonitoringData& nodeMonitoring); - Error FillInstanceMonitoring(const aos::monitoring::InstanceMonitoringData& instanceMonitoring); + Error FillInstanceMonitoring( + const String& nodeID, const aos::monitoring::InstanceMonitoringData& instanceMonitoring); Error CacheMonitoringData(const aos::monitoring::NodeMonitoringData& monitoringData); Error SendMonitoringData(); diff --git a/src/core/cm/monitoring/tests/monitoring.cpp b/src/core/cm/monitoring/tests/monitoring.cpp index 77b243e57..215c927dd 100644 --- a/src/core/cm/monitoring/tests/monitoring.cpp +++ b/src/core/cm/monitoring/tests/monitoring.cpp @@ -27,11 +27,11 @@ namespace aos::cm::monitoring { namespace { std::unique_ptr CreateNodeMonitoringData( - const String& nodeID, const Time& timestamp) + const std::string& nodeID, const Time& timestamp) { auto monitoring = std::make_unique(); - monitoring->mNodeID = nodeID; + monitoring->mNodeID = nodeID.c_str(); monitoring->mTimestamp = timestamp; return monitoring; @@ -147,22 +147,24 @@ TEST_F(CMMonitoring, OnMonitoringReceived) auto err = mMonitoring.Start(); ASSERT_TRUE(err.IsNone()) << tests::utils::ErrorToStr(err); - auto nodeMonitoring = CreateNodeMonitoringData("node1", Time::Now()); + for (size_t i = 0; i < 2; ++i) { + auto monitoring = CreateNodeMonitoringData(std::to_string(i), Time::Now()); - nodeMonitoring->mMonitoringData.mCPU = 50.0; - nodeMonitoring->mMonitoringData.mRAM = 1024 * 4; + monitoring->mMonitoringData.mCPU = 50.0; + monitoring->mMonitoringData.mRAM = 1024 * 4; - nodeMonitoring->mInstances.EmplaceBack(); - nodeMonitoring->mInstances[0].mInstanceIdent - = InstanceIdent {"service1", "subject1", 1, UpdateItemTypeEnum::eService}; - nodeMonitoring->mInstances[0].mMonitoringData.mCPU = 20.0; + monitoring->mInstances.EmplaceBack(); + monitoring->mInstances[0].mInstanceIdent + = InstanceIdent {"service1", "subject1", 1, UpdateItemTypeEnum::eService}; + monitoring->mInstances[0].mMonitoringData.mCPU = 20.0; - nodeMonitoring->mInstances[0].mMonitoringData.mPartitions.EmplaceBack(); - nodeMonitoring->mInstances[0].mMonitoringData.mPartitions[0].mName = "partition1"; - nodeMonitoring->mInstances[0].mMonitoringData.mPartitions[0].mUsedSize = 512.0; + monitoring->mInstances[0].mMonitoringData.mPartitions.EmplaceBack(); + monitoring->mInstances[0].mMonitoringData.mPartitions[0].mName = "partition1"; + monitoring->mInstances[0].mMonitoringData.mPartitions[0].mUsedSize = 512.0; - err = mMonitoring.OnMonitoringReceived(*nodeMonitoring); - EXPECT_TRUE(err.IsNone()) << tests::utils::ErrorToStr(err); + err = mMonitoring.OnMonitoringReceived(*monitoring); + EXPECT_TRUE(err.IsNone()) << tests::utils::ErrorToStr(err); + } connectionListener->OnConnect(); @@ -170,23 +172,30 @@ TEST_F(CMMonitoring, OnMonitoringReceived) EXPECT_TRUE(mSender.WaitForMessage(*monitoring)); - EXPECT_EQ(monitoring->mNodes.Size(), 1); - EXPECT_EQ(monitoring->mNodes[0].mNodeID, "node1"); - EXPECT_EQ(monitoring->mNodes[0].mItems.Size(), 1); - EXPECT_EQ(monitoring->mNodes[0].mItems[0].mCPU, 50.0); - EXPECT_EQ(monitoring->mNodes[0].mItems[0].mRAM, 1024 * 4); + ASSERT_EQ(monitoring->mNodes.Size(), 2); + + for (size_t i = 0; i < 2; ++i) { + EXPECT_EQ(monitoring->mNodes[i].mNodeID.CStr(), std::to_string(i)); + EXPECT_EQ(monitoring->mNodes[i].mItems.Size(), 1); + EXPECT_EQ(monitoring->mNodes[i].mItems[0].mCPU, 50.0); + EXPECT_EQ(monitoring->mNodes[i].mItems[0].mRAM, 1024 * 4); + } + + ASSERT_EQ(monitoring->mInstances.Size(), 2); - EXPECT_EQ(monitoring->mInstances.Size(), 1); + for (size_t i = 0; i < 2; ++i) { + const InstanceIdent instanceIdent {"service1", "subject1", 1, UpdateItemTypeEnum::eService}; - const InstanceIdent instanceIdent {"service1", "subject1", 1, UpdateItemTypeEnum::eService}; - EXPECT_EQ(static_cast(monitoring->mInstances[0]), instanceIdent); - EXPECT_EQ(monitoring->mInstances[0].mItems.Size(), 1); + EXPECT_EQ(static_cast(monitoring->mInstances[i]), instanceIdent); + EXPECT_EQ(monitoring->mInstances[i].mItems.Size(), 1); - EXPECT_EQ(monitoring->mInstances[0].mItems[0].mCPU, 20.0); + EXPECT_EQ(monitoring->mInstances[i].mNodeID.CStr(), std::to_string(i)); + EXPECT_EQ(monitoring->mInstances[i].mItems[0].mCPU, 20.0); - EXPECT_EQ(monitoring->mInstances[0].mItems[0].mPartitions.Size(), 1); - EXPECT_EQ(monitoring->mInstances[0].mItems[0].mPartitions[0].mName, "partition1"); - EXPECT_EQ(monitoring->mInstances[0].mItems[0].mPartitions[0].mUsedSize, 512.0); + EXPECT_EQ(monitoring->mInstances[i].mItems[0].mPartitions.Size(), 1); + EXPECT_EQ(monitoring->mInstances[i].mItems[0].mPartitions[0].mName, "partition1"); + EXPECT_EQ(monitoring->mInstances[i].mItems[0].mPartitions[0].mUsedSize, 512.0); + } EXPECT_CALL(mCloudConnection, UnsubscribeListener).WillOnce(Return(ErrorEnum::eNone));