#!/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.aws import *  # pylint: disable=wildcard-import,unused-wildcard-import
from cmk.base.plugins.agent_based.utils.aws import aws_rds_service_item


def parse_aws_rds_summary(info):
    try:
        return {
            aws_rds_service_item(instance["DBInstanceIdentifier"], instance["Region"]): instance
            for instance in parse_aws(info)
        }
    except IndexError:
        return {}


#   .--summary-------------------------------------------------------------.
#   |                                                                      |
#   |           ___ _   _ _ __ ___  _ __ ___   __ _ _ __ _   _             |
#   |          / __| | | | '_ ` _ \| '_ ` _ \ / _` | '__| | | |            |
#   |          \__ \ |_| | | | | | | | | | | | (_| | |  | |_| |            |
#   |          |___/\__,_|_| |_| |_|_| |_| |_|\__,_|_|   \__, |            |
#   |                                                    |___/             |
#   '----------------------------------------------------------------------'


def check_aws_rds_summary(item, params, parsed):
    instances_by_classes = {}
    for instance in parsed.values():
        instance_class = instance["DBInstanceClass"]
        instances_by_classes.setdefault(instance_class, []).append(instance)

    class_infos = []
    for instance_class, instances in instances_by_classes.items():
        class_infos.append("%s: %s" % (instance_class, len(instances)))
    yield 0, ", ".join(class_infos)


check_info["aws_rds_summary"] = {
    "parse_function": parse_aws_rds_summary,
    "inventory_function": discover_single,
    "check_function": check_aws_rds_summary,
    "service_description": "AWS/RDS Summary",
}

# .
#   .--DB status-----------------------------------------------------------.
#   |              ____  ____        _        _                            |
#   |             |  _ \| __ )   ___| |_ __ _| |_ _   _ ___                |
#   |             | | | |  _ \  / __| __/ _` | __| | | / __|               |
#   |             | |_| | |_) | \__ \ || (_| | |_| |_| \__ \               |
#   |             |____/|____/  |___/\__\__,_|\__|\__,_|___/               |
#   |                                                                      |
#   '----------------------------------------------------------------------'


@get_parsed_item_data
def check_aws_rds_summary_db(item, params, data):
    db_name = data.get("DBName")
    pre_info = ""
    if db_name is not None:
        pre_info = "[%s] " % db_name
    yield 0, "%sStatus: %s" % (pre_info, data["DBInstanceStatus"])

    multi_az = data.get("MultiAZ")
    if multi_az is not None:
        if multi_az:
            multi_az_readable = "yes"
        else:
            multi_az_readable = "no"
        yield 0, "Multi AZ: %s" % multi_az_readable

    zone = data.get("AvailabilityZone")
    if zone is not None:
        region = zone[:-1]
        zone_info = zone[-1]
        yield 0, "Availability zone: %s (%s)" % (AWSRegions[region], zone_info)


check_info["aws_rds_summary.db_status"] = {
    "inventory_function": lambda p: inventory_aws_generic(p, ["DBInstanceStatus"]),
    "check_function": check_aws_rds_summary_db,
    "service_description": "AWS/RDS %s Info",
}
