#!/usr/bin/python
# -*- encoding: utf-8; py-indent-offset: 4 -*-
# +------------------------------------------------------------------+
# |             ____ _               _        __  __ _  __           |
# |            / ___| |__   ___  ___| | __   |  \/  | |/ /           |
# |           | |   | '_ \ / _ \/ __| |/ /   | |\/| | ' /            |
# |           | |___| | | |  __/ (__|   <    | |  | | . \            |
# |            \____|_| |_|\___|\___|_|\_\___|_|  |_|_|\_\           |
# |                                                                  |
# | Copyright Mathias Kettner 2013             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.

# pre 1.4.0i1 output (without edition, space separated)
# <<<mssql_versions>>>
# MSSQL_SQLEXPRESS  10.50.1600.1

# 1.4.0i1 output
# <<<mssql_versions:sep(124)>>>
# MSSQL_MSSQLSERVER|10.50.1600.1|Enterprise Edition

def inv_mssql_versions(info):
    node = inv_tree_list("software.applications.mssql.instances:")

    def product(v):
        parts = map(int, v.split("."))
        if parts[0] == 12:
            return "SQL Server 2014"
        elif parts[0] == 11:
            return "SQL Server 2012"
        elif parts[0] == 10:
            if parts[1] == 50:
                return "SQL Server 2008 R2"
            else:
                return "SQL Server 2008"
        elif parts[0] == 9:
            return "SQL Server 2005"
        elif parts[0] == 8:
            return "SQL Server 2000"
        elif parts[0] == 7:
            return "SQL Server 7.0"
        else:
            return "Unknown Product"

    def get_list_item(key, val):
        for item in node:
            if item[key] == val:
                return item

        node.append({})
        return node[-1]

    for line in info:
        if len(line) not in [2, 4]:
            continue

        if "_" in line[0]:
            instance_id = line[0].split("_", 1)[1]
        else:
            instance_id = line[0]
        version      = line[1]
        edition      = len(line) == 4 and line[2] or ""
        clustered    = len(line) == 4 and line[3] != ""
        cluster_name = len(line) == 4 and line[3] or ""

        instance = get_list_item("name", instance_id)
        instance.update({
            "name"         : instance_id,
            "version"      : version,
            "product"      : product(version),
            "edition"      : edition,
            "clustered"    : clustered,
            "cluster_name" : cluster_name,
        })

inv_info["mssql_versions"] = {
   "inv_function"           : inv_mssql_versions,
}
