in source/code/providers/SCX_FileSystemStatisticalInformation_Class_Provider.cpp [32:142]
static void EnumerateOneInstance(
Context& context,
SCX_FileSystemStatisticalInformation_Class& inst,
bool keysOnly,
SCXHandle<SCXSystemLib::StatisticalLogicalDiskInstance> diskinst)
{
diskinst->Update();
// Populate the key values
std::wstring name;
if (diskinst->GetDiskName(name))
{
inst.Name_value(StrToMultibyte(name).c_str());
}
if (!keysOnly)
{
inst.Caption_value("File system information");
inst.Description_value("Performance statistics related to a logical unit of secondary storage");
scxulong data1;
scxulong data2;
scxulong data3;
double ddata1;
bool healthy;
if (diskinst->GetHealthState(healthy))
{
inst.IsOnline_value(healthy);
}
inst.IsAggregate_value(diskinst->IsTotal());
if (diskinst->GetIOPercentageTotal(data1))
{
inst.PercentBusyTime_value((unsigned char) data1);
inst.PercentIdleTime_value((unsigned char) (100-data1));
}
if (diskinst->GetBytesPerSecondTotal(data1))
{
inst.BytesPerSecond_value(data1);
}
if (diskinst->GetBytesPerSecond(data1, data2))
{
inst.ReadBytesPerSecond_value(data1);
inst.WriteBytesPerSecond_value(data2);
}
if (diskinst->GetTransfersPerSecond(data1))
{
inst.TransfersPerSecond_value(data1);
}
if (diskinst->GetReadsPerSecond(data1))
{
inst.ReadsPerSecond_value(data1);
}
if (diskinst->GetWritesPerSecond(data1))
{
inst.WritesPerSecond_value(data1);
}
if (diskinst->GetIOTimesTotal(ddata1))
{
inst.AverageTransferTime_value(ddata1);
}
if (diskinst->GetDiskSize(data1, data2, data3))
{
inst.FreeMegabytes_value(data2);
inst.UsedMegabytes_value(data1);
unsigned char freeSpace = 100;
unsigned char usedSpace = 0;
if (0 < data1+data2)
{
freeSpace = (unsigned char) SCXCoreLib::GetPercentage(0, data2, 0, data3);
usedSpace = (unsigned char) SCXCoreLib::GetPercentage(0, data1, 0, data3);
}
inst.PercentFreeSpace_value(freeSpace);
inst.PercentUsedSpace_value(usedSpace);
}
// Report percentages for inodes even if inode data is not known
{
if (!diskinst->GetInodeUsage(data1, data2))
{
data1 = data2 = 0;
}
unsigned char freeInodes = 100;
unsigned char usedInodes = 0;
if (0 < data1+data2)
{
freeInodes = (unsigned char) SCXCoreLib::GetPercentage(0, data2, 0, data1);
usedInodes = (unsigned char) SCXCoreLib::GetPercentage(0, data2, 0, data1, true);
}
inst.PercentFreeInodes_value(freeInodes);
inst.PercentUsedInodes_value(usedInodes);
}
if (diskinst->GetDiskQueueLength(ddata1))
{
inst.AverageDiskQueueLength_value(ddata1);
}
}
context.Post(inst);
}