summaryrefslogtreecommitdiffstats
path: root/src/libnetdata/os/windows-perflib/perflib.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/libnetdata/os/windows-perflib/perflib.h')
-rw-r--r--src/libnetdata/os/windows-perflib/perflib.h92
1 files changed, 92 insertions, 0 deletions
diff --git a/src/libnetdata/os/windows-perflib/perflib.h b/src/libnetdata/os/windows-perflib/perflib.h
new file mode 100644
index 000000000..650e5503b
--- /dev/null
+++ b/src/libnetdata/os/windows-perflib/perflib.h
@@ -0,0 +1,92 @@
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+#ifndef NETDATA_PERFLIB_H
+#define NETDATA_PERFLIB_H
+
+#include "libnetdata/libnetdata.h"
+
+#if defined(OS_WINDOWS)
+
+typedef uint32_t DWORD;
+typedef long long LONGLONG;
+typedef unsigned long long ULONGLONG;
+typedef int BOOL;
+
+struct _PERF_DATA_BLOCK;
+typedef struct _PERF_DATA_BLOCK PERF_DATA_BLOCK;
+struct _PERF_OBJECT_TYPE;
+typedef struct _PERF_OBJECT_TYPE PERF_OBJECT_TYPE;
+struct _PERF_INSTANCE_DEFINITION;
+typedef struct _PERF_INSTANCE_DEFINITION PERF_INSTANCE_DEFINITION;
+struct _PERF_COUNTER_DEFINITION;
+typedef struct _PERF_COUNTER_DEFINITION PERF_COUNTER_DEFINITION;
+
+const char *RegistryFindNameByID(DWORD id);
+const char *RegistryFindHelpByID(DWORD id);
+DWORD RegistryFindIDByName(const char *name);
+#define PERFLIB_REGISTRY_NAME_NOT_FOUND (DWORD)-1
+#define PERFLIB_MAX_NAME_LENGTH 1024
+
+PERF_DATA_BLOCK *perflibGetPerformanceData(DWORD id);
+void perflibFreePerformanceData(void);
+PERF_OBJECT_TYPE *perflibFindObjectTypeByName(PERF_DATA_BLOCK *pDataBlock, const char *name);
+PERF_INSTANCE_DEFINITION *perflibForEachInstance(PERF_DATA_BLOCK *pDataBlock, PERF_OBJECT_TYPE *pObjectType, PERF_INSTANCE_DEFINITION *lastInstance);
+
+typedef struct _rawdata {
+ DWORD CounterType;
+ DWORD MultiCounterData; // Second raw counter value for multi-valued counters
+ ULONGLONG Data; // Raw counter data
+ LONGLONG Time; // Is a time value or a base value
+ LONGLONG Frequency;
+} RAW_DATA, *PRAW_DATA;
+
+typedef struct _counterdata {
+ DWORD id;
+ bool updated;
+ uint8_t failures; // counts the number of failures to find this key
+ const char *key;
+ DWORD OverwriteCounterType; // if set, the counter type will be overwritten once read
+ RAW_DATA current;
+ RAW_DATA previous;
+} COUNTER_DATA;
+
+#define PERFLIB_MAX_FAILURES_TO_FIND_METRIC 10
+
+#define RAW_DATA_EMPTY (RAW_DATA){ 0 }
+
+bool perflibGetInstanceCounter(PERF_DATA_BLOCK *pDataBlock, PERF_OBJECT_TYPE *pObjectType, PERF_INSTANCE_DEFINITION *pInstance, COUNTER_DATA *cd);
+bool perflibGetObjectCounter(PERF_DATA_BLOCK *pDataBlock, PERF_OBJECT_TYPE *pObjectType, COUNTER_DATA *cd);
+
+typedef bool (*perflib_data_cb)(PERF_DATA_BLOCK *pDataBlock, void *data);
+typedef bool (*perflib_object_cb)(PERF_DATA_BLOCK *pDataBlock, PERF_OBJECT_TYPE *pObjectType, void *data);
+typedef bool (*perflib_instance_cb)(PERF_DATA_BLOCK *pDataBlock, PERF_OBJECT_TYPE *pObjectType, PERF_INSTANCE_DEFINITION *pInstance, void *data);
+typedef bool (*perflib_instance_counter_cb)(PERF_DATA_BLOCK *pDataBlock, PERF_OBJECT_TYPE *pObjectType, PERF_INSTANCE_DEFINITION *pInstance, PERF_COUNTER_DEFINITION *pCounter, RAW_DATA *sample, void *data);
+typedef bool (*perflib_counter_cb)(PERF_DATA_BLOCK *pDataBlock, PERF_OBJECT_TYPE *pObjectType, PERF_COUNTER_DEFINITION *pCounter, RAW_DATA *sample, void *data);
+
+int perflibQueryAndTraverse(DWORD id,
+ perflib_data_cb dataCb,
+ perflib_object_cb objectCb,
+ perflib_instance_cb instanceCb,
+ perflib_instance_counter_cb instanceCounterCb,
+ perflib_counter_cb counterCb,
+ void *data);
+
+bool ObjectTypeHasInstances(PERF_DATA_BLOCK *pDataBlock, PERF_OBJECT_TYPE *pObjectType);
+
+BOOL getInstanceName(PERF_DATA_BLOCK *pDataBlock, PERF_OBJECT_TYPE *pObjectType, PERF_INSTANCE_DEFINITION *pInstance,
+ char *buffer, size_t bufferLen);
+
+BOOL getSystemName(PERF_DATA_BLOCK *pDataBlock, char *buffer, size_t bufferLen);
+
+PERF_OBJECT_TYPE *getObjectTypeByIndex(PERF_DATA_BLOCK *pDataBlock, DWORD ObjectNameTitleIndex);
+
+PERF_INSTANCE_DEFINITION *getInstanceByPosition(
+ PERF_DATA_BLOCK *pDataBlock,
+ PERF_OBJECT_TYPE *pObjectType,
+ DWORD instancePosition);
+
+void PerflibNamesRegistryInitialize(void);
+void PerflibNamesRegistryUpdate(void);
+
+#endif // OS_WINDOWS
+#endif //NETDATA_PERFLIB_H