Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 6 additions & 4 deletions src/core/cm/monitoring/monitoring.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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<const InstanceIdent&>(data) == instanceMonitoring.mInstanceIdent;
auto it = mMonitoring.mInstances.FindIf([&instanceMonitoring, &nodeID](const InstanceMonitoringData& data) {
return static_cast<const InstanceIdent&>(data) == instanceMonitoring.mInstanceIdent && data.mNodeID == nodeID;
});

if (it == mMonitoring.mInstances.end()) {
Expand All @@ -241,6 +242,7 @@ Error Monitoring::FillInstanceMonitoring(const aos::monitoring::InstanceMonitori
it = &mMonitoring.mInstances.Back();

static_cast<InstanceIdent&>(*it) = instanceMonitoring.mInstanceIdent;
it->mNodeID = nodeID;
}

if (it->mItems.IsFull()) {
Expand All @@ -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;
}
}
Expand Down
3 changes: 2 additions & 1 deletion src/core/cm/monitoring/monitoring.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -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();

Expand Down
63 changes: 36 additions & 27 deletions src/core/cm/monitoring/tests/monitoring.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,11 @@ namespace aos::cm::monitoring {
namespace {

std::unique_ptr<aos::monitoring::NodeMonitoringData> CreateNodeMonitoringData(
const String& nodeID, const Time& timestamp)
const std::string& nodeID, const Time& timestamp)
{
auto monitoring = std::make_unique<aos::monitoring::NodeMonitoringData>();

monitoring->mNodeID = nodeID;
monitoring->mNodeID = nodeID.c_str();
monitoring->mTimestamp = timestamp;

return monitoring;
Expand Down Expand Up @@ -147,46 +147,55 @@ 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();

auto monitoring = std::make_unique<aos::Monitoring>();

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<const InstanceIdent&>(monitoring->mInstances[0]), instanceIdent);
EXPECT_EQ(monitoring->mInstances[0].mItems.Size(), 1);
EXPECT_EQ(static_cast<const InstanceIdent&>(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));

Expand Down
Loading