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

# NOTE: Careful when replacing the *-import below with a more specific import. This can cause
# problems because it might remove variables from the check-context which are necessary for
# resolving legacy discovery results such as [("SUMMARY", "diskstat_default_levels")]. Furthermore,
# it might also remove variables needed for accessing discovery rulesets.
from cmk.base.check_legacy_includes.storeonce import *  # pylint: disable=wildcard-import,unused-wildcard-import

# <<<storeonce_stores:sep(9)>>>
# [1/0]
# Store ID        0
# Name    VM_WinSrv_Store
# Description     Catalyst Store for Windows based Server
# ServiceSet ID   1
# Creation Time UTC       1434446799
# Health Level    1
# Health  OK
# Status  Online
# Version 2
# Number Of Catalyst Items        274
# User Data Stored        1467.568399314
# Size On Disk    604.827284898
# Dedupe Ratio    2.4
# Dedupe Ratio    2.4
# Creation On     2015-06-16T09:26:39Z
# Last Modified   2015-06-16T09:26:39Z
# primaryTransferPolicy   0
# primaryTransferPolicyString     High Bandwidth
# secondaryTransferPolicy 1
# secondaryTransferPolicyString   Low Bandwidth
# userDataSizeLimitBytes  0
# dedupedDataSizeOnDiskLimitBytes 0
# dataJobRetentionDays    90
# inboundCopyJobRetentionDays     90
# outboundCopyJobRetentionDays    90
# supportStorageModeVariableBlockDedupe   true
# supportStorageModeFixedBlockDedupe      true
# supportStorageModeNoDedupe      true
# supportWriteSparse      false
# supportWriteInPlace     false
# supportRawReadWrite     true
# supportMultipleObjectOpeners    true
# supportMultipleObjectWrites     false
# supportCloneExtent      true
# userBytes       1467568399314
# diskBytes       604827284898
# numItems        274
# numDataJobs     2536
# numOriginCopyJobs       0
# numDestinationCopyJobs  0
# Is online       true
# is store encrypted      false
# secure erase mode       0
# secure erase mode description   Secure_Erase_NoPassCount
# isTeamed        false
# teamUUID        0000014DFBB121BB2954110834BAD600
# numTeamMembers  0


def _get_item(data):
    return "ServiceSet %s Store %s" % (data["ServiceSet ID"], data["Name"])


def inventory_storeonce_stores(parsed):
    for values in parsed.values():
        yield _get_item(values), {}


def check_storeonce_stores(item, _no_params, parsed):
    for values in parsed.values():
        if _get_item(values) != item:
            continue

        state = translate_storeonce_status(values["Health Level"])
        yield state, "Status: %s" % values["Status"]

        size = float(values["diskBytes"])
        yield 0, "Size: %s" % get_bytes_human_readable(size), [("data_size", size)]

        if "Dedupe Ratio" in values:
            dedup = float(values["Dedupe Ratio"])
            yield 0, "Dedup ratio: %.2f" % dedup, [("dedup_rate", dedup)]

        description = values.get("Description")
        if description:
            yield 0, "Description: %s" % description


check_info["storeonce_stores"] = {
    "parse_function": parse_storeonce_servicesets,
    "inventory_function": inventory_storeonce_stores,
    "check_function": check_storeonce_stores,
    "service_description": "%s",
    "has_perfdata": True,
}
