This file is indexed.

/usr/share/check_mk/checks/oracle_tbs is in check-mk-server 1.1.12-1ubuntu1.

This file is owned by root:root, with mode 0o755.

The actual contents of the file can be viewed below.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#!/usr/bin/python
# -*- encoding: utf-8; py-indent-offset: 4 -*-
# +------------------------------------------------------------------+
# |             ____ _               _        __  __ _  __           |
# |            / ___| |__   ___  ___| | __   |  \/  | |/ /           |
# |           | |   | '_ \ / _ \/ __| |/ /   | |\/| | ' /            |
# |           | |___| | | |  __/ (__|   <    | |  | | . \            |
# |            \____|_| |_|\___|\___|_|\_\___|_|  |_|_|\_\           |
# |                                                                  |
# | Copyright Mathias Kettner 2010             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-
# ails.  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.


oracle_tbs_default_levels          = (80, 90, 15000, 25000)

# Output from plugin looks like this:
# BT23  LOADER   142813        196602   .726   YES
# DB    NAME     size_mb  max_size_mb   util   autoextend
def check_oracle_tbs(item, params, info):
    for line in info:
        if len(line) < 6: continue
        db = line[0]
        tbs = line[1]
        (warn, crit, mbfree_warn, mbfree_ok) = params
        if db + "_" + tbs == item:
            size_mb  = int(float(line[2]))
            msize_mb = int(float(line[3]))
            autoextend_txt = line[5]
            autoextend = autoextend_txt == "YES"
            free_mb = msize_mb - size_mb
            used_perc = 100 * size_mb / msize_mb
            crit_mb = msize_mb * crit / 100
            warn_mb = msize_mb * warn / 100
            perfdata = [ ("used", "%dMB" % size_mb, warn_mb, crit_mb, 0, msize_mb) ]
            infotext = " - %d of %d MB used (%d%%), autoextend: %s" % (size_mb, msize_mb, used_perc, autoextend_txt)

            # For all tablespaces except TEMP and UNDOTBS.*
            # autoextend should be enabled.
            if not autoextend:
                if tbs == "TEMP" or tbs.startswith("UNDOTBS"):
                    return (0, "OK" + infotext, perfdata)
                else:
                    return (1, "WARNING" + infotext, perfdata)

            # For TEMP and UNDOTBS.* autoextend should *NOT*
            # be enabled.
            if tbs == "TEMP" or tbs.startswith("UNDOTBS"):
                return (1, "WARNING" + infotext, perfdata)

            # If tbs is at least by mbfree_ok MBs extendable, then OK
            if free_mb >= mbfree_ok:
                return (0, "OK" + infotext, perfdata)

            # Now check used space
            if used_perc > crit:
                if free_mb >= mbfree_warn and free_mb < mbfree_ok:
                    return (1, "WARNING" + infotext, perfdata)
                else:
                    return (2, "CRIT" + infotext + " (critical at %d%%)" % crit, perfdata)
            elif used_perc > warn:
                return (1, "WARNING" + infotext + " (warning at %d%%)" % warn, perfdata)
            else:
                return (0, "OK" + infotext, perfdata)

    return (2, "CRIT - table space missing")

def inventory_oracle_tbs(info):
    return [ ("%s_%s" % (line[0], line[1]), "%s of %s MB free" % (line[2], line[3]), 'oracle_tbs_default_levels') \
             for line in info if len(line) >= 5 ]

check_info['oracle_tbs'] = (
    check_oracle_tbs,
    "Tablespace %s",
    1,
    inventory_oracle_tbs)