From: Paul Cuzner Date: Tue, 11 Jul 2017 01:17:52 +0000 (+1200) Subject: common/osd: fixes to support intelcas and nvme OSD/journals X-Git-Tag: v1.0~44^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=ca150d51720aa0faeb2a543acaa75ca3d20f2415;p=cephmetrics.git common/osd: fixes to support intelcas and nvme OSD/journals --- diff --git a/collectors/common.py b/collectors/common.py index 24b1af0..c9c4432 100644 --- a/collectors/common.py +++ b/collectors/common.py @@ -192,6 +192,7 @@ class Disk(object): self._name = device_name self._path_name = path_name + self._base_dev = Disk.get_base_dev(device_name) self.osd_id = osd_id self.rotational = self._get_rota() @@ -204,10 +205,10 @@ class Disk(object): self.refresh() def _get_size(self): - return int(fread("/sys/block/{}/size".format(self._name))) * 512 + return int(fread("/sys/block/{}/size".format(self._base_dev))) * 512 def _get_rota(self): - return int(fread("/sys/block/{}/queue/rotational".format(self._name))) + return int(fread("/sys/block/{}/queue/rotational".format(self._base_dev))) def _get_fssize(self): s = statvfs("{}/whoami".format(self._path_name)) @@ -222,14 +223,20 @@ class Disk(object): self.fs_size, self.fs_used, self.fs_percent_used = self._get_fssize() @staticmethod - def get_real_dev(dev_name): - # for nvme and intelcas devices, just use the device name as is, but - # for sdX type devices, strip of the partition id - if dev_name.startswith(('nvme', 'intelcas')): + def get_base_dev(dev_name): + + # for intelcas devices, just use the device name as is + if dev_name.startswith('intelcas'): device = dev_name + elif dev_name.startswith('nvme'): + if 'p' in dev_name: + device = dev_name[:(dev_name.index('p'))] + else: + device = dev_name else: # default strip any numeric ie. sdaa1 -> sdaa device = filter(lambda ch: ch.isalpha(), dev_name) + return device diff --git a/collectors/osd.py b/collectors/osd.py index c835304..829f2de 100644 --- a/collectors/osd.py +++ b/collectors/osd.py @@ -135,12 +135,12 @@ class OSDs(BaseCollector): if dirs.issuperset(osd_indicators): osd_id = path_name.split('-')[-1] - osd_device = Disk.get_real_dev(dev_path.split('/')[-1]) + osd_device = dev_path.split('/')[-1] if osd_device not in self.osd: self.osd[osd_device] = Disk(osd_device, - path_name, - osd_id) + path_name=path_name, + osd_id=osd_id) self.dev_lookup[osd_device] = 'osd' if osd_id not in self.osd: @@ -151,10 +151,12 @@ class OSDs(BaseCollector): if os.path.exists(journal_link): # this is a filestore based OSD jrnl_path = os.path.realpath(journal_link) - jrnl_dev = Disk.get_real_dev(jrnl_path.split('/')[-1]) + jrnl_dev = jrnl_path.split('/')[-1] if jrnl_dev not in self.osd: - self.jrnl[jrnl_dev] = Disk(jrnl_dev, osd_id=osd_id) + self.jrnl[jrnl_dev] = Disk(jrnl_dev, + osd_id=osd_id) + self.dev_lookup[jrnl_dev] = 'jrnl' else: