#!/usr/bin/env python3

from subprocess import check_output
from json import loads
import time


nanosecond = time.time_ns()

for line in check_output(['/usr/sbin/smartctl', '--scan', '-d', 'scsi']).splitlines():
    device = line.split()[0].decode()
    smart = loads(check_output(['/usr/sbin/smartctl', '-a', device, '-j']))
    attributes = {
        attribute['name']: attribute['flags']['value']
            for attribute in smart['ata_smart_attributes']['table']
            if int(attribute['id']) in [
                # https://www.backblaze.com/blog/what-smart-stats-indicate-hard-drive-failures/
                5,
                187,
                188,
                197,
                198,
            ]
    }
    attributes_string = ','.join(f'{k}={v}' for k, v in attributes.items())

    print(f"smart_errors,host=${node.name},device={device} {attributes_string} {nanosecond}")