#!/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.

# example output

factory_settings["lvm_lvs_default_levels"] = {
    "levels_data": (80.0, 90.0),
    "levels_meta": (80.0, 90.0),
}

LvmLvsEntry = collections.namedtuple(  # pylint: disable=collections-namedtuple-call
    "LvmLvsEntry", ["data", "meta"]
)


def parse_lvm_lvs(info):
    possible_items = {"%s/%s" % (line[1], line[4]) for line in info if line[4] != ""}

    parsed = {}
    for line in info:
        item = "%s/%s" % (line[1], line[0])
        if item not in possible_items:
            continue

        try:
            parsed[item] = LvmLvsEntry(data=float(line[6]), meta=float(line[7]))
        except (IndexError, ValueError):
            pass
    return parsed


@get_parsed_item_data
def check_lvm_lvs(item, params, entry):
    yield check_levels(
        entry.data,
        "data_usage",
        params["levels_data"],
        human_readable_func=get_percent_human_readable,
        infoname="Data usage",
    )
    yield check_levels(
        entry.meta,
        "meta_usage",
        params["levels_meta"],
        human_readable_func=get_percent_human_readable,
        infoname="Meta usage",
    )


check_info["lvm_lvs"] = {
    "parse_function": parse_lvm_lvs,
    "inventory_function": discover(),
    "check_function": check_lvm_lvs,
    "service_description": "LVM LV Pool %s",
    "has_perfdata": True,
    "default_levels_variable": "lvm_lvs_default_levels",
    "group": "lvm_lvs_pools",
}
