def test_missing_brw_stats(self): """Catch a race where brw_stats hasn't been created yet.""" os.makedirs(os.path.join(self.test_root, "sys/kernel/debug/lustre")) f = open(os.path.join(self.test_root, "proc/modules"), "w+") f.write("obdfilter 265823 4 - Live 0xffffffffa06b5000") f.close() f = open(os.path.join(self.test_root, "sys/kernel/debug/lustre/devices"), "w+") f.write(" 2 UP obdfilter test-OST0000 test-OST0000_UUID 5") f.close() # Create dummy nodestats files f = open(os.path.join(self.test_root, "proc/meminfo"), "w") f.write("MemTotal: 3991680 kB\n") f.close() f = open(os.path.join(self.test_root, "proc/stat"), "w") f.write("cpu 24601 2 33757 3471279 10892 6 676 0 0\n") f.close() audit = LocalAudit() assert ObdfilterAudit in audit.audit_classes() # this shouldn't raise a runtime error audit.metrics()
def test_loaded_module_no_stats(self): """Loaded modules with no stats files should be skipped.""" # An easily-repeatable example of when this happens is when # lnet.ko is loaded but LNet is stopped. os.makedirs(os.path.join(self.test_root, "proc/sys/lnet")) f = open(os.path.join(self.test_root, "proc/modules"), "w+") f.write(""" lnet 233888 3 ptlrpc,ksocklnd,obdclass, Live 0xffffffffa076e000 """) f.close() # Create dummy nodestats files f = open(os.path.join(self.test_root, "proc/meminfo"), "w") f.write("MemTotal: 3991680 kB\n") f.close() f = open(os.path.join(self.test_root, "proc/stat"), "w") f.write("cpu 24601 2 33757 3471279 10892 6 676 0 0\n") f.close() audit = LocalAudit() assert LnetAudit in audit.audit_classes() # this shouldn't raise a runtime error audit.metrics()
def test_no_lustre_modules_loaded(self): """Audit shouldn't fail if there are no Lustre modules loaded.""" # Create a modules file with no Lustre modules in it. f = open(os.path.join(self.test_root, "proc/modules"), "w+") f.write(""" lockd 74268 1 nfs, Live 0xffffffffa0105000 fscache 46761 1 nfs, Live 0xffffffffa00ef000 (T) nfs_acl 2613 1 nfs, Live 0xffffffffa00e9000 auth_rpcgss 44925 1 nfs, Live 0xffffffffa00d6000 sunrpc 242277 18 nfs,lockd,nfs_acl,auth_rpcgss, Live 0xffffffffa0082000 sd_mod 38196 6 - Live 0xffffffffa006b000 crc_t10dif 1507 1 sd_mod, Live 0xffffffffa0065000 e1000 167605 0 - Live 0xffffffffa0030000 ahci 40197 5 - Live 0xffffffffa001e000 dm_mod 75539 2 dm_mirror,dm_log, Live 0xffffffffa0000000 """) f.close() # Create dummy nodestats files f = open(os.path.join(self.test_root, "proc/meminfo"), "w") f.write("MemTotal: 3991680 kB\n") f.close() f = open(os.path.join(self.test_root, "proc/stat"), "w") f.write("cpu 24601 2 33757 3471279 10892 6 676 0 0\n") f.close() audit = LocalAudit() # FIXME: this gethostname() should probably be stubbed out import socket self.assertEqual(audit.metrics(), {'raw': {'node': {'hostname': socket.gethostname(), 'cpustats': {'iowait': 10892, 'idle': 3471279, 'total': 3540537, 'user': 24601, 'system': 33763}, 'meminfo': {'MemTotal': 3991680}}}})
def test_oss_metrics(self): """Test that the various OSS metrics are collected and aggregated.""" self.test_root = os.path.join(self.tests, "data/lustre_versions/2.9.58_86_g2383a62/oss") audit = LocalAudit() metrics = audit.metrics()['raw']['lustre'] self.assertEqual(metrics['target']['testfs-OST0000']['filesfree'], 655061) self.assertEqual(metrics['lnet']['recv_count'], 50072) self.assertEqual(len(metrics['target']), 1)
def test_oss_metrics(self): """Test that the various OSS metrics are collected and aggregated.""" self.test_root = os.path.join(self.tests, "data/lustre_versions/2.0.66/oss") audit = LocalAudit() metrics = audit.metrics()['raw']['lustre'] self.assertEqual(metrics['target']['lustre-OST0000']['filesfree'], 127575) self.assertEqual(metrics['lnet']['recv_count'], 547181)
def test_stats(self): """ Test that expected values are provided for certain stats used by the UI. """ self.test_root = os.path.join(self.tests, "data/lustre_versions/2.9.58_86_g2383a62/oss") audit = LocalAudit() metrics = audit.metrics()['raw']['lustre'] self.assertEqual(metrics['target']['testfs-OST0000']['stats']['read_bytes']['units'], "bytes") self.assertEqual(metrics['target']['testfs-OST0000']['stats']['read_bytes']['sum'], 0) self.assertEqual(metrics['target']['testfs-OST0000']['stats']['write_bytes']['count'], 2) self.assertEqual(metrics['target']['testfs-OST0000']['stats']['write_bytes']['sum'], 2468000)
def test_24_oss_metrics(self): """Test that the various OSS metrics are collected and aggregated (2.4+).""" self.test_root = os.path.join(self.tests, "data/lustre_versions/2.5.0/oss") audit = LocalAudit() metrics = audit.metrics()['raw']['lustre'] self.assertEqual(metrics['target']['lustre-OST0000']['filesfree'], 524040) self.assertEqual(metrics['lnet']['recv_count'], 156747) self.assertEqual(len(metrics['target']), 7)
def test_mdsmgs_metrics(self): """ Test that the various MGS/MDS metrics are collected and aggregated. """ self.test_root = os.path.join(self.tests, "data/lustre_versions/2.9.58_86_g2383a62/mds_mgs") audit = LocalAudit() self.add_command(CMD, stdout=lctl_output) metrics = audit.metrics()['raw']['lustre'] self.assertEqual(metrics['target']['testfs-MDT0000']['filesfree'], 4194037) self.assertEqual(metrics['target']['MGS']['num_exports'], 6) self.assertEqual(metrics['lnet']['send_count'], 12868)
def test_mdt_hsm_metrics(self): """ Test that the HSM metrics are collected and aggregated. """ self.test_root = os.path.join(self.tests, "data/lustre_versions/2.9.58_86_g2383a62/mds_mgs") audit = LocalAudit() self.add_command(CMD, stdout=lctl_output) metrics = audit.metrics()['raw']['lustre']['target']['testfs-MDT0000']['hsm'] self.assertEqual(metrics['agents']['idle'], 1) self.assertEqual(metrics['agents']['busy'], 1) self.assertEqual(metrics['agents']['total'], 2) self.assertEqual(metrics['actions']['waiting'], 1) self.assertEqual(metrics['actions']['running'], 1) self.assertEqual(metrics['actions']['succeeded'], 1) self.assertEqual(metrics['actions']['errored'], 0)
def test_stats(self): """ Test that expected values are provided for certain stats used by the UI. """ self.test_root = os.path.join( self.tests, "data/lustre_versions/2.9.58_86_g2383a62/oss") audit = LocalAudit() metrics = audit.metrics()["raw"]["lustre"] self.assertEqual( metrics["target"]["testfs-OST0000"]["stats"]["read_bytes"] ["units"], "bytes") self.assertEqual( metrics["target"]["testfs-OST0000"]["stats"]["read_bytes"]["sum"], 0) self.assertEqual( metrics["target"]["testfs-OST0000"]["stats"]["write_bytes"] ["count"], 2) self.assertEqual( metrics["target"]["testfs-OST0000"]["stats"]["write_bytes"]["sum"], 2468000)
def test_mdt_hsm_metrics(self): """ Test that the HSM metrics are collected and aggregated. """ self.test_root = os.path.join( self.tests, "data/lustre_versions/2.9.58_86_g2383a62/mds_mgs") audit = LocalAudit() self.add_command(CMD, stdout=lctl_output) metrics = audit.metrics( )["raw"]["lustre"]["target"]["testfs-MDT0000"]["hsm"] self.assertEqual(metrics["agents"]["idle"], 1) self.assertEqual(metrics["agents"]["busy"], 1) self.assertEqual(metrics["agents"]["total"], 2) self.assertEqual(metrics["actions"]["waiting"], 1) self.assertEqual(metrics["actions"]["running"], 1) self.assertEqual(metrics["actions"]["succeeded"], 1) self.assertEqual(metrics["actions"]["errored"], 0)