#!/usr/bin/env python3
# Copyright (C) 2019 Checkmk 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.

# This check verifies a given NFS export is registered with mountd.
# Optionally we can add tracking of allowed clients and filesystem ID.

# Agent info
# [['/mirrored/data/recording', '172.0.0.0/255.0.0.0']]


from cmk.base.check_api import LegacyCheckDefinition
from cmk.base.config import check_info

from cmk.agent_based.v2 import StringTable


def inventory_nfsexports(info):
    # reminder to self: inventorize the exported fs, and maybe even the fs id.
    # but do not inventorize the allowed clients unless i'm really sure that
    # it's not bugged for "features" like multiple different option exports of
    # same FS.
    inventory = []
    for line in info:
        # will not inventorize unless there is SOME export at inventory time.
        if line[0].startswith("/"):
            inventory.append((line[0], None))

    return inventory


def check_nfsexports(item, _no_params, info):
    # if the agent returned an empty list then it found entries in /etc/exports
    # but apparently no daemons were running.
    if len(info) == 0:
        return (
            2,
            "exports defined but no exports found in export list. Daemons might not be working",
        )

    # otherwise lets see if our export exists.
    for line in info:
        if item == line[0]:
            return 0, "export is active"

    return 2, "export not found in export list"


def parse_nfsexports(string_table: StringTable) -> StringTable:
    return string_table


check_info["nfsexports"] = LegacyCheckDefinition(
    parse_function=parse_nfsexports,
    service_name="NFS export %s",
    discovery_function=inventory_nfsexports,
    check_function=check_nfsexports,
)
