MI_BEGIN_NAMESPACE 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); }
/** Set all properties from the CPUInstance in the SCXInstance \param[in] cpuinst - CPU instance to get data from \param[in] inst - Instance to populate \throws SCXInvalidArgumentException - If the instance can not be converted to a CPUInstance This method knows how to map the values of the CPU PAL to the CMPI class definition. */ void CPUProvider::AddProperties(SCXCoreLib::SCXHandle<SCXSystemLib::CPUInstance> cpuinst, SCXInstance &inst) // private { scxulong data; if (cpuinst == NULL) { throw SCXInvalidArgumentException(L"einst", L"Not a CPUInstance", SCXSRCLOCATION); } SCX_LOGTRACE(m_log, L"CPUProvider AddPropeties()"); SCXProperty total_prop(L"IsAggregate", cpuinst->IsTotal()); inst.AddProperty(total_prop); if (cpuinst->GetProcessorTime(data)) { SCXProperty data_prop(L"PercentProcessorTime", static_cast<unsigned char> (data)); inst.AddProperty(data_prop); } if (cpuinst->GetIdleTime(data)) { SCXProperty data_prop(L"PercentIdleTime", static_cast<unsigned char> (data)); inst.AddProperty(data_prop); } if (cpuinst->GetUserTime(data)) { SCXProperty data_prop(L"PercentUserTime", static_cast<unsigned char> (data)); inst.AddProperty(data_prop); } if (cpuinst->GetNiceTime(data)) { SCXProperty data_prop(L"PercentNiceTime", static_cast<unsigned char> (data)); inst.AddProperty(data_prop); } if (cpuinst->GetPrivilegedTime(data)) { SCXProperty data_prop(L"PercentPrivilegedTime", static_cast<unsigned char> (data)); inst.AddProperty(data_prop); } if (cpuinst->GetIowaitTime(data)) { SCXProperty data_prop(L"PercentIOWaitTime", static_cast<unsigned char> (data)); inst.AddProperty(data_prop); } if (cpuinst->GetInterruptTime(data)) { SCXProperty data_prop(L"PercentInterruptTime", static_cast<unsigned char> (data)); inst.AddProperty(data_prop); } if (cpuinst->GetDpcTime(data)) { SCXProperty data_prop(L"PercentDPCTime", static_cast<unsigned char> (data)); inst.AddProperty(data_prop); } }