#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Copyright (C) 2019 tribe29 GmbH - License: GNU General Public License v2
# This file is part of Checkmk (https://checkmk.com). It is subject to the terms and
# conditions defined in the file COPYING, which is part of this source code package.

# Author: Markus Lengler <ml@lengler-it.de>

# Example outputs from agent:
#
# <<<dmraid>>>
# name   : isw_ebdabbedfh_system
# status : ok
# /dev/sda: isw, "isw_ebdabbedfh", GROUP, ok, 976773166 sectors, data@ 0 Model: WDC WD5002ABYS-5
# /dev/sdb: isw, "isw_ebdabbedfh", GROUP, ok, 976773166 sectors, data@ 0 Model: WDC WD5002ABYS-5


def inventory_dmraid_ldisks(info):
    return [(line[2], None) for line in info if line[0] == "name"]


def inventory_dmraid_pdisks(info):
    return [(line[0].split(":")[0], None) for line in info if line[0].startswith("/dev/sd")]


def check_dmraid_pdisks(item, _no_params, info):
    for line in info:
        if line[0].startswith("/dev/sd"):
            disk = line[0].split(":")[0]
            if disk == item:
                status = line[4].split(",")[0]
                if status == "ok":
                    pos = line.index("Model:")
                    model = " ".join(line[pos + 1 :])
                    return (0, "Online (%s)" % model)
                return (2, "Error on disk!!")
    return (2, "Missing disk!!")


def check_dmraid_ldisks(item, _no_params, info):
    LDISK_FOUND = False
    for line in info:
        if LDISK_FOUND:
            if line[0] == "status":
                status = line[2]
                if status == "ok":
                    return (0, "state is %s" % status)
                return (2, "%s" % status)
        if line[0] == "name" and line[2] == item:
            LDISK_FOUND = True

    return (3, "incomplete data from agent")


check_info["dmraid.ldisks"] = {
    "check_function": check_dmraid_ldisks,
    "inventory_function": inventory_dmraid_ldisks,
    "service_description": "RAID LDisk %s",
}

check_info["dmraid.pdisks"] = {
    "check_function": check_dmraid_pdisks,
    "inventory_function": inventory_dmraid_pdisks,
    "service_description": "RAID PDisk %s",
}
