diff --git a/Script/cs/Tools/ConfigParser.py b/Script/cs/Tools/ConfigParser.py index 6d642ed73374e4e19f79863c1ede03a74b44df51..4ab6910a5dd0dc1c1f11d89d6281af21be52e555 100644 --- a/Script/cs/Tools/ConfigParser.py +++ b/Script/cs/Tools/ConfigParser.py @@ -179,9 +179,22 @@ class ConfigHolder(object): self.ISCpuStatsEnabled = cfg.ISCpuStatsEnabled except AttributeError: pass try: # Publish storage devices I/O stats for ISStorageIoStatsDevices - self.ISStorageIoStatsDevices = [d for d in cfg.ISStorageIoStatsDevices] - except AttributeError: pass - + # psutil.disk_io_counters() returns a dictionary where keys are + # device names + for d in cfg.ISStorageIoStatsDevices: + dd = d + if os.path.islink(d): + # resolve link + dd = os.path.basename( + os.path.abspath( + os.path.join( + os.path.dirname(d), + os.readlink(d)))) + elif os.path.isabs(d): + dd = os.path.basename(d) + self.ISStorageIoStatsDevices.append(dd) + except AttributeError: + print('TINTIN') # METADATA DATABASE diff --git a/UnitTests/ConfigParser_Test.py b/UnitTests/ConfigParser_Test.py index 15067f7ec959baa81abd000168d9c0a284e0f798..309859d0ae8c84e1dd1b767f002ea6229d69b7b4 100644 --- a/UnitTests/ConfigParser_Test.py +++ b/UnitTests/ConfigParser_Test.py @@ -2,6 +2,7 @@ import unittest import os import re import logging +import tempfile if __name__ == '__main__': import sys @@ -235,5 +236,22 @@ class TestConfigHolder(unittest.TestCase): del self.c.__dict__[p] + def test_storage_iostats_devices(self): + with open(os.path.join(TestConfigHolder.config_path, 'minimal.cfg')) as mini: + config = mini.readlines() + with tempfile.TemporaryDirectory() as tmpd: + # modif config and write file + config.append('ISEnabled: True\n') + config.append(f"ISStorageIoStatsDevices: ['sd0', '/dev/sd1', '{tmpd}/linktosd2']\n") + with open(f'{tmpd}/cfg', 'w') as cfgfile: + cfgfile.write(''.join(config)) + # create mock device file and symlink + with open(f'{tmpd}/sd2', 'w'): pass + os.symlink(f'{tmpd}/sd2', f'{tmpd}/linktosd2') + # test + self.c = ConfigParser.ConfigHolder(f'{tmpd}/cfg') + self.assertEqual(self.c.ISStorageIoStatsDevices, ['sd0', 'sd1', 'sd2']) + + if __name__ == '__main__': unittest.main()