#!/usr/bin/python
# -*- encoding: utf-8; py-indent-offset: 4 -*-
# +------------------------------------------------------------------+
# |             ____ _               _        __  __ _  __           |
# |            / ___| |__   ___  ___| | __   |  \/  | |/ /           |
# |           | |   | '_ \ / _ \/ __| |/ /   | |\/| | ' /            |
# |           | |___| | | |  __/ (__|   <    | |  | | . \            |
# |            \____|_| |_|\___|\___|_|\_\___|_|  |_|_|\_\           |
# |                                                                  |
# | Copyright Mathias Kettner 2018             mk@mathias-kettner.de |
# +------------------------------------------------------------------+
#
# This file is part of Check_MK.
# The official homepage is at http://mathias-kettner.de/check_mk.
#
# check_mk is free software;  you can redistribute it and/or modify it
# under the  terms of the  GNU General Public License  as published by
# the Free Software Foundation in version 2.  check_mk is  distributed
# in the hope that it will be useful, but WITHOUT ANY WARRANTY;  with-
# out even the implied warranty of  MERCHANTABILITY  or  FITNESS FOR A
# PARTICULAR PURPOSE. See the  GNU General Public License for more de-
# tails. You should have  received  a copy of the  GNU  General Public
# License along with GNU Make; see the file  COPYING.  If  not,  write
# to the Free Software Foundation, Inc., 51 Franklin St,  Fifth Floor,
# Boston, MA 02110-1301 USA.

aws_cloudwatch_alarm_map = {
    'no_alarms': (0, 'no alarms'),
    'ok': (0, 'OK'),
    'alarm': (2, 'alarm'),
    'insufficient_data': (1, 'insufficient data'),
}


def check_aws_cloudwatch_alarms(item, params, parsed):
    ok_alarms = []
    not_ok_alarms = []
    for alarm in parsed:
        alarm_state_value = alarm['StateValue'].lower()
        alarm_name = alarm['AlarmName']
        if alarm_state_value == 'ok':
            ok_alarms.append(alarm_name)
            continue

        alarm_state, alarm_state_readable = aws_cloudwatch_alarm_map.get(
            alarm_state_value.lower(), (3, 'unknown[%s]' % alarm_state_value))
        not_ok_alarms.append((alarm_name, alarm_state, alarm_state_readable))

    for alarm_name, alarm_state, alarm_state_readable in not_ok_alarms:
        yield alarm_state, '%s: %s' % (alarm_name, alarm_state_readable)

    if ok_alarms:
        yield 0, '\n%s' % ", ".join(ok_alarms)


check_info['aws_cloudwatch_alarms'] = {
    'parse_function': parse_aws,
    'inventory_function': discover_single,
    'check_function': check_aws_cloudwatch_alarms,
    'service_description': 'AWS/Cloudwatch Alarms',
    'includes': ['aws.include'],
}
