static void EnumerateOneInstance()

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);
}