Convertendo dados de um arquivo de log de formato binário em um arquivo de log em formato CSV
O exemplo a seguir transfere dados de um arquivo de log de contador criado pela ferramenta Desempenho para um formato separado por vírgulas (.csv). O exemplo transfere os dados do contador de Tempo do Processador coletados do computador local. Para especificar outro tipo de dados de contador, altere a variável szCounterPath. Se os dados do contador coletados forem de um computador específico, adicione o nome do computador ao caminho (por exemplo, "\\\<nome do> computador\\Processador(0)\%Tempo do Processador").
#include <windows.h>
#include <stdio.h>
#include <tchar.h>
#include <pdh.h>
#include <pdhmsg.h>
#pragma comment(lib, "pdh.lib")
CONST PWSTR COUNTER_PATH = L"\\Processor(0)\\% Processor Time";
void DisplayCommandLineHelp(void)
{
wprintf(L"Syntax: convertlog <input file name> <output file name>\n"
L"\nThe input log file must be in the Perfmon format. The output\n"
L"log file will written in the CSV file format, so specify a .csv extension.");
}
void wmain(int argc, WCHAR **argv)
{
HQUERY hQuery = NULL;
HLOG hOutputLog = NULL;
HCOUNTER hCounter = NULL;
PDH_STATUS pdhStatus = ERROR_SUCCESS;
DWORD dwOutputLogType = PDH_LOG_TYPE_CSV;
if (3 != argc)
{
DisplayCommandLineHelp();
goto cleanup;
}
// Create the query object using the input log file.
pdhStatus = PdhOpenQuery(argv[1], 0, &hQuery);
if (ERROR_SUCCESS != pdhStatus)
{
wprintf(L"PdhOpenQuery failed with 0x%x\n", pdhStatus);
goto cleanup;
}
// Add the counter to the query object; identifies the counter
// records from the log file that you are going to relog to
// the new log file.
pdhStatus = PdhAddCounter(hQuery,
COUNTER_PATH,
0,
&hCounter);
if (ERROR_SUCCESS != pdhStatus)
{
wprintf(L"PdhAddCounter failed with 0x%x\n", pdhStatus);
goto cleanup;
}
// Create and open the output log file.
pdhStatus = PdhOpenLog(argv[2],
PDH_LOG_WRITE_ACCESS |
PDH_LOG_CREATE_ALWAYS,
&dwOutputLogType,
hQuery,
0,
NULL,
&hOutputLog);
if (ERROR_SUCCESS != pdhStatus)
{
wprintf(L"PdhOpenLog failed with 0x%x\n", pdhStatus);
goto cleanup;
}
// Transfer the log records from the input file to the output file.
while (ERROR_SUCCESS == pdhStatus)
{
pdhStatus = PdhUpdateLog(hOutputLog, NULL);
}
if (PDH_NO_MORE_DATA != pdhStatus)
{
wprintf(L"PdhUpdateLog failed with 0x%x\n", pdhStatus);
}
cleanup:
// Close the output log file.
if (hOutputLog)
PdhCloseLog(hOutputLog, 0);
// Close the query object and input log file.
if (hQuery)
PdhCloseQuery(hQuery);
}