Search in sources :

Example 1 with PDH_COUNTER_PATH_ELEMENTS

use of com.sun.jna.platform.win32.Pdh.PDH_COUNTER_PATH_ELEMENTS in project jna by java-native-access.

the class PdhTest method testQueryMultipleCounters.

@Test
public void testQueryMultipleCounters() {
    Collection<String> names = new LinkedList<String>();
    PDH_COUNTER_PATH_ELEMENTS elems = new PDH_COUNTER_PATH_ELEMENTS();
    elems.szObjectName = "Processor";
    elems.szInstanceName = "_Total";
    for (String n : new String[] { "% Processor Time", "% Idle Time", "% User Time" }) {
        elems.szCounterName = n;
        String counterName = makeCounterPath(pdh, elems);
        names.add(counterName);
    }
    HANDLEByReference ref = new HANDLEByReference();
    assertErrorSuccess("PdhOpenQuery", pdh.PdhOpenQuery(null, null, ref), true);
    HANDLE hQuery = ref.getValue();
    try {
        Map<String, HANDLE> handlesMap = new HashMap<String, HANDLE>(names.size());
        try {
            for (String counterName : names) {
                ref.setValue(null);
                assertErrorSuccess("PdhAddCounter[" + counterName + "]", pdh.PdhAddEnglishCounter(hQuery, counterName, null, ref), true);
                HANDLE hCounter = ref.getValue();
                handlesMap.put(counterName, hCounter);
            }
            assertErrorSuccess("PdhCollectQueryData", pdh.PdhCollectQueryData(hQuery), true);
            for (Map.Entry<String, HANDLE> ch : handlesMap.entrySet()) {
                String counterName = ch.getKey();
                HANDLE hCounter = ch.getValue();
                PDH_RAW_COUNTER rawCounter = new PDH_RAW_COUNTER();
                DWORDByReference lpdwType = new DWORDByReference();
                assertErrorSuccess("PdhGetRawCounterValue[" + counterName + "]", pdh.PdhGetRawCounterValue(hCounter, lpdwType, rawCounter), true);
                assertEquals("Bad counter data status for " + counterName, PdhMsg.PDH_CSTATUS_VALID_DATA, rawCounter.CStatus);
                showRawCounterData(System.out, counterName, rawCounter);
            }
        } finally {
            names.clear();
            for (Map.Entry<String, HANDLE> ch : handlesMap.entrySet()) {
                String name = ch.getKey();
                HANDLE hCounter = ch.getValue();
                int status = pdh.PdhRemoveCounter(hCounter);
                if (status != WinError.ERROR_SUCCESS) {
                    names.add(name);
                }
            }
            if (names.size() > 0) {
                fail("Failed to remove counters: " + names);
            }
        }
    } finally {
        assertErrorSuccess("PdhCloseQuery", pdh.PdhCloseQuery(hQuery), true);
    }
}
Also used : PDH_COUNTER_PATH_ELEMENTS(com.sun.jna.platform.win32.Pdh.PDH_COUNTER_PATH_ELEMENTS) HashMap(java.util.HashMap) DWORDByReference(com.sun.jna.platform.win32.WinDef.DWORDByReference) PDH_RAW_COUNTER(com.sun.jna.platform.win32.Pdh.PDH_RAW_COUNTER) LinkedList(java.util.LinkedList) HANDLEByReference(com.sun.jna.platform.win32.WinNT.HANDLEByReference) HANDLE(com.sun.jna.platform.win32.WinNT.HANDLE) HashMap(java.util.HashMap) Map(java.util.Map) Test(org.junit.Test)

Example 2 with PDH_COUNTER_PATH_ELEMENTS

use of com.sun.jna.platform.win32.Pdh.PDH_COUNTER_PATH_ELEMENTS in project jna by java-native-access.

the class PdhTest method testQueryOneCounter.

@Test
public void testQueryOneCounter() {
    PDH_COUNTER_PATH_ELEMENTS elems = new PDH_COUNTER_PATH_ELEMENTS();
    elems.szObjectName = "Processor";
    elems.szInstanceName = "_Total";
    elems.szCounterName = "% Processor Time";
    String counterName = makeCounterPath(pdh, elems);
    HANDLEByReference ref = new HANDLEByReference();
    assertErrorSuccess("PdhOpenQuery", pdh.PdhOpenQuery(null, null, ref), true);
    HANDLE hQuery = ref.getValue();
    try {
        ref.setValue(null);
        assertErrorSuccess("PdhAddEnglishCounter", pdh.PdhAddEnglishCounter(hQuery, counterName, null, ref), true);
        HANDLE hCounter = ref.getValue();
        try {
            assertErrorSuccess("PdhCollectQueryData", pdh.PdhCollectQueryData(hQuery), true);
            DWORDByReference lpdwType = new DWORDByReference();
            PDH_RAW_COUNTER rawCounter = new PDH_RAW_COUNTER();
            assertErrorSuccess("PdhGetRawCounterValue", pdh.PdhGetRawCounterValue(hCounter, lpdwType, rawCounter), true);
            assertEquals("Bad counter data status", PdhMsg.PDH_CSTATUS_VALID_DATA, rawCounter.CStatus);
            DWORD dwType = lpdwType.getValue();
            int typeValue = dwType.intValue();
            // see https://technet.microsoft.com/en-us/library/cc786359(v=ws.10).aspx
            assertEquals("Mismatched counter type", WinPerf.PERF_100NSEC_TIMER_INV, typeValue);
            showRawCounterData(System.out, counterName, rawCounter);
        } finally {
            assertErrorSuccess("PdhRemoveCounter", pdh.PdhRemoveCounter(hCounter), true);
        }
    } finally {
        assertErrorSuccess("PdhCloseQuery", pdh.PdhCloseQuery(hQuery), true);
    }
}
Also used : PDH_COUNTER_PATH_ELEMENTS(com.sun.jna.platform.win32.Pdh.PDH_COUNTER_PATH_ELEMENTS) DWORDByReference(com.sun.jna.platform.win32.WinDef.DWORDByReference) PDH_RAW_COUNTER(com.sun.jna.platform.win32.Pdh.PDH_RAW_COUNTER) DWORD(com.sun.jna.platform.win32.WinDef.DWORD) HANDLEByReference(com.sun.jna.platform.win32.WinNT.HANDLEByReference) HANDLE(com.sun.jna.platform.win32.WinNT.HANDLE) Test(org.junit.Test)

Example 3 with PDH_COUNTER_PATH_ELEMENTS

use of com.sun.jna.platform.win32.Pdh.PDH_COUNTER_PATH_ELEMENTS in project jna by java-native-access.

the class PdhTest method makeCounterPath.

private static String makeCounterPath(Pdh pdh, PDH_COUNTER_PATH_ELEMENTS pathElements) {
    DWORDByReference pcchBufferSize = new DWORDByReference();
    int status = pdh.PdhMakeCounterPath(pathElements, null, pcchBufferSize, 0);
    assertEquals("Unexpected status code: 0x" + Integer.toHexString(status), PdhMsg.PDH_MORE_DATA, status);
    DWORD bufSize = pcchBufferSize.getValue();
    int numChars = bufSize.intValue();
    assertTrue("Bad required buffer size: " + numChars, numChars > 0);
    char[] szFullPathBuffer = new char[numChars + 1];
    pcchBufferSize.setValue(new DWORD(szFullPathBuffer.length));
    assertErrorSuccess("PdhMakeCounterPath", pdh.PdhMakeCounterPath(pathElements, szFullPathBuffer, pcchBufferSize, 0), true);
    return Native.toString(szFullPathBuffer);
}
Also used : DWORDByReference(com.sun.jna.platform.win32.WinDef.DWORDByReference) DWORD(com.sun.jna.platform.win32.WinDef.DWORD)

Aggregations

DWORDByReference (com.sun.jna.platform.win32.WinDef.DWORDByReference)3 PDH_COUNTER_PATH_ELEMENTS (com.sun.jna.platform.win32.Pdh.PDH_COUNTER_PATH_ELEMENTS)2 PDH_RAW_COUNTER (com.sun.jna.platform.win32.Pdh.PDH_RAW_COUNTER)2 DWORD (com.sun.jna.platform.win32.WinDef.DWORD)2 HANDLE (com.sun.jna.platform.win32.WinNT.HANDLE)2 HANDLEByReference (com.sun.jna.platform.win32.WinNT.HANDLEByReference)2 Test (org.junit.Test)2 HashMap (java.util.HashMap)1 LinkedList (java.util.LinkedList)1 Map (java.util.Map)1