0
0
Fork 0
mirror of https://github.com/netdata/netdata.git synced 2025-04-23 21:10:22 +00:00

Hyper collector fixes ()

* Fix get instance, dimension rename, remove label

* Add vm_net_interface_packets
Add vm_net_interface_traffic
Switch traffic charts to type area
Chart/dimension definition fixes

* Remove label from "root" charts

* Change vswitch_bytes to vswitch_traffic

* Added charts IPsecoffloadBytes, DirectedPackets,BroadcastPackets, MulticastPackets

* Fix wrong dimensions

* Internal rrdset rename

* Switch algorithm on Hypervisor processor chart

* Grouping per VM not Hv VPs

* Update src/collectors/windows.plugin/perflib-hyperv.c

Co-authored-by: Ilya Mashchenko <ilya@netdata.cloud>

* Update src/collectors/windows.plugin/perflib-hyperv.c

Co-authored-by: Ilya Mashchenko <ilya@netdata.cloud>

* Adjust chart priorities
Add processor total chart

* priority update

* Remove duplicate semicolon

---------

Co-authored-by: Ilya Mashchenko <ilya@netdata.cloud>
This commit is contained in:
Stelios Fragkakis 2024-11-05 20:02:33 +02:00 committed by GitHub
parent df4277f111
commit cf4f1d2ccf
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 400 additions and 95 deletions
src/collectors
all.h
windows.plugin

View file

@ -56,7 +56,53 @@
#define NETDATA_CHART_PRIO_SYSTEM_PACKETS 7001 // freebsd only
#define NETDATA_CHART_PRIO_WINDOWS_THREADS 8001 // Windows only
#define NETDATA_CHART_PRIO_WINDOWS_THERMAL_ZONES 8002 // Windows only
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV 9000 // Windows only
// ----------------------------------------------------------------------------
// Hyper-V
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_CPU_USAGE 20000
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_CPU_USAGE_BY_RUN_CONTEXT 20010
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_MEMORY_PHYSICAL 20020
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_MEMORY_PHYSICAL_GUEST_VISIBLE 20030
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_MEMORY_PRESSURE_CURRENT 20040
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_VID_PHYSICAL_PAGES_ALLOCATED 20050
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_VID_REMOTE_PHYSICAL_PAGES 20060
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_NET_INTERFACE_TRAFFIC 20070
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_NET_INTERFACE_IPSEC_TRAFFIC 20080
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_NET_INTERFACE_PACKETS 20090
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_NET_INTERFACE_BROADCAST_PACKETS 20100
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_NET_INTERFACE_MULTICAST_PACKETS 20110
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_NET_INTERFACE_DIRECTED_PACKETS 20120
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_NET_INTERFACE_PACKETS_DROPPED 20130
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_STORAGE_DEVICE_BYTES 20140
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_STORAGE_DEVICE_ERRORS 20150
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_STORAGE_DEVICE_OPERATIONS 20160
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VMS_HEALTH 20170
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_TRAFFIC 20400
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_PACKETS 20410
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_BROADCAST_PACKETS 20420
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_MULTICAST_PACKETS 20430
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_DIRECTED_PACKETS 20440
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_PACKETS_FLOODED 20450
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_DROPPED_PACKETS 20460
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_EXTENSIONS_DROPPED_PACKETS 20470
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_LEARNED_MAC_ADDRESSES 20470
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_PURGED_MAC_ADDRESSES 20480
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_IO_TLB_FLUSH 20600
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_VIRTUAL_TLB_FLUSH_ENTRIES 20610
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_VIRTUAL_TLB_PAGES 20620
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_ADDRESS_SPACE 20630
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_ATTACHED_DEVICES 20640
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_DEVICE_DMA_ERRORS 20650
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_DEVICE_INTERRUPT_ERRORS 20660
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_DEVICE_INTERRUPT_THROTTLE_EVENTS 20670
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_DEPOSITED_PAGES 20680
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_GPA_SPACE_PAGES 20690
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_DEVICE_SPACE_PAGES 20700
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_GPA_SPACE_MODIFICATIONS 20710
// ----------------------------------------------------------------------------
// CPU per core

View file

@ -9,8 +9,6 @@
#define HYPERV "hyperv"
static long chart_priority = NETDATA_CHART_PRIO_WINDOWS_HYPERV;
static void get_and_sanitize_instance_value(
PERF_DATA_BLOCK *pDataBlock,
PERF_OBJECT_TYPE *pObjectType,
@ -19,7 +17,7 @@ static void get_and_sanitize_instance_value(
size_t buffer_size)
{
// char wstr[8192];
if (!getInstanceName(pDataBlock, pObjectType, pi, buffer, sizeof(buffer_size))) {
if (!getInstanceName(pDataBlock, pObjectType, pi, buffer, buffer_size)) {
strncpyz(buffer, "[unknown]", buffer_size - 1);
// return;
}
@ -153,7 +151,7 @@ static bool do_hyperv_memory(PERF_DATA_BLOCK *pDataBlock, int update_every, void
"bytes",
_COMMON_PLUGIN_NAME,
_COMMON_PLUGIN_MODULE_NAME,
chart_priority++,
NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_MEMORY_PHYSICAL,
update_every,
RRDSET_TYPE_LINE);
@ -167,7 +165,7 @@ static bool do_hyperv_memory(PERF_DATA_BLOCK *pDataBlock, int update_every, void
"bytes",
_COMMON_PLUGIN_NAME,
_COMMON_PLUGIN_MODULE_NAME,
chart_priority++,
NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_MEMORY_PHYSICAL_GUEST_VISIBLE,
update_every,
RRDSET_TYPE_LINE);
@ -181,14 +179,14 @@ static bool do_hyperv_memory(PERF_DATA_BLOCK *pDataBlock, int update_every, void
"percentage",
_COMMON_PLUGIN_NAME,
_COMMON_PLUGIN_MODULE_NAME,
chart_priority++,
NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_MEMORY_PRESSURE_CURRENT,
update_every,
RRDSET_TYPE_LINE);
p->rd_CurrentPressure = rrddim_add(p->st_pressure, "pressure", NULL, 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
p->rd_PhysicalMemory = rrddim_add(p->st_vm_memory_physical, "assigned_memory", NULL, 1024 * 1024, 1, RRD_ALGORITHM_ABSOLUTE);
p->rd_GuestVisiblePhysicalMemory = rrddim_add(p->st_vm_memory_physical_guest_visible, "visible_memory", NULL, 1024 * 1024, 1, RRD_ALGORITHM_ABSOLUTE);
p->rd_GuestAvailableMemory = rrddim_add(p->st_vm_memory_physical_guest_visible, "available_memory", NULL, 1024 * 1024, 1, RRD_ALGORITHM_ABSOLUTE);
p->rd_CurrentPressure = rrddim_add(p->st_pressure, "pressure", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
p->rd_PhysicalMemory = rrddim_add(p->st_vm_memory_physical, "assigned", NULL, 1024 * 1024, 1, RRD_ALGORITHM_ABSOLUTE);
p->rd_GuestVisiblePhysicalMemory = rrddim_add(p->st_vm_memory_physical_guest_visible, "visible", NULL, 1024 * 1024, 1, RRD_ALGORITHM_ABSOLUTE);
p->rd_GuestAvailableMemory = rrddim_add(p->st_vm_memory_physical_guest_visible, "available", NULL, 1024 * 1024, 1, RRD_ALGORITHM_ABSOLUTE);
rrdlabels_add(p->st_vm_memory_physical->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
rrdlabels_add(p->st_pressure->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
@ -250,7 +248,7 @@ static bool do_hyperv_vid_partition(PERF_DATA_BLOCK *pDataBlock, int update_ever
"pages",
_COMMON_PLUGIN_NAME,
_COMMON_PLUGIN_MODULE_NAME,
chart_priority++,
NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_VID_PHYSICAL_PAGES_ALLOCATED,
update_every,
RRDSET_TYPE_LINE);
@ -264,7 +262,7 @@ static bool do_hyperv_vid_partition(PERF_DATA_BLOCK *pDataBlock, int update_ever
"pages",
_COMMON_PLUGIN_NAME,
_COMMON_PLUGIN_MODULE_NAME,
chart_priority++,
NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_VID_REMOTE_PHYSICAL_PAGES,
update_every,
RRDSET_TYPE_LINE);
@ -329,14 +327,12 @@ static bool do_hyperv_health_summary(PERF_DATA_BLOCK *pDataBlock, int update_eve
"vms",
_COMMON_PLUGIN_NAME,
_COMMON_PLUGIN_MODULE_NAME,
chart_priority++,
NETDATA_CHART_PRIO_WINDOWS_HYPERV_VMS_HEALTH,
update_every,
RRDSET_TYPE_STACKED);
p->rd_HealthCritical = rrddim_add(p->st_health, "critical", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
p->rd_HealthOk = rrddim_add(p->st_health, "ok", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
rrdlabels_add(p->st_health->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
}
SETP_DIM_VALUE(st_health, HealthCritical);
@ -490,14 +486,13 @@ static bool do_hyperv_root_partition(PERF_DATA_BLOCK *pDataBlock, int update_eve
"pages",
_COMMON_PLUGIN_NAME,
_COMMON_PLUGIN_MODULE_NAME,
chart_priority++,
NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_DEVICE_SPACE_PAGES,
update_every,
RRDSET_TYPE_LINE);
p->rd_DeviceSpacePages4K = rrddim_add(p->st_device_space_pages, "4K", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
p->rd_DeviceSpacePages2M = rrddim_add(p->st_device_space_pages, "2M", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
p->rd_DeviceSpacePages1G = rrddim_add(p->st_device_space_pages, "1G", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
rrdlabels_add(p->st_device_space_pages->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
p->st_gpa_space_pages = rrdset_create_localhost(
"root_partition_gpa_space_pages",
@ -509,14 +504,13 @@ static bool do_hyperv_root_partition(PERF_DATA_BLOCK *pDataBlock, int update_eve
"pages",
_COMMON_PLUGIN_NAME,
_COMMON_PLUGIN_MODULE_NAME,
chart_priority++,
NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_GPA_SPACE_PAGES,
update_every,
RRDSET_TYPE_LINE);
p->rd_GPASpacePages4K = rrddim_add(p->st_gpa_space_pages, "4K", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
p->rd_GPASpacePages2M = rrddim_add(p->st_gpa_space_pages, "2M", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
p->rd_GPASpacePages1G = rrddim_add(p->st_gpa_space_pages, "1G", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
rrdlabels_add(p->st_gpa_space_pages->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
p->st_gpa_space_modifications = rrdset_create_localhost(
"root_partition_gpa_space_modifications",
@ -528,13 +522,12 @@ static bool do_hyperv_root_partition(PERF_DATA_BLOCK *pDataBlock, int update_eve
"modifications/s",
_COMMON_PLUGIN_NAME,
_COMMON_PLUGIN_MODULE_NAME,
chart_priority++,
NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_GPA_SPACE_MODIFICATIONS,
update_every,
RRDSET_TYPE_LINE);
p->rd_GPASpaceModifications =
rrddim_add(p->st_gpa_space_modifications, "gpa", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
rrdlabels_add(p->st_gpa_space_modifications->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
p->st_attached_devices = rrdset_create_localhost(
"root_partition_attached_devices",
@ -546,12 +539,11 @@ static bool do_hyperv_root_partition(PERF_DATA_BLOCK *pDataBlock, int update_eve
"devices",
_COMMON_PLUGIN_NAME,
_COMMON_PLUGIN_MODULE_NAME,
chart_priority++,
NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_ATTACHED_DEVICES,
update_every,
RRDSET_TYPE_LINE);
p->rd_AttachedDevices = rrddim_add(p->st_attached_devices, "attached", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
rrdlabels_add(p->st_attached_devices->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
p->st_deposited_pages = rrdset_create_localhost(
"root_partition_deposited_pages",
@ -563,12 +555,11 @@ static bool do_hyperv_root_partition(PERF_DATA_BLOCK *pDataBlock, int update_eve
"pages",
_COMMON_PLUGIN_NAME,
_COMMON_PLUGIN_MODULE_NAME,
chart_priority++,
NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_DEPOSITED_PAGES,
update_every,
RRDSET_TYPE_LINE);
p->rd_DepositedPages = rrddim_add(p->st_deposited_pages, "gpa", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
rrdlabels_add(p->st_deposited_pages->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
p->st_DeviceDMAErrors = rrdset_create_localhost(
"root_partition_device_dma_errors",
@ -580,13 +571,12 @@ static bool do_hyperv_root_partition(PERF_DATA_BLOCK *pDataBlock, int update_eve
"requests",
_COMMON_PLUGIN_NAME,
_COMMON_PLUGIN_MODULE_NAME,
chart_priority++,
NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_DEVICE_DMA_ERRORS,
update_every,
RRDSET_TYPE_LINE);
p->rd_DeviceDMAErrors =
rrddim_add(p->st_DeviceDMAErrors, "illegal_dma", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
rrdlabels_add(p->st_DeviceDMAErrors->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
p->st_DeviceInterruptErrors = rrdset_create_localhost(
"root_partition_device_interrupt_errors",
@ -598,13 +588,12 @@ static bool do_hyperv_root_partition(PERF_DATA_BLOCK *pDataBlock, int update_eve
"requests",
_COMMON_PLUGIN_NAME,
_COMMON_PLUGIN_MODULE_NAME,
chart_priority++,
NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_DEVICE_INTERRUPT_ERRORS,
update_every,
RRDSET_TYPE_LINE);
p->rd_DeviceInterruptErrors =
rrddim_add(p->st_DeviceInterruptErrors, "illegal_interrupt", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
rrdlabels_add(p->st_DeviceInterruptErrors->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
p->st_DeviceInterruptThrottleEvents = rrdset_create_localhost(
"root_partition_device_interrupt_throttle_events",
@ -616,14 +605,12 @@ static bool do_hyperv_root_partition(PERF_DATA_BLOCK *pDataBlock, int update_eve
"events",
_COMMON_PLUGIN_NAME,
_COMMON_PLUGIN_MODULE_NAME,
chart_priority++,
NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_DEVICE_INTERRUPT_THROTTLE_EVENTS,
update_every,
RRDSET_TYPE_LINE);
p->rd_DeviceInterruptThrottleEvents =
rrddim_add(p->st_DeviceInterruptThrottleEvents, "throttling", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
rrdlabels_add(
p->st_DeviceInterruptThrottleEvents->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
p->st_IOΤLBFlushesSec = rrdset_create_localhost(
"root_partition_io_tlb_flush",
@ -635,12 +622,11 @@ static bool do_hyperv_root_partition(PERF_DATA_BLOCK *pDataBlock, int update_eve
"flushes/s",
_COMMON_PLUGIN_NAME,
_COMMON_PLUGIN_MODULE_NAME,
chart_priority++,
NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_IO_TLB_FLUSH,
update_every,
RRDSET_TYPE_LINE);
p->rd_IOΤLBFlushesSec = rrddim_add(p->st_IOΤLBFlushesSec, "gpa", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
rrdlabels_add(p->st_IOΤLBFlushesSec->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
p->st_AddressSpaces = rrdset_create_localhost(
"root_partition_address_space",
@ -652,12 +638,11 @@ static bool do_hyperv_root_partition(PERF_DATA_BLOCK *pDataBlock, int update_eve
"address spaces",
_COMMON_PLUGIN_NAME,
_COMMON_PLUGIN_MODULE_NAME,
chart_priority++,
NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_ADDRESS_SPACE,
update_every,
RRDSET_TYPE_LINE);
p->rd_AddressSpaces = rrddim_add(p->st_AddressSpaces, "address_spaces", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
rrdlabels_add(p->st_AddressSpaces->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
p->st_VirtualTLBPages = rrdset_create_localhost(
"root_partition_virtual_tlb_pages",
@ -669,12 +654,11 @@ static bool do_hyperv_root_partition(PERF_DATA_BLOCK *pDataBlock, int update_eve
"pages",
_COMMON_PLUGIN_NAME,
_COMMON_PLUGIN_MODULE_NAME,
chart_priority++,
NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_VIRTUAL_TLB_PAGES,
update_every,
RRDSET_TYPE_LINE);
p->rd_VirtualTLBPages = rrddim_add(p->st_VirtualTLBPages, "used", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
rrdlabels_add(p->st_VirtualTLBPages->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
p->st_VirtualTLBFlushEntiresSec = rrdset_create_localhost(
"root_partition_virtual_tlb_flush_entries",
@ -686,13 +670,12 @@ static bool do_hyperv_root_partition(PERF_DATA_BLOCK *pDataBlock, int update_eve
"flushes/s",
_COMMON_PLUGIN_NAME,
_COMMON_PLUGIN_MODULE_NAME,
chart_priority++,
NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_VIRTUAL_TLB_FLUSH_ENTRIES,
update_every,
RRDSET_TYPE_LINE);
p->rd_VirtualTLBFlushEntiresSec =
rrddim_add(p->st_VirtualTLBFlushEntiresSec, "flushes", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
rrdlabels_add(p->st_VirtualTLBFlushEntiresSec->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
}
// Set the data for each dimension
@ -822,10 +805,10 @@ static bool do_hyperv_storage_device(PERF_DATA_BLOCK *pDataBlock, int update_eve
HYPERV,
HYPERV".vm_storage_device_operations",
"VM storage device IOPS",
"operations/sec",
"operations/s",
_COMMON_PLUGIN_NAME,
_COMMON_PLUGIN_MODULE_NAME,
chart_priority++,
NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_STORAGE_DEVICE_OPERATIONS,
update_every,
RRDSET_TYPE_LINE);
@ -843,10 +826,10 @@ static bool do_hyperv_storage_device(PERF_DATA_BLOCK *pDataBlock, int update_eve
HYPERV,
HYPERV".vm_storage_device_bytes",
"VM storage device IO",
"bytes/sec",
"bytes/s",
_COMMON_PLUGIN_NAME,
_COMMON_PLUGIN_MODULE_NAME,
chart_priority++,
NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_STORAGE_DEVICE_BYTES,
update_every,
RRDSET_TYPE_AREA);
@ -864,10 +847,10 @@ static bool do_hyperv_storage_device(PERF_DATA_BLOCK *pDataBlock, int update_eve
HYPERV,
HYPERV".vm_storage_device_errors",
"VM storage device errors",
"errors/sec",
"errors/s",
_COMMON_PLUGIN_NAME,
_COMMON_PLUGIN_MODULE_NAME,
chart_priority++,
NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_STORAGE_DEVICE_ERRORS,
update_every,
RRDSET_TYPE_LINE);
@ -1050,21 +1033,21 @@ static bool do_hyperv_switch(PERF_DATA_BLOCK *pDataBlock, int update_every, void
p->charts_created = true;
p->st_bytes = rrdset_create_localhost(
"vswitch_bytes",
"vswitch_traffic",
windows_shared_buffer,
NULL,
HYPERV,
HYPERV ".vswitch_bytes",
HYPERV ".vswitch_traffic",
"Virtual switch traffic",
"bytes/sec",
"kilobits/s",
_COMMON_PLUGIN_NAME,
_COMMON_PLUGIN_MODULE_NAME,
chart_priority++,
NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_TRAFFIC,
update_every,
RRDSET_TYPE_LINE);
RRDSET_TYPE_AREA);
p->rd_BytesReceivedSec = rrddim_add(p->st_bytes, "received", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
p->rd_BytesSentSec = rrddim_add(p->st_bytes, "sent", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
p->rd_BytesReceivedSec = rrddim_add(p->st_bytes, "received", NULL, 8, 1000, RRD_ALGORITHM_INCREMENTAL);
p->rd_BytesSentSec = rrddim_add(p->st_bytes, "sent", NULL, -8, 1000, RRD_ALGORITHM_INCREMENTAL);
rrdlabels_add(p->st_bytes->rrdlabels, "vswitch", windows_shared_buffer, RRDLABEL_SRC_AUTO);
p->st_packets = rrdset_create_localhost(
@ -1074,10 +1057,10 @@ static bool do_hyperv_switch(PERF_DATA_BLOCK *pDataBlock, int update_every, void
HYPERV,
HYPERV ".vswitch_packets",
"Virtual switch packets",
"packets/sec",
"packets/s",
_COMMON_PLUGIN_NAME,
_COMMON_PLUGIN_MODULE_NAME,
chart_priority++,
NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_PACKETS,
update_every,
RRDSET_TYPE_LINE);
@ -1092,10 +1075,10 @@ static bool do_hyperv_switch(PERF_DATA_BLOCK *pDataBlock, int update_every, void
HYPERV,
HYPERV ".vswitch_directed_packets",
"Virtual switch directed packets",
"packets/sec",
"packets/s",
_COMMON_PLUGIN_NAME,
_COMMON_PLUGIN_MODULE_NAME,
chart_priority++,
NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_DIRECTED_PACKETS,
update_every,
RRDSET_TYPE_LINE);
@ -1112,10 +1095,10 @@ static bool do_hyperv_switch(PERF_DATA_BLOCK *pDataBlock, int update_every, void
HYPERV,
HYPERV ".vswitch_broadcast_packets",
"Virtual switch broadcast packets",
"packets/sec",
"packets/s",
_COMMON_PLUGIN_NAME,
_COMMON_PLUGIN_MODULE_NAME,
chart_priority++,
NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_BROADCAST_PACKETS,
update_every,
RRDSET_TYPE_LINE);
@ -1132,10 +1115,10 @@ static bool do_hyperv_switch(PERF_DATA_BLOCK *pDataBlock, int update_every, void
HYPERV,
HYPERV ".vswitch_multicast_packets",
"Virtual switch multicast packets",
"packets/sec",
"packets/s",
_COMMON_PLUGIN_NAME,
_COMMON_PLUGIN_MODULE_NAME,
chart_priority++,
NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_MULTICAST_PACKETS,
update_every,
RRDSET_TYPE_LINE);
@ -1152,10 +1135,10 @@ static bool do_hyperv_switch(PERF_DATA_BLOCK *pDataBlock, int update_every, void
HYPERV,
HYPERV ".vswitch_dropped_packets",
"Virtual switch dropped packets",
"drops/sec",
"drops/s",
_COMMON_PLUGIN_NAME,
_COMMON_PLUGIN_MODULE_NAME,
chart_priority++,
NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_DROPPED_PACKETS,
update_every,
RRDSET_TYPE_LINE);
@ -1172,10 +1155,10 @@ static bool do_hyperv_switch(PERF_DATA_BLOCK *pDataBlock, int update_every, void
HYPERV,
HYPERV ".vswitch_extensions_dropped_packets",
"Virtual switch extensions dropped packets",
"drops/sec",
"drops/s",
_COMMON_PLUGIN_NAME,
_COMMON_PLUGIN_MODULE_NAME,
chart_priority++,
NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_EXTENSIONS_DROPPED_PACKETS,
update_every,
RRDSET_TYPE_LINE);
@ -1192,10 +1175,10 @@ static bool do_hyperv_switch(PERF_DATA_BLOCK *pDataBlock, int update_every, void
HYPERV,
HYPERV ".vswitch_packets_flooded",
"Virtual switch flooded packets",
"packets/sec",
"packets/s",
_COMMON_PLUGIN_NAME,
_COMMON_PLUGIN_MODULE_NAME,
chart_priority++,
NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_PACKETS_FLOODED,
update_every,
RRDSET_TYPE_LINE);
@ -1209,10 +1192,10 @@ static bool do_hyperv_switch(PERF_DATA_BLOCK *pDataBlock, int update_every, void
HYPERV,
HYPERV ".vswitch_learned_mac_addresses",
"Virtual switch learned MAC addresses",
"mac addresses/sec",
"mac addresses/s",
_COMMON_PLUGIN_NAME,
_COMMON_PLUGIN_MODULE_NAME,
chart_priority++,
NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_LEARNED_MAC_ADDRESSES,
update_every,
RRDSET_TYPE_LINE);
@ -1226,10 +1209,10 @@ static bool do_hyperv_switch(PERF_DATA_BLOCK *pDataBlock, int update_every, void
HYPERV,
HYPERV ".vswitch_purged_mac_addresses",
"Virtual switch purged MAC addresses",
"mac addresses/sec",
"mac addresses/s",
_COMMON_PLUGIN_NAME,
_COMMON_PLUGIN_MODULE_NAME,
chart_priority++,
NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_PURGED_MAC_ADDRESSES,
update_every,
RRDSET_TYPE_LINE);
@ -1279,17 +1262,58 @@ static bool do_hyperv_switch(PERF_DATA_BLOCK *pDataBlock, int update_every, void
return true;
}
struct hypervisor_network_adapter {
bool collected_metadata;
bool charts_created;
RRDSET *st_packets;
RRDSET *st_dropped_packets;
DEFINE_RD(DroppedPacketsOutgoingSec);
DEFINE_RD(DroppedPacketsIncomingSec);
RRDSET *st_send_receive_packets;
DEFINE_RD(PacketsSentSec);
DEFINE_RD(PacketsReceivedSec);
RRDSET *st_send_receive_bytes;
DEFINE_RD(BytesSentSec);
DEFINE_RD(BytesReceivedSec);
RRDSET *st_IPsecoffloadBytes;
DEFINE_RD(IPsecoffloadBytesReceivedSec);
DEFINE_RD(IPsecoffloadBytesSentSec);
RRDSET *st_DirectedPackets;
DEFINE_RD(DirectedPacketsSentSec);
DEFINE_RD(DirectedPacketsReceivedSec);
RRDSET *st_BroadcastPackets;
DEFINE_RD(BroadcastPacketsSentSec);
DEFINE_RD(BroadcastPacketsReceivedSec);
RRDSET *st_MulticastPackets;
DEFINE_RD(MulticastPacketsSentSec);
DEFINE_RD(MulticastPacketsReceivedSec);
COUNTER_DATA DroppedPacketsOutgoingSec;
COUNTER_DATA DroppedPacketsIncomingSec;
COUNTER_DATA PacketsSentSec;
COUNTER_DATA PacketsReceivedSec;
COUNTER_DATA BytesSentSec;
COUNTER_DATA BytesReceivedSec;
COUNTER_DATA IPsecoffloadBytesReceivedSec;
COUNTER_DATA IPsecoffloadBytesSentSec;
COUNTER_DATA DirectedPacketsSentSec;
COUNTER_DATA DirectedPacketsReceivedSec;
COUNTER_DATA BroadcastPacketsSentSec;
COUNTER_DATA BroadcastPacketsReceivedSec;
COUNTER_DATA MulticastPacketsSentSec;
COUNTER_DATA MulticastPacketsReceivedSec;
};
// Initialize the keys for the root partition metrics
@ -1297,6 +1321,21 @@ void initialize_hyperv_network_adapter_keys(struct hypervisor_network_adapter *p
{
p->DroppedPacketsOutgoingSec.key = "Dropped Packets Outgoing/sec";
p->DroppedPacketsIncomingSec.key = "Dropped Packets Incoming/sec";
p->PacketsSentSec.key = "Packets Sent/sec";
p->PacketsReceivedSec.key = "Packets Received/sec";
p->BytesSentSec.key = "Bytes Sent/sec";
p->BytesReceivedSec.key = "Bytes Received/sec";
p->IPsecoffloadBytesReceivedSec.key = "IPsec offload Bytes Receive/sec";
p->IPsecoffloadBytesSentSec.key = "IPsec offload Bytes Sent/sec";
p->DirectedPacketsSentSec.key = "Directed Packets Sent/sec";
p->DirectedPacketsReceivedSec.key = "Directed Packets Received/sec";
p->BroadcastPacketsSentSec.key = "Broadcast Packets Sent/sec";
p->BroadcastPacketsReceivedSec.key = "Broadcast Packets Received/sec";
p->MulticastPacketsSentSec.key = "Multicast Packets Sent/sec";
p->MulticastPacketsReceivedSec.key = "Multicast Packets Received/sec";
}
void dict_hyperv_network_adapter_insert_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused)
@ -1333,32 +1372,197 @@ static bool do_hyperv_network_adapter(PERF_DATA_BLOCK *pDataBlock, int update_ev
GET_INSTANCE_COUNTER(DroppedPacketsIncomingSec);
GET_INSTANCE_COUNTER(DroppedPacketsOutgoingSec);
GET_INSTANCE_COUNTER(PacketsReceivedSec);
GET_INSTANCE_COUNTER(PacketsSentSec);
GET_INSTANCE_COUNTER(BytesReceivedSec);
GET_INSTANCE_COUNTER(BytesSentSec);
GET_INSTANCE_COUNTER(IPsecoffloadBytesReceivedSec);
GET_INSTANCE_COUNTER(IPsecoffloadBytesSentSec);
GET_INSTANCE_COUNTER(DirectedPacketsSentSec);
GET_INSTANCE_COUNTER(DirectedPacketsReceivedSec);
GET_INSTANCE_COUNTER(BroadcastPacketsSentSec);
GET_INSTANCE_COUNTER(BroadcastPacketsReceivedSec);
GET_INSTANCE_COUNTER(MulticastPacketsSentSec);
GET_INSTANCE_COUNTER(MulticastPacketsReceivedSec);
if (!p->charts_created) {
p->charts_created = true;
p->st_packets = rrdset_create_localhost(
p->st_dropped_packets = rrdset_create_localhost(
"vm_net_interface_packets_dropped",
windows_shared_buffer,
NULL,
HYPERV,
HYPERV".vm_net_interface_packets_dropped",
"VM interface packets dropped",
"drops/sec",
"drops/s",
_COMMON_PLUGIN_NAME,
_COMMON_PLUGIN_MODULE_NAME,
chart_priority++,
NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_NET_INTERFACE_PACKETS_DROPPED,
update_every,
RRDSET_TYPE_LINE);
p->rd_DroppedPacketsIncomingSec = rrddim_add(p->st_packets, "incoming", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
p->rd_DroppedPacketsOutgoingSec = rrddim_add(p->st_packets, "outgoing", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
p->rd_DroppedPacketsIncomingSec = rrddim_add(p->st_dropped_packets, "incoming", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
p->rd_DroppedPacketsOutgoingSec = rrddim_add(p->st_dropped_packets, "outgoing", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
rrdlabels_add(p->st_dropped_packets->rrdlabels, "vm_net_interface", windows_shared_buffer, RRDLABEL_SRC_AUTO);
p->st_send_receive_packets = rrdset_create_localhost(
"vm_net_interface_packets",
windows_shared_buffer,
NULL,
HYPERV,
HYPERV ".vm_net_interface_packets",
"VM interface packets",
"packets/s",
_COMMON_PLUGIN_NAME,
_COMMON_PLUGIN_MODULE_NAME,
NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_NET_INTERFACE_PACKETS,
update_every,
RRDSET_TYPE_LINE);
p->rd_PacketsReceivedSec = rrddim_add(p->st_send_receive_packets, "received", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
p->rd_PacketsSentSec = rrddim_add(p->st_send_receive_packets, "sent", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
rrdlabels_add(p->st_send_receive_packets->rrdlabels, "vm_net_interface", windows_shared_buffer, RRDLABEL_SRC_AUTO);
p->st_send_receive_bytes = rrdset_create_localhost(
"vm_net_interface_traffic",
windows_shared_buffer,
NULL,
HYPERV,
HYPERV ".vm_net_interface_traffic",
"VM interface traffic",
"kilobits/s",
_COMMON_PLUGIN_NAME,
_COMMON_PLUGIN_MODULE_NAME,
NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_NET_INTERFACE_TRAFFIC,
update_every,
RRDSET_TYPE_AREA);
p->rd_BytesReceivedSec = rrddim_add(p->st_send_receive_bytes, "received", NULL, 8, 1000, RRD_ALGORITHM_INCREMENTAL);
p->rd_BytesSentSec = rrddim_add(p->st_send_receive_bytes, "sent", NULL, -8, 1000, RRD_ALGORITHM_INCREMENTAL);
rrdlabels_add(p->st_send_receive_bytes->rrdlabels, "vm_net_interface", windows_shared_buffer, RRDLABEL_SRC_AUTO);
p->st_IPsecoffloadBytes = rrdset_create_localhost(
"vm_net_interface_ipsec_traffic",
windows_shared_buffer,
NULL,
HYPERV,
HYPERV ".vm_net_interface_ipsec_traffic",
"VM interface traffic",
"kilobits/s",
_COMMON_PLUGIN_NAME,
_COMMON_PLUGIN_MODULE_NAME,
NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_NET_INTERFACE_IPSEC_TRAFFIC,
update_every,
RRDSET_TYPE_AREA);
p->rd_IPsecoffloadBytesReceivedSec =
rrddim_add(p->st_IPsecoffloadBytes, "received", NULL, 8, 1000, RRD_ALGORITHM_INCREMENTAL);
p->rd_IPsecoffloadBytesSentSec =
rrddim_add(p->st_IPsecoffloadBytes, "sent", NULL, -8, 1000, RRD_ALGORITHM_INCREMENTAL);
rrdlabels_add(
p->st_IPsecoffloadBytes->rrdlabels, "vm_net_interface", windows_shared_buffer, RRDLABEL_SRC_AUTO);
p->st_DirectedPackets = rrdset_create_localhost(
"vm_net_interface_directed_packets",
windows_shared_buffer,
NULL,
HYPERV,
HYPERV ".vm_net_interface_directed_packets",
"VM interface traffic",
"packets/s",
_COMMON_PLUGIN_NAME,
_COMMON_PLUGIN_MODULE_NAME,
NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_NET_INTERFACE_DIRECTED_PACKETS,
update_every,
RRDSET_TYPE_LINE);
p->rd_DirectedPacketsReceivedSec =
rrddim_add(p->st_DirectedPackets, "received", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
p->rd_DirectedPacketsSentSec =
rrddim_add(p->st_DirectedPackets, "sent", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
rrdlabels_add(
p->st_DirectedPackets->rrdlabels, "vm_net_interface", windows_shared_buffer, RRDLABEL_SRC_AUTO);
p->st_BroadcastPackets = rrdset_create_localhost(
"vm_net_interface_broadcast_packets",
windows_shared_buffer,
NULL,
HYPERV,
HYPERV ".vm_net_interface_broadcast_packets",
"VM interface broadcast",
"packets/s",
_COMMON_PLUGIN_NAME,
_COMMON_PLUGIN_MODULE_NAME,
NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_NET_INTERFACE_PACKETS,
update_every,
RRDSET_TYPE_LINE);
p->rd_BroadcastPacketsReceivedSec =
rrddim_add(p->st_BroadcastPackets, "received", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
p->rd_BroadcastPacketsSentSec =
rrddim_add(p->st_BroadcastPackets, "sent", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
rrdlabels_add(
p->st_BroadcastPackets->rrdlabels, "vm_net_interface", windows_shared_buffer, RRDLABEL_SRC_AUTO);
p->st_MulticastPackets = rrdset_create_localhost(
"vm_net_interface_multicast_packets",
windows_shared_buffer,
NULL,
HYPERV,
HYPERV ".vm_net_interface_multicast_packets",
"VM interface multicast",
"packets/s",
_COMMON_PLUGIN_NAME,
_COMMON_PLUGIN_MODULE_NAME,
NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_NET_INTERFACE_MULTICAST_PACKETS,
update_every,
RRDSET_TYPE_LINE);
p->rd_MulticastPacketsReceivedSec =
rrddim_add(p->st_MulticastPackets, "received", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
p->rd_MulticastPacketsSentSec =
rrddim_add(p->st_MulticastPackets, "sent", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
rrdlabels_add(
p->st_MulticastPackets->rrdlabels, "vm_net_interface", windows_shared_buffer, RRDLABEL_SRC_AUTO);
rrdlabels_add(p->st_packets->rrdlabels, "vm_net_interface", windows_shared_buffer, RRDLABEL_SRC_AUTO);
}
SETP_DIM_VALUE(st_packets, DroppedPacketsIncomingSec);
SETP_DIM_VALUE(st_packets, DroppedPacketsOutgoingSec);
SETP_DIM_VALUE(st_dropped_packets, DroppedPacketsIncomingSec);
SETP_DIM_VALUE(st_dropped_packets, DroppedPacketsOutgoingSec);
rrdset_done(p->st_packets);
SETP_DIM_VALUE(st_send_receive_packets, PacketsReceivedSec);
SETP_DIM_VALUE(st_send_receive_packets, PacketsSentSec);
SETP_DIM_VALUE(st_send_receive_bytes, BytesReceivedSec);
SETP_DIM_VALUE(st_send_receive_bytes, BytesSentSec);
SETP_DIM_VALUE(st_IPsecoffloadBytes, IPsecoffloadBytesReceivedSec);
SETP_DIM_VALUE(st_IPsecoffloadBytes, IPsecoffloadBytesSentSec);
SETP_DIM_VALUE(st_DirectedPackets, DirectedPacketsSentSec);
SETP_DIM_VALUE(st_DirectedPackets, DirectedPacketsReceivedSec);
SETP_DIM_VALUE(st_BroadcastPackets, BroadcastPacketsSentSec);
SETP_DIM_VALUE(st_BroadcastPackets, BroadcastPacketsReceivedSec);
SETP_DIM_VALUE(st_MulticastPackets,MulticastPacketsSentSec);
SETP_DIM_VALUE(st_MulticastPackets,MulticastPacketsReceivedSec);
rrdset_done(p->st_IPsecoffloadBytes);
rrdset_done(p->st_DirectedPackets);
rrdset_done(p->st_BroadcastPackets);
rrdset_done(p->st_MulticastPackets);
rrdset_done(p->st_send_receive_bytes);
rrdset_done(p->st_send_receive_packets);
rrdset_done(p->st_dropped_packets);
}
return true;
}
@ -1375,9 +1579,17 @@ struct hypervisor_processor {
DEFINE_RD(HypervisorRunTime);
DEFINE_RD(RemoteRunTime);
RRDSET *st_HypervisorProcessorTotal;
DEFINE_RD(TotalRunTime);
COUNTER_DATA GuestRunTime;
COUNTER_DATA HypervisorRunTime;
COUNTER_DATA RemoteRunTime;
COUNTER_DATA TotalRunTime;
collected_number GuestRunTime_total;
collected_number HypervisorRunTime_total;
collected_number RemoteRunTime_total;
collected_number TotalRunTime_total;
};
@ -1386,6 +1598,11 @@ void initialize_hyperv_processor_keys(struct hypervisor_processor *p)
p->GuestRunTime.key = "% Guest Run Time";
p->HypervisorRunTime.key = "% Hypervisor Run Time";
p->RemoteRunTime.key = "% Remote Run Time";
p->TotalRunTime.key = "% Total Run Time";
p->GuestRunTime_total = 0;
p->HypervisorRunTime_total = 0;
p->RemoteRunTime_total = 0;
p->TotalRunTime_total = 0;
}
void dict_hyperv_processor_insert_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused)
@ -1410,9 +1627,13 @@ static bool do_hyperv_processor(PERF_DATA_BLOCK *pDataBlock, int update_every, v
get_and_sanitize_instance_value(pDataBlock, pObjectType, pi, windows_shared_buffer, sizeof(windows_shared_buffer));
if(strcasecmp(windows_shared_buffer, "_Total") == 0)
if (strcasecmp(windows_shared_buffer, "_Total") == 0)
continue;
char *vm = strchr(windows_shared_buffer, ':');
if (vm)
*vm = '\0';
struct hypervisor_processor *p = dictionary_set(item->instance, windows_shared_buffer, NULL, sizeof(*p));
if (!p->collected_metadata) {
@ -1422,39 +1643,77 @@ static bool do_hyperv_processor(PERF_DATA_BLOCK *pDataBlock, int update_every, v
GET_INSTANCE_COUNTER(GuestRunTime);
GET_INSTANCE_COUNTER(HypervisorRunTime);
GET_INSTANCE_COUNTER(RemoteRunTime);
GET_INSTANCE_COUNTER(TotalRunTime);
if (!p->charts_created) {
p->charts_created = true;
p->st_HypervisorProcessor = rrdset_create_localhost(
p->st_HypervisorProcessorTotal = rrdset_create_localhost(
"vm_cpu_usage",
windows_shared_buffer,
NULL,
HYPERV,
HYPERV ".vm_cpu_usage",
"VM CPU usage (100% = 1 core)",
"VM CPU usage",
"percentage",
_COMMON_PLUGIN_NAME,
_COMMON_PLUGIN_MODULE_NAME,
chart_priority++,
NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_CPU_USAGE,
update_every,
RRDSET_TYPE_STACKED);
p->rd_TotalRunTime =
rrddim_add(p->st_HypervisorProcessorTotal, "usage", NULL, 1, 1000000, RRD_ALGORITHM_INCREMENTAL);
rrdlabels_add(p->st_HypervisorProcessorTotal->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
p->st_HypervisorProcessor = rrdset_create_localhost(
"vm_cpu_usage_by_run_context",
windows_shared_buffer,
NULL,
HYPERV,
HYPERV ".vm_cpu_usage_by_run_context",
"VM CPU usage by run context",
"percentage",
_COMMON_PLUGIN_NAME,
_COMMON_PLUGIN_MODULE_NAME,
NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_CPU_USAGE_BY_RUN_CONTEXT,
update_every,
RRDSET_TYPE_STACKED);
p->rd_GuestRunTime =
rrddim_add(p->st_HypervisorProcessor, "guest", NULL, 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
rrddim_add(p->st_HypervisorProcessor, "guest", NULL, 1, 1000000, RRD_ALGORITHM_INCREMENTAL);
p->rd_HypervisorRunTime =
rrddim_add(p->st_HypervisorProcessor, "hypervisor", NULL, -1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
rrddim_add(p->st_HypervisorProcessor, "hypervisor", NULL, 1, 1000000, RRD_ALGORITHM_INCREMENTAL);
p->rd_RemoteRunTime =
rrddim_add(p->st_HypervisorProcessor, "remote", NULL, -1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
rrddim_add(p->st_HypervisorProcessor, "remote", NULL, 1, 1000000, RRD_ALGORITHM_INCREMENTAL);
rrdlabels_add(p->st_HypervisorProcessor->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
}
SETP_DIM_VALUE(st_HypervisorProcessor, GuestRunTime);
SETP_DIM_VALUE(st_HypervisorProcessor, HypervisorRunTime);
SETP_DIM_VALUE(st_HypervisorProcessor, RemoteRunTime);
rrdset_done(p->st_HypervisorProcessor);
p->GuestRunTime_total += (collected_number)p->GuestRunTime.current.Data;
p->HypervisorRunTime_total += (collected_number)p->HypervisorRunTime.current.Data;
p->RemoteRunTime_total += (collected_number)p->RemoteRunTime.current.Data;
p->TotalRunTime_total += (collected_number)p->TotalRunTime.current.Data;
}
{
struct hypervisor_processor *p;
dfe_start_read(item->instance, p) {
rrddim_set_by_pointer(p->st_HypervisorProcessor, p->rd_HypervisorRunTime, (collected_number) p->HypervisorRunTime_total);
rrddim_set_by_pointer(p->st_HypervisorProcessor, p->rd_GuestRunTime, (collected_number) p->GuestRunTime_total);
rrddim_set_by_pointer(p->st_HypervisorProcessor, p->rd_RemoteRunTime, (collected_number) p->RemoteRunTime_total);
rrdset_done(p->st_HypervisorProcessor);
rrddim_set_by_pointer(p->st_HypervisorProcessorTotal, p->rd_TotalRunTime, (collected_number) p->TotalRunTime_total);
rrdset_done(p->st_HypervisorProcessorTotal);
p->GuestRunTime_total = 0;
p->HypervisorRunTime_total = 0;
p->RemoteRunTime_total = 0;
p->TotalRunTime_total = 0;
}
dfe_done(p);
}
return true;
}