Creating a Data Collector Set

A data collector set contains one or more data collectors. The properties of the set determine when the set runs (if the set is run on a schedule), where the logs are collected, and how the logs are managed.

The set contains default property values that are used if you do not specify a value.

As an alternative to setting the properties of the data collector set, you could use XML to specify the property values for the data collector set. For details, see Creating a Data Collector Set from XML.

The following example shows how to create a data collector set and how to set some its properties.

HRESULT CreateDCS(IDataCollectorSet* & pdcs)
{
    HRESULT hr = S_OK;

    hr = CoCreateInstance(__uuidof(DataCollectorSet), 
                          NULL, 
                          CLSCTX_SERVER,
                          __uuidof(IDataCollectorSet),
                          (void**) &pdcs);

    if (FAILED(hr))
    {
        wprintf(L"CoCreateInstance(__uuidof(DataCollectorSet) failed with 0x%x.\n", hr);
        goto cleanup;
    }

    hr = pdcs->put_Description(_bstr_t(L"Creating a data collector set"));
    if (FAILED(hr))
    {
        wprintf(L"put_Description failed, 0x%x\n", hr);
        goto cleanup;
    }

    hr = pdcs->put_DisplayName(_bstr_t(L"DCS Test"));
    if (FAILED(hr))
    {
        wprintf(L"put_DisplayName failed, 0x%x\n", hr);
        goto cleanup;
    }

    // Limit the data collector set to run for one minute. 
    hr = pdcs->put_Duration(60);
    if (FAILED(hr))
    {
        wprintf(L"put_Duration failed, 0x%x\n", hr);
        goto cleanup;
    }

    // You should specify the subdirectory under RootPath where you want the data 
    // written. If you do not specify the subdirectory, the data is written in 
    // the RootPath directory.
    hr = pdcs->put_Subdirectory(_bstr_t(L"MyLogs"));
    if (FAILED(hr))
    {
        wprintf(L"put_Subdirectory failed, 0x%x\n", hr);
        goto cleanup;
    }

    // Use a serial number to format the subdirectory name. Using a serial number 
    // creates a new subdirectory name each time the set runs. If you do not specify a 
    // format for the subdirectory name, the contents of the subdirectory may be 
    // overwritten the next time the set runs.
    hr = pdcs->put_SubdirectoryFormat(plaSerialNumber);
    if (FAILED(hr))
    {
        wprintf(L"put_SubdirectoryFormat failed, 0x%x\n", hr);
        goto cleanup;
    }

    // To specify a Task Scheduler task to run when the data collector set completes 
    // (or the log is segmented), call the put_Task method. 

    // To limit the size of the log file that each collector can create before PLA 
    // writes to a new log file for that collector, call the put_Segment method.

    // To specify how the data from the collectors is managed (for example, how 
    // long to retain the logs), use the DataManager property.
    // 
    // To collect data on a schedule, use the Schedules property
    // to specify one or more scheduled times at which the collectors run.

cleanup:

    return hr;
}

After specifying the property values for the data collector set, you need to add one or more data collectors to the set and call the IDataCollectorSet::Commit method to save the set. Before calling Commit, you can optionally specify a schedule for running the set and specify how to manage the collected data.