# This file is part of the sos project: https://github.com/sosreport/sos
#
# This copyrighted material is made available to anyone wishing to use,
# modify, copy, or redistribute it subject to the terms and conditions of
# version 2 of the GNU General Public License.
#
# See the LICENSE file in the source distribution for further information.

from sos.plugins import Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin
import os


class Nvme(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin):
    """Collect config and system information about NVMe devices"""

    plugin_name = "nvme"
    packages = ('nvme-cli',)

    def get_nvme_devices(self):
        sys_block = os.listdir('/sys/block/')
        return [dev for dev in sys_block if dev.startswith('nvme')]

    def setup(self):
        self.add_copy_spec("/etc/nvme/discovery.conf")
        self.add_cmd_output([
            "nvme list",
            "nvme list-subsys",
        ])
        for dev in self.get_nvme_devices():
            # runs nvme-cli commands
            self.add_cmd_output([
                "smartctl --all /dev/%s" % dev,
                "nvme list-ns /dev/%s" % dev,
                "nvme fw-log /dev/%s" % dev,
                "nvme list-ctrl /dev/%s" % dev,
                "nvme id-ctrl -H /dev/%s" % dev,
                "nvme id-ns -H /dev/%s" % dev,
                "nvme smart-log /dev/%s" % dev,
                "nvme error-log /dev/%s" % dev,
                "nvme show-regs /dev/%s" % dev,
                "nvme get-ns-id /dev/%s" % dev
            ])

# vim: set et ts=4 sw=4 :
