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

# .1.3.6.1.4.1.20632.2.2  0
# .1.3.6.1.4.1.20632.2.3  19
# .1.3.6.1.4.1.20632.2.4  17
# .1.3.6.1.4.1.20632.2.60 434

# Suggested by customer
factory_settings["barracuda_mailq_default_levels"] = {
    "deferred": (80, 100),
    "active": (80, 100),
}


def inventory_barracuda_mailqueues(info):
    return [("", {})]


def check_barracuda_mailqueues(_no_item, params, info):
    in_queue_str, active_queue_str, deferred_queue_str, daily_sent = info[0]
    for queue_type, queue in [
        ("Active", int(active_queue_str)),
        ("Deferred", int(deferred_queue_str)),
    ]:
        state = 0
        infotext = "%s: %s" % (queue_type, queue)
        warn, crit = params[queue_type.lower()]

        if queue >= crit:
            state = 2
        elif queue >= warn:
            state = 1
        if state:
            infotext += " (warn/crit at %d/%d %s mails)" % (warn, crit, queue_type.lower())

        yield state, infotext, [("mail_queue_%s_length" % queue_type.lower(), queue, warn, crit)]

    yield 0, "Incoming: %s" % in_queue_str
    if daily_sent:
        yield 0, "Daily sent: %s" % daily_sent


check_info["barracuda_mailqueues"] = {
    "inventory_function": inventory_barracuda_mailqueues,
    "check_function": check_barracuda_mailqueues,
    "service_description": "Mail Queue %s",
    "has_perfdata": True,
    # The barracuda spam firewall does not response or returns a timeout error
    # executing 'snmpwalk' on whole tables. But we can workaround here specifying
    # all needed OIDs. Then we can use 'snmpget' and 'snmpwalk' on these single OIDs.
    "snmp_info": (
        ".1.3.6.1.4.1.20632.2",
        [
            "2",  # inQueue
            "3",  # outQueue
            "4",  # deferredQueue
            "60",  # dailySent
        ],
    ),
    "snmp_scan_function": lambda oid: oid(".1.3.6.1.2.1.1.2.0").startswith(
        ".1.3.6.1.4.1.8072.3.2.10"
    )
    and "barracuda" in oid(".1.3.6.1.2.1.1.1.0").lower(),
    "default_levels_variable": "barracuda_mailq_default_levels",
    "group": "mail_queue_length",
}
