def test_metrics_without_hostaccess(): boot_time = EPOCH + datetime.timedelta(seconds=60) disk = mock.Mock() disk.diskPath = '/boot' disk.capacity = 100 disk.freeSpace = 50 collect_only = { 'vms': True, 'vmguests': True, 'datastores': False, 'hosts': False, 'snapshots': False, } collector = VmwareCollector( '127.0.0.1', 'root', 'password', collect_only, ) metrics = collector._create_metric_containers() collector.content = _succeed(mock.Mock()) collector.__dict__['host_labels'] = _succeed({'': []}) with mock.patch.object(collector, 'batch_fetch_properties') as batch_fetch_properties: batch_fetch_properties.return_value = _succeed({ 'vm-1': { 'name': 'vm-x', 'runtime.host': vim.ManagedObject('notfound:1'), 'runtime.powerState': 'poweredOn', 'summary.config.numCpu': 1, 'summary.config.memorySizeMB': 1024, 'runtime.bootTime': boot_time, 'guest.disk': [disk], 'guest.toolsStatus': 'toolsOk', 'guest.toolsVersion': '10336', 'guest.toolsVersionStatus2': 'guestToolsUnmanaged', } }) assert collector.vm_labels.result == {'vm-1': ['vm-x']} yield collector._vmware_get_vms(metrics) # 113 AssertionError {'partition': '/boot'} vs {'host_name': '/boot'} assert metrics['vmware_vm_guest_disk_capacity'].samples[0][1] == { 'vm_name': 'vm-x', 'partition': '/boot', 'host_name': 'n/a', 'cluster_name': 'n/a', 'dc_name': 'n/a', } # Fail due to expected labels ['vm-1', 'host-1', 'dc', 'cluster-1'] # but found ['vm-1'] assert metrics['vmware_vm_power_state'].samples[0][1] == { 'vm_name': 'vm-x', 'host_name': 'n/a', 'cluster_name': 'n/a', 'dc_name': 'n/a', }
def test_no_error_onempty_vms(): collect_only = { 'vms': True, 'vmguests': True, 'datastores': False, 'hosts': False, 'snapshots': False, } collector = VmwareCollector( '127.0.0.1', 'root', 'password', collect_only, ignore_ssl=True, ) metrics = collector._create_metric_containers() metric_1 = mock.Mock() metric_1.id.counterId = 10 metric_1.value = [9] metric_2 = mock.Mock() metric_2.id.counterId = 1 metric_2.value = [1] ent_1 = mock.Mock() ent_1.value = [metric_1, metric_2] ent_1.entity = vim.ManagedObject('vm:1') content = mock.Mock() content.perfManager.QueryStats.return_value = [ent_1] collector.content = _succeed(content) collector.__dict__['counter_ids'] = _succeed({ 'cpu.ready.summation': 1, 'cpu.maxlimited.summation': 2, 'cpu.usage.average': 3, 'cpu.usagemhz.average': 4, 'disk.usage.average': 5, 'disk.read.average': 6, 'disk.write.average': 7, 'mem.usage.average': 8, 'net.received.average': 9, 'net.transmitted.average': 10, }) collector.__dict__['vm_labels'] = _succeed({'': []}) collector.__dict__['vm_inventory'] = _succeed({'': {}}) # Try to test for querySpec=[] # threads.deferToThread(content.perfManager.QueryStats, querySpec=specs), # TypeError Required field "querySpec" not provided (not @optional) yield collector._vmware_get_vm_perf_manager_metrics(metrics) assert metrics['vmware_vm_power_state'].samples == []
def test_add_filter(service_instance, vcenter_api_client): obj = vim.ManagedObject(moId="moid") filters = ["latest-page"] vcenter_api_client.add_filter(obj, filters) property_collector = service_instance.content.propertyCollector property_collector.CreateFilter.assert_called_once() filter_spec = property_collector.CreateFilter.call_args[0][0] assert filter_spec.objectSet[0].obj == obj assert filter_spec.propSet[0].pathSet == ["latest-page"] assert filter_spec is not None
def test_collect_vm_perf(): collect_only = { 'vms': True, 'vmguests': True, 'datastores': True, 'hosts': True, 'snapshots': True, } collector = VmwareCollector( '127.0.0.1', 'root', 'password', collect_only, ) metrics = collector._create_metric_containers() metric_1 = mock.Mock() metric_1.id.counterId = 10 metric_1.value = [9] metric_2 = mock.Mock() metric_2.id.counterId = 1 metric_2.value = [1] ent_1 = mock.Mock() ent_1.value = [metric_1, metric_2] ent_1.entity = vim.ManagedObject('vm:1') content = mock.Mock() content.perfManager.QueryStats.return_value = [ent_1] collector.content = _succeed(content) collector.__dict__['counter_ids'] = _succeed({ 'cpu.ready.summation': 1, 'cpu.maxlimited.summation': 2, 'cpu.usage.average': 3, 'cpu.usagemhz.average': 4, 'disk.usage.average': 5, 'disk.read.average': 6, 'disk.write.average': 7, 'mem.usage.average': 8, 'net.received.average': 9, 'net.transmitted.average': 10, }) collector.__dict__['vm_labels'] = _succeed({ 'vm:1': ['vm-1', 'host-1', 'dc', 'cluster-1'], }) collector.__dict__['vm_inventory'] = _succeed({ 'vm:1': { 'name': 'vm-1', 'obj': vim.ManagedObject('vm-1'), 'runtime.powerState': 'poweredOn', }, 'vm:2': { 'name': 'vm-2', 'obj': vim.ManagedObject('vm-2'), 'runtime.powerState': 'poweredOff', }, }) yield collector._vmware_get_vm_perf_manager_metrics(metrics) # General VM metrics assert metrics['vmware_vm_net_transmitted_average'].samples[0][1] == { 'vm_name': 'vm-1', 'host_name': 'host-1', 'cluster_name': 'cluster-1', 'dc_name': 'dc', } assert metrics['vmware_vm_net_transmitted_average'].samples[0][2] == 9.0
def test_collect_vms(): boot_time = EPOCH + datetime.timedelta(seconds=60) snapshot_1 = mock.Mock() snapshot_1.createTime = EPOCH + datetime.timedelta(seconds=60) snapshot_1.name = 'snapshot_1' snapshot_1.childSnapshotList = [] snapshot_2 = mock.Mock() snapshot_2.createTime = EPOCH + datetime.timedelta(seconds=120) snapshot_2.name = 'snapshot_2' snapshot_2.childSnapshotList = [snapshot_1] snapshot = mock.Mock() snapshot.rootSnapshotList = [snapshot_2] disk = mock.Mock() disk.diskPath = '/boot' disk.capacity = 100 disk.freeSpace = 50 collect_only = { 'vms': True, 'vmguests': True, 'datastores': True, 'hosts': True, 'snapshots': True, } # Test runtime.host not found collector = VmwareCollector( '127.0.0.1', 'root', 'password', collect_only, ) collector.content = _succeed(mock.Mock()) collector.__dict__['host_labels'] = _succeed({'': []}) with mock.patch.object(collector, 'batch_fetch_properties') as batch_fetch_properties: batch_fetch_properties.return_value = _succeed({ 'vm-1': { 'name': 'vm-1', 'runtime.host': vim.ManagedObject('notfound:1'), 'runtime.powerState': 'poweredOn', 'summary.config.numCpu': 1, 'summary.config.memorySizeMB': 1024, 'runtime.bootTime': boot_time, 'snapshot': snapshot, 'guest.disk': [disk], 'guest.toolsStatus': 'toolsOk', 'guest.toolsVersion': '10336', 'guest.toolsVersionStatus2': 'guestToolsUnmanaged', } }) assert collector.vm_labels.result == {'vm-1': ['vm-1']} # Reset variables collector = VmwareCollector( '127.0.0.1', 'root', 'password', collect_only, ) collector.content = _succeed(mock.Mock()) collector.__dict__['host_labels'] = _succeed({ 'host-1': ['host-1', 'dc', 'cluster-1'], }) metrics = collector._create_metric_containers() with mock.patch.object(collector, 'batch_fetch_properties') as batch_fetch_properties: batch_fetch_properties.return_value = _succeed({ 'vm-1': { 'name': 'vm-1', 'runtime.host': vim.ManagedObject('host-1'), 'runtime.powerState': 'poweredOn', 'summary.config.numCpu': 1, 'summary.config.memorySizeMB': 1024, 'runtime.bootTime': boot_time, 'snapshot': snapshot, 'guest.disk': [disk], 'guest.toolsStatus': 'toolsOk', 'guest.toolsVersion': '10336', 'guest.toolsVersionStatus2': 'guestToolsUnmanaged', }, 'vm-2': { 'name': 'vm-2', 'runtime.powerState': 'poweredOff', 'summary.config.numCpu': 1, 'summary.config.memorySizeMB': 1024, 'runtime.bootTime': boot_time, 'snapshot': snapshot, 'guest.disk': [disk], 'guest.toolsStatus': 'toolsOk', 'guest.toolsVersion': '10336', 'guest.toolsVersionStatus2': 'guestToolsUnmanaged', }, 'vm-3': { 'name': 'vm-3', 'runtime.host': vim.ManagedObject('host-1'), 'runtime.powerState': 'poweredOff', 'summary.config.numCpu': 1, 'summary.config.memorySizeMB': 1024, 'runtime.bootTime': boot_time, 'snapshot': snapshot, 'guest.disk': [disk], 'guest.toolsStatus': 'toolsOk', 'guest.toolsVersion': '10336', 'guest.toolsVersionStatus2': 'guestToolsUnmanaged', }, }) yield collector._vmware_get_vms(metrics) assert _check_properties(batch_fetch_properties.call_args[0][1]) assert collector.vm_labels.result == { 'vm-1': ['vm-1', 'host-1', 'dc', 'cluster-1'], 'vm-2': ['vm-2'], 'vm-3': ['vm-3', 'host-1', 'dc', 'cluster-1'], } # Assert that vm-3 skipped #69/#70 assert metrics['vmware_vm_power_state'].samples[1][1] == { 'vm_name': 'vm-3', 'host_name': 'host-1', 'cluster_name': 'cluster-1', 'dc_name': 'dc', } # General VM metrics assert metrics['vmware_vm_power_state'].samples[0][1] == { 'vm_name': 'vm-1', 'host_name': 'host-1', 'cluster_name': 'cluster-1', 'dc_name': 'dc', } assert metrics['vmware_vm_power_state'].samples[0][2] == 1.0 assert metrics['vmware_vm_boot_timestamp_seconds'].samples[0][1] == { 'vm_name': 'vm-1', 'host_name': 'host-1', 'cluster_name': 'cluster-1', 'dc_name': 'dc', } assert metrics['vmware_vm_boot_timestamp_seconds'].samples[0][2] == 60 # Disk info (vmguest) assert metrics['vmware_vm_guest_disk_capacity'].samples[0][1] == { 'vm_name': 'vm-1', 'host_name': 'host-1', 'cluster_name': 'cluster-1', 'dc_name': 'dc', 'partition': '/boot', } assert metrics['vmware_vm_guest_disk_capacity'].samples[0][2] == 100 # VM tools info (vmguest) assert metrics['vmware_vm_guest_tools_running_status'].samples[0][1] == { 'vm_name': 'vm-1', 'host_name': 'host-1', 'cluster_name': 'cluster-1', 'dc_name': 'dc', 'tools_status': 'toolsOk', } assert metrics['vmware_vm_guest_tools_running_status'].samples[0][2] == 1.0 assert metrics['vmware_vm_guest_tools_version'].samples[0][1] == { 'vm_name': 'vm-1', 'host_name': 'host-1', 'cluster_name': 'cluster-1', 'dc_name': 'dc', 'tools_version': '10336', } assert metrics['vmware_vm_guest_tools_version'].samples[0][2] == 1.0 assert metrics['vmware_vm_guest_tools_version_status'].samples[0][1] == { 'vm_name': 'vm-1', 'host_name': 'host-1', 'cluster_name': 'cluster-1', 'dc_name': 'dc', 'tools_version_status': 'guestToolsUnmanaged', } assert metrics['vmware_vm_guest_tools_version_status'].samples[0][2] == 1.0 # Snapshots assert metrics['vmware_vm_snapshots'].samples[0][1] == { 'vm_name': 'vm-1', 'host_name': 'host-1', 'cluster_name': 'cluster-1', 'dc_name': 'dc', } assert metrics['vmware_vm_snapshots'].samples[0][2] == 2 assert metrics['vmware_vm_snapshot_timestamp_seconds'].samples[0][1] == { 'vm_name': 'vm-1', 'host_name': 'host-1', 'cluster_name': 'cluster-1', 'dc_name': 'dc', 'vm_snapshot_name': 'snapshot_2', } assert metrics['vmware_vm_snapshot_timestamp_seconds'].samples[0][2] == 120 assert metrics['vmware_vm_snapshot_timestamp_seconds'].samples[1][1] == { 'vm_name': 'vm-1', 'host_name': 'host-1', 'cluster_name': 'cluster-1', 'dc_name': 'dc', 'vm_snapshot_name': 'snapshot_1', } assert metrics['vmware_vm_snapshot_timestamp_seconds'].samples[1][2] == 60 # Max Memory assert metrics['vmware_vm_memory_max'].samples[0][1] == { 'vm_name': 'vm-1', 'host_name': 'host-1', 'cluster_name': 'cluster-1', 'dc_name': 'dc', } assert metrics['vmware_vm_memory_max'].samples[0][2] == 1024
def test_collect_host_perf(): collect_only = { 'vms': False, 'vmguests': False, 'datastores': False, 'hosts': True, 'snapshots': False, } collector = VmwareCollector( '127.0.0.1', 'root', 'password', collect_only, 5000, ) metrics = collector._create_metric_containers() metric_1 = mock.Mock() metric_1.id.counterId = 2 metric_1.value = [3600] metric_2 = mock.Mock() metric_2.id.counterId = 6 metric_2.value = [3700] metric_3 = mock.Mock() metric_3.id.counterId = 17 metric_3.value = [1024] metric_4 = mock.Mock() metric_4.id.counterId = 20 metric_4.value = [10] ent_1 = mock.Mock() ent_1.value = [metric_1, metric_2, metric_3, metric_4] ent_1.entity = vim.ManagedObject('host:1') content = mock.Mock() content.perfManager.QueryStats.return_value = [ent_1] collector.content = _succeed(content) collector.__dict__['counter_ids'] = _succeed({ 'cpu.costop.summation': 1, 'cpu.demand.average': 2, 'cpu.idle.summation': 3, 'cpu.ready.summation': 4, 'cpu.swapwait.summation': 5, 'cpu.usage.average': 6, 'cpu.usagemhz.average': 7, 'cpu.used.summation': 8, 'disk.read.average': 9, 'disk.write.average': 10, 'mem.active.average': 11, 'mem.latency.average': 12, 'mem.swapin.average': 13, 'mem.swapinRate.average': 14, 'mem.swapout.average': 15, 'mem.swapoutRate.average': 16, 'mem.vmmemctl.average': 17, 'net.bytesRx.average': 18, 'net.bytesTx.average': 19, 'net.droppedRx.summation': 20, 'net.droppedTx.summation': 21, 'net.errorsRx.summation': 22, 'net.errorsTx.summation': 23, 'net.usage.average': 24, }) collector.__dict__['host_labels'] = _succeed({ 'host:1': ['host-1', 'dc', 'cluster-1'], }) collector.__dict__['host_system_inventory'] = _succeed({ 'host:1': { 'name': 'host-1', 'obj': vim.ManagedObject('host-1'), 'runtime.powerState': 'poweredOn', }, }) yield collector._vmware_get_host_perf_manager_metrics(metrics) # General Host metrics assert metrics['vmware_host_cpu_demand_average'].samples[0][1] == { 'host_name': 'host-1', 'cluster_name': 'cluster-1', 'dc_name': 'dc', } assert metrics['vmware_host_cpu_demand_average'].samples[0][2] == 3600.0 assert metrics['vmware_host_cpu_usage_average'].samples[0][1] == { 'host_name': 'host-1', 'cluster_name': 'cluster-1', 'dc_name': 'dc', } assert metrics['vmware_host_cpu_usage_average'].samples[0][2] == 3700.0 assert metrics['vmware_host_mem_vmmemctl_average'].samples[0][1] == { 'host_name': 'host-1', 'cluster_name': 'cluster-1', 'dc_name': 'dc', } assert metrics['vmware_host_mem_vmmemctl_average'].samples[0][2] == 1024.0 assert metrics['vmware_host_net_droppedRx_summation'].samples[0][1] == { 'host_name': 'host-1', 'cluster_name': 'cluster-1', 'dc_name': 'dc', } assert metrics['vmware_host_net_droppedRx_summation'].samples[0][2] == 10.0
def test_collect_vm_perf(): collect_only = { 'vms': True, 'vmguests': True, 'datastores': True, 'hosts': True, 'snapshots': True, } collector = VmwareCollector( '127.0.0.1', 'root', 'password', collect_only, 5000, ) metrics = collector._create_metric_containers() metric_1 = mock.Mock() metric_1.id.counterId = 10 metric_1.value = [9] metric_2 = mock.Mock() metric_2.id.counterId = 1 metric_2.value = [1] metric_3 = mock.Mock() metric_3.id.counterId = 13 metric_3.value = [618] metric_4 = mock.Mock() metric_4.id.counterId = 18 metric_4.value = [5] ent_1 = mock.Mock() ent_1.value = [metric_1, metric_2, metric_3, metric_4] ent_1.entity = vim.ManagedObject('vm:1') content = mock.Mock() content.perfManager.QueryStats.return_value = [ent_1] collector.content = _succeed(content) collector.__dict__['counter_ids'] = _succeed({ 'cpu.ready.summation': 1, 'cpu.maxlimited.summation': 2, 'cpu.usage.average': 3, 'cpu.usagemhz.average': 4, 'disk.usage.average': 5, 'disk.read.average': 6, 'disk.write.average': 7, 'mem.usage.average': 8, 'net.received.average': 9, 'net.transmitted.average': 10, 'cpu.costop.summation': 11, 'cpu.idle.summation': 12, 'cpu.demand.average': 13, 'mem.consumed.average': 14, 'mem.active.average': 15, 'mem.swapped.average': 16, 'mem.vmmemctl.average': 17, 'disk.maxTotalLatency.latest': 18, 'net.multicastRx.summation': 19, 'net.multicastTx.summation': 20, 'net.broadcastTx.summation': 21, 'net.broadcastRx.summation': 22, 'net.droppedRx.summation': 23, 'net.droppedTx.summation': 24, }) collector.__dict__['vm_labels'] = _succeed({ 'vm:1': ['vm-1', 'host-1', 'dc', 'cluster-1'], }) collector.__dict__['vm_inventory'] = _succeed({ 'vm:1': { 'name': 'vm-1', 'obj': vim.ManagedObject('vm-1'), 'runtime.powerState': 'poweredOn', }, 'vm:2': { 'name': 'vm-2', 'obj': vim.ManagedObject('vm-2'), 'runtime.powerState': 'poweredOff', }, }) yield collector._vmware_get_vm_perf_manager_metrics(metrics) # General VM metrics assert metrics['vmware_vm_net_transmitted_average'].samples[0][1] == { 'vm_name': 'vm-1', 'host_name': 'host-1', 'cluster_name': 'cluster-1', 'dc_name': 'dc', } assert metrics['vmware_vm_net_transmitted_average'].samples[0][2] == 9.0 assert metrics['vmware_vm_cpu_demand_average'].samples[0][1] == { 'vm_name': 'vm-1', 'host_name': 'host-1', 'cluster_name': 'cluster-1', 'dc_name': 'dc', } assert metrics['vmware_vm_cpu_demand_average'].samples[0][2] == 618.0 assert metrics['vmware_vm_disk_maxTotalLatency_latest'].samples[0][1] == { 'vm_name': 'vm-1', 'host_name': 'host-1', 'cluster_name': 'cluster-1', 'dc_name': 'dc', } assert metrics['vmware_vm_disk_maxTotalLatency_latest'].samples[0][ 2] == 5.0
def test_no_error_onempty_vms(): collect_only = { 'vms': True, 'vmguests': True, 'datastores': False, 'hosts': False, 'snapshots': False, } collector = VmwareCollector( '127.0.0.1', 'root', 'password', collect_only, 5000, ignore_ssl=True, ) metrics = collector._create_metric_containers() metric_1 = mock.Mock() metric_1.id.counterId = 10 metric_1.value = [9] metric_2 = mock.Mock() metric_2.id.counterId = 1 metric_2.value = [1] metric_3 = mock.Mock() metric_3.id.counterId = 13 metric_3.value = [618] metric_4 = mock.Mock() metric_4.id.counterId = 18 metric_4.value = [5] ent_1 = mock.Mock() ent_1.value = [metric_1, metric_2, metric_3, metric_4] ent_1.entity = vim.ManagedObject('vm:1') content = mock.Mock() content.perfManager.QueryStats.return_value = [ent_1] collector.content = _succeed(content) collector.__dict__['counter_ids'] = _succeed({ 'cpu.ready.summation': 1, 'cpu.maxlimited.summation': 2, 'cpu.usage.average': 3, 'cpu.usagemhz.average': 4, 'disk.usage.average': 5, 'disk.read.average': 6, 'disk.write.average': 7, 'mem.usage.average': 8, 'net.received.average': 9, 'net.transmitted.average': 10, 'cpu.costop.summation': 11, 'cpu.idle.summation': 12, 'cpu.demand.average': 13, 'mem.consumed.average': 14, 'mem.active.average': 15, 'mem.swapped.average': 16, 'mem.vmmemctl.average': 17, 'disk.maxTotalLatency.latest': 18, 'net.multicastRx.summation': 19, 'net.multicastTx.summation': 20, 'net.broadcastTx.summation': 21, 'net.broadcastRx.summation': 22, 'net.droppedRx.summation': 23, 'net.droppedTx.summation': 24, }) collector.__dict__['vm_labels'] = _succeed({'': []}) collector.__dict__['vm_inventory'] = _succeed({'': {}}) # Try to test for querySpec=[] # threads.deferToThread(content.perfManager.QueryStats, querySpec=specs), # TypeError Required field "querySpec" not provided (not @optional) yield collector._vmware_get_vm_perf_manager_metrics(metrics) assert metrics['vmware_vm_power_state'].samples == []
def test_collect_vms(batch_fetch_properties): content = mock.Mock() boot_time = EPOCH + datetime.timedelta(seconds=60) snapshot_1 = mock.Mock() snapshot_1.createTime = EPOCH + datetime.timedelta(seconds=60) snapshot_1.name = 'snapshot_1' snapshot_1.childSnapshotList = [] snapshot_2 = mock.Mock() snapshot_2.createTime = EPOCH + datetime.timedelta(seconds=120) snapshot_2.name = 'snapshot_2' snapshot_2.childSnapshotList = [snapshot_1] snapshot = mock.Mock() snapshot.rootSnapshotList = [snapshot_2] disk = mock.Mock() disk.diskPath = '/boot' disk.capacity = 100 disk.freeSpace = 50 batch_fetch_properties.return_value = { 'vm-1': { 'name': 'vm-1', 'runtime.host': vim.ManagedObject('host-1'), 'runtime.powerState': 'poweredOn', 'summary.config.numCpu': 1, 'runtime.bootTime': boot_time, 'snapshot': snapshot, 'guest.disk': [disk], } } collect_only = { 'vms': True, 'vmguests': True, 'datastores': True, 'hosts': True, 'snapshots': True, } collector = VmwareCollector( '127.0.0.1', 'root', 'password', collect_only, ) inventory = { 'host-1': { 'name': 'host-1', 'dc': 'dc', 'cluster': 'cluster-1', } } metrics = collector._create_metric_containers() collector._labels = {} with mock.patch.object(collector, '_vmware_get_vm_perf_manager_metrics'): yield collector._vmware_get_vms(content, metrics, inventory) assert _check_properties(batch_fetch_properties.call_args[0][2]) # General VM metrics assert metrics['vmware_vm_power_state'].samples[0][1] == { 'vm_name': 'vm-1', 'host_name': 'host-1', 'cluster_name': 'cluster-1', 'dc_name': 'dc', } assert metrics['vmware_vm_power_state'].samples[0][2] == 1.0 assert metrics['vmware_vm_boot_timestamp_seconds'].samples[0][1] == { 'vm_name': 'vm-1', 'host_name': 'host-1', 'cluster_name': 'cluster-1', 'dc_name': 'dc', } assert metrics['vmware_vm_boot_timestamp_seconds'].samples[0][2] == 60 # Disk info (vmguest) assert metrics['vmware_vm_guest_disk_capacity'].samples[0][1] == { 'vm_name': 'vm-1', 'host_name': 'host-1', 'cluster_name': 'cluster-1', 'dc_name': 'dc', 'partition': '/boot', } assert metrics['vmware_vm_guest_disk_capacity'].samples[0][2] == 100 # Snapshots assert metrics['vmware_vm_snapshots'].samples[0][1] == { 'vm_name': 'vm-1', 'host_name': 'host-1', 'cluster_name': 'cluster-1', 'dc_name': 'dc', } assert metrics['vmware_vm_snapshots'].samples[0][2] == 2 assert metrics['vmware_vm_snapshot_timestamp_seconds'].samples[0][1] == { 'vm_name': 'vm-1', 'host_name': 'host-1', 'cluster_name': 'cluster-1', 'dc_name': 'dc', 'vm_snapshot_name': 'snapshot_2', } assert metrics['vmware_vm_snapshot_timestamp_seconds'].samples[0][2] == 120 assert metrics['vmware_vm_snapshot_timestamp_seconds'].samples[1][1] == { 'vm_name': 'vm-1', 'host_name': 'host-1', 'cluster_name': 'cluster-1', 'dc_name': 'dc', 'vm_snapshot_name': 'snapshot_1', } assert metrics['vmware_vm_snapshot_timestamp_seconds'].samples[1][2] == 60