in source/code/providers/SCX_MemoryStatisticalInformation_Class_Provider.cpp [32:165]
static void EnumerateOneInstance(
Context& context,
SCX_MemoryStatisticalInformation_Class& inst,
bool keysOnly,
SCXCoreLib::SCXHandle<SCXSystemLib::MemoryInstance> meminst)
{
// Populate the key values
inst.Name_value("Memory");
if (!keysOnly)
{
scxulong physmem = 0;
scxulong resmem = 0;
scxulong usermem = 0;
scxulong avail = 0;
scxulong data = 0;
scxulong data2 = 0;
inst.Caption_value("Memory information");
inst.Description_value("Memory usage and performance statistics");
inst.IsAggregate_value(meminst->IsTotal());
if (meminst->GetTotalPhysicalMemory(physmem))
{
// Adjust numbers from PAL to Megabytes
physmem = BytesToMegaBytes(physmem);
if (meminst->GetReservedMemory(resmem))
{
resmem = BytesToMegaBytes(resmem);
}
else
{
resmem = 0;
}
// If available, get memory unavailable for user processes and remove it from physical memory
usermem = physmem - resmem;
}
if (meminst->GetAvailableMemory(avail))
{
// Adjust numbers from PAL to Megabytes
avail = BytesToMegaBytes(avail);
inst.AvailableMemory_value(avail);
// If we have a number for physical memory use it to compute a percentage
if (usermem > 0)
{
// Need an unsigned char since this is what is required by the MOF
unsigned char percent = static_cast<unsigned char> (GetPercentage(0, avail, 0, usermem));
inst.PercentAvailableMemory_value(percent);
}
}
if (meminst->GetUsedMemory(data))
{
// Adjust numbers from PAL to Megabytes
data = BytesToMegaBytes(data);
inst.UsedMemory_value(data);
// If we have a number for physical memory use it to compute a percentage
if (usermem > 0)
{
unsigned char percent = static_cast<unsigned char> (GetPercentage(0, data, 0, usermem));
inst.PercentUsedMemory_value(percent);
}
}
{
data = 0;
unsigned char percent = static_cast<unsigned char> (0);
if (meminst->GetCacheSize(data) && usermem > 0)
{
percent = static_cast<unsigned char> (GetPercentage(0, BytesToMegaBytes(data), 0, usermem));
}
inst.PercentUsedByCache_value(percent);
}
bool pageReadsAvailable = meminst->GetPageReads(data);
bool pageWritesAvailable = meminst->GetPageWrites(data2);
if (pageReadsAvailable && pageWritesAvailable)
{
inst.PagesPerSec_value(data + data2);
}
if (pageReadsAvailable)
{
inst.PagesReadPerSec_value(data);
}
if (pageWritesAvailable)
{
inst.PagesWrittenPerSec_value(data2);
}
if (meminst->GetAvailableSwap(data))
{
// Adjust numbers from PAL to Megabytes
data = BytesToMegaBytes(data);
inst.AvailableSwap_value(data);
if (meminst->GetTotalSwap(data2))
{
// Adjust numbers from PAL to Megabytes
data2 = BytesToMegaBytes(data2);
unsigned char percent = static_cast<unsigned char> (GetPercentage(0, data, 0, data2));
inst.PercentAvailableSwap_value(percent);
}
}
if (meminst->GetUsedSwap(data))
{
// Adjust numbers from PAL to Megabytes
data = BytesToMegaBytes(data);
inst.UsedSwap_value(data);
if (meminst->GetTotalSwap(data2))
{
// Adjust numbers from PAL to Megabytes
data2 = BytesToMegaBytes(data2);
unsigned char percent = static_cast<unsigned char> (GetPercentage(0, data, 0, data2));
inst.PercentUsedSwap_value(percent);
}
}
}
context.Post(inst);
}