Module: check_mk
Branch: master
Commit: f983aea3e62c7517bf98bebc1e04f9f1f50f7fa3
URL: http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=f983aea3e62c75…
Author: Lars Michelsen <lm(a)mathias-kettner.de>
Date: Thu Nov 11 18:05:29 2010 +0100
if/if64: targetspeed can now be None to disable target speed check
---
ChangeLog | 1 +
checkman/if | 3 ++-
checks/if | 6 +++---
checks/if64 | 4 +++-
4 files changed, 9 insertions(+), 5 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index b83d75d..3efcf45 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -42,6 +42,7 @@
Checks & Agents:
* megaraid_pdisks: Using the real enclosure number as check item now
* if/if64: Added expected interface speed to warning output
+ * if/if64: Expected speed can also be None to disable interface speed checking
* wut_webtherm: handle more variants of WuT Webtherms (thanks to Lefty)
* cisco_fan: Does not inventorize 'notPresent' sensors anymore. Improved output
* cisco_power: Not using power source as threshold anymore. Improved output
diff --git a/checkman/if b/checkman/if
index 271b9ee..34134e6 100644
--- a/checkman/if
+++ b/checkman/if
@@ -42,7 +42,8 @@ err_warn (float): The percentage of errors + discards at which a warning should
triggered. Default is {0.01} percent (one of 10.000).
err_crit (float): The percentage of errors + discards at which a critical state is
reached. Default is {0.1} percent (one of 1.000).
-targetspeed (int): The target speed in bits per second of the interface.
+targetspeed (int): The target speed in bits per second of the interface. Can be {None} to disable the
+ interface speed check.
bw_warn (float): Optional: The in/out rate to raise a WARNING state. Defaults to {None}.
bw_crit (float): Optional: The in/out rate to raise a CRITICAL state. Defaults to {None}.
allowed_operstates (tuple): Optional: A list of allowed operstates. All other states
diff --git a/checks/if b/checks/if
index e08c247..2f15977 100644
--- a/checks/if
+++ b/checks/if
@@ -37,7 +37,7 @@ if_default_levels = (0.01, 0.1, None, None, ('1', 'up',))
# Stupid fix: Remove all 0 bytes. Hope this causes no problems.
def cleanup_if_strings(s):
if s and s != '':
- return "".join([ c for c in s if c not in nagios_illegal_chars+chr(0) ]).strip()
+ return "".join([ c for c in s if c not in nagios_illegal_chars+chr(0) ]).strip()
else:
return s
@@ -87,7 +87,7 @@ def check_if(item, params, info):
for ifIndex, ifDescr, ifType, ifSpeed, ifOperStatus, ifInOctets, ifInUcastPkts, ifInNUcastPkts, ifInDiscards, \
ifInErrors, ifOutOctets, ifOutUcastPkts, ifOutNUcastPkts, ifOutDiscards, ifOutErrors, ifOutQLen in info:
ifDescr = cleanup_if_strings(ifDescr)
-
+
if item == ifIndex or item == ifDescr:
# Display port number or alias in infotext if that is not part
@@ -109,7 +109,7 @@ def check_if(item, params, info):
# Check speed
speed = saveint(ifSpeed)
bandwidth = speed / 8.0 # in Bytes / sec
- if speed != targetspeed:
+ if not targetspeed is None and speed != targetspeed:
infotext += "%s (wrong speed! expected: %s)" % (speed, get_nic_speed_human_readable(targetspeed))
state = 1
else:
diff --git a/checks/if64 b/checks/if64
index 897787b..0f91652 100644
--- a/checks/if64
+++ b/checks/if64
@@ -122,9 +122,11 @@ def check_if64(item, params, info):
speed = saveint(ifSpeed)
infotext += get_nic_speed_human_readable(speed)
bandwidth = speed / 8.0 # in Bytes / sec
- if speed != targetspeed:
+ if not targetspeed is None and speed != targetspeed:
infotext += " (wrong speed! expected: %s)" % get_nic_speed_human_readable(targetspeed)
state = 1
+ else:
+ infotext += get_bytes_human_readable(speed, 1000)+'it/s'
# Performance counters
this_time = time.time()
Module: check_mk
Branch: master
Commit: 7b727432a71f824fd0e775ef03aae132b293e046
URL: http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=7b727432a71f82…
Author: Mathias Kettner <mk(a)mathias-kettner.de>
Date: Mon Nov 8 17:51:43 2010 +0100
j4p_performance.mem: new experimental JMX memory check
---
ChangeLog | 1 +
agents/plugins/j4p_performance | 9 ++++-
checkman/j4p_performance.mem | 50 +++++++++++++++++++++++++++++++
checks/j4p_performance | 63 ++++++++++++++++++++++++++++++++++++++++
4 files changed, 121 insertions(+), 2 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index ae06146..c285069 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -63,6 +63,7 @@
systems without dhcp server
* j4p_performance: Added experimental agent plugin fetching data via
jmx4perl agent (does not need jmx4perl on Nagios)
+ * j4p_performance.mem: added new experimental check for memory usage via JMX.
Multisite:
* The custom open/close states of custom links are now stored for each
diff --git a/agents/plugins/j4p_performance b/agents/plugins/j4p_performance
index 2af3363..12fa224 100755
--- a/agents/plugins/j4p_performance
+++ b/agents/plugins/j4p_performance
@@ -4,8 +4,10 @@ import urllib, sys, os
server = "localhost"
port = 8080
+instance = None
+
vars = [
- ( "java.lang:type=Memory/NonHeapMemoryUsage/used", "NoneHeapMemoryUsage" ),
+ ( "java.lang:type=Memory/NonHeapMemoryUsage/used", "NonHeapMemoryUsage" ),
( "java.lang:type=Memory/HeapMemoryUsage/used", "HeapMemoryUsage" ),
( "java.lang:type=Threading/ThreadCount", "ThreadCount" ),
( "java.lang:type=Threading/DaemonhreadCount", "DeamonThreadCount" ),
@@ -17,6 +19,9 @@ vars = [
conffile = os.getenv("MK_CONFDIR", "/etc/check_mk") + "/j4p.conf"
+if instance == None:
+ instance = str(port)
+
if os.path.exists(conffile):
execfile(conffile)
@@ -33,7 +38,7 @@ for path, title in vars:
if first:
first = False
sys.stdout.write("<<<j4p_performance>>>\n")
- sys.stdout.write("%-30s %s\n" % (title, value))
+ sys.stdout.write("%s %-30s %s\n" % (instance, title, value))
except IOError:
sys.exit(1)
except:
diff --git a/checkman/j4p_performance.mem b/checkman/j4p_performance.mem
new file mode 100644
index 0000000..d8a2879
--- /dev/null
+++ b/checkman/j4p_performance.mem
@@ -0,0 +1,50 @@
+title: Check memory usage of Java application server via JMX and j4p.war
+agents: linux
+author: Mathias Kettner <mk(a)mathias-kettner.de>
+license: GPL
+distribution: check_mk
+description:
+ This checks uses the JSON HTTP service of j4p (from jmx4perl) to
+ monitor the current memory usage of a Java application server like
+ Tomcat or JBoss. You can define levels agains the total memory
+ usage of the Java machine (heap + non heap).
+
+ In order for the check to work, you need to load the j4p.war into your
+ application server. Furthermore you need the agent plugin {j4p_performance}
+ in your Check_MK agent's plugins directory. If you do not use the
+ default port 8080 for j4p - lets say {9090} - then you have to create
+ a configuration file {j4p.conf} in the agents configuration directory
+ (usually {/etc/check_mk/j4p.conf}) with the single line {port = 9090}.
+
+ Note: No jmx4perl is needed - neither on the target host nor
+ on the monitoring server. No Perl is needed, either.
+ The agent connects to the application server always via {localhost}.
+
+item:
+ The instance name as configured in {j4p.conf} with the variable
+ {instance}. If you do not specify an instance then the port number
+ converted to a string is used.
+
+ Please note that the current implementation of the agent plugin
+ supports only one instance per host.
+
+examples:
+ # Set default levels for heap memory to 500 MB / 800 MB
+ j4p_mem_default_levels = (500, 800)
+
+perfdata:
+ Two variables: the heap memory usage and the non heap memory usage
+ in MB.
+
+inventory:
+ One check is created for each JMX instance sent by the agent.
+ The agent currently supports only one instance, but that might
+ be changed in future.
+
+[parameters]
+warning (int): The warning level for used memory in MB
+critical (int): The critical level for used memory in MB
+
+[configuration]
+j4p_mem_default_levels (int, int): Default levels for memory usage in MB. This
+ is preset to {(1000, 2000)}.
diff --git a/checks/j4p_performance b/checks/j4p_performance
new file mode 100644
index 0000000..b11d40c
--- /dev/null
+++ b/checks/j4p_performance
@@ -0,0 +1,63 @@
+#!/usr/bin/python
+# -*- encoding: utf-8; py-indent-offset: 4 -*-
+# +------------------------------------------------------------------+
+# | ____ _ _ __ __ _ __ |
+# | / ___| |__ ___ ___| | __ | \/ | |/ / |
+# | | | | '_ \ / _ \/ __| |/ / | |\/| | ' / |
+# | | |___| | | | __/ (__| < | | | | . \ |
+# | \____|_| |_|\___|\___|_|\_\___|_| |_|_|\_\ |
+# | |
+# | Copyright Mathias Kettner 2010 mk(a)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.
+
+j4p_mem_default_levels = ( 1000, 2000 ) # MB
+
+def j4p_performance_parse(info):
+ parsed = {}
+ for instance, var, value in info:
+ entry = parsed.get(instance, {})
+ parsed[instance] = entry
+ entry[var] = value
+ return parsed
+
+def inventory_j4p_performance_mem(checktype, info):
+ parsed = j4p_performance_parse(info)
+ return [ (k, "j4p_mem_default_levels") for k in parsed ]
+
+def check_j4p_performance_mem(item, params, info):
+ warn, crit = params
+ parsed = j4p_performance_parse(info)
+ if item not in parsed:
+ return (3, "UNKNOWN - data not found in agent output")
+ d = parsed[item]
+ mb = 1024 * 1024.0
+ heap = saveint(d["HeapMemoryUsage"]) / mb
+ non_heap = saveint(d["NonHeapMemoryUsage"]) / mb
+ total = heap + non_heap
+ perfdata = [ ("heap", heap, warn, crit),
+ ("nonheap", non_heap, warn, crit) ]
+ infotext = "%.0f MB total (%.0f heap, %.0f MB non-heap), levels at %.0f/%.0f" % (total, heap, non_heap, warn, crit)
+ if total >= crit:
+ return (2, "CRIT - " + infotext, perfdata)
+ elif total >= warn:
+ return (1, "WARN - " + infotext, perfdata)
+ else:
+ return (0, "OK - " + infotext, perfdata)
+
+
+check_info["j4p_performance.mem"] = ( check_j4p_performance_mem, "JMX %s Memory", 1, inventory_j4p_performance_mem )
+
Module: check_mk
Branch: master
Commit: fd283e35e8fba04b4c48b036c6ec082d16bd7c97
URL: http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=fd283e35e8fba0…
Author: Lars Michelsen <lm(a)mathias-kettner.de>
Date: Wed Nov 10 22:41:56 2010 +0100
check validation: Fixed typo
---
doc/helpers/validate_checks | 22 +++++++++++++---------
1 files changed, 13 insertions(+), 9 deletions(-)
diff --git a/doc/helpers/validate_checks b/doc/helpers/validate_checks
index 91c5577..d6cd425 100755
--- a/doc/helpers/validate_checks
+++ b/doc/helpers/validate_checks
@@ -93,15 +93,15 @@ def grep_manpage(check, match, section = None):
if section is None:
return not re.search(match, manpage) is None
else:
- started = False
- for line in manpage.split("\n"):
+ sec_started = False
+ for line in [ l.strip() for l in manpage.split("\n") ]:
if line == '[%s]' % section:
# Block starts with this line
- started = True
- elif started and line == '' or line.startswith('['):
+ sec_started = True
+ elif sec_started == True and (line == '' or line.startswith('[')):
# Reached nex section. Didn't find a match ... so return false
return False
- elif started:
+ elif sec_started == True:
if not re.search(match, line) is None:
return True
return False
@@ -166,10 +166,14 @@ def verify_global_vars(check):
if not var.islower():
invalid = True
- # Filter out known config vars
- # And check for correct prefix
- if not invalid and not grep_manpage(check, "^%s" % var, 'configuration') \
- and not var.startswith('%s_' % check_file):
+ # Documented configuration vars can be skipped
+ if not invalid and grep_manpage(check, "^%s" % var, 'configuration'):
+ continue
+ elif check == 'aironet_clients':
+ print 'found'
+
+ # Check unknown vars for correct prefix
+ if not var.startswith('%s_' % check_file):
invalid = True
if invalid:
Module: check_mk
Branch: master
Commit: 27bc10604a67dd056d8f455543a18b73c40d59f3
URL: http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=27bc10604a67dd…
Author: Lars Michelsen <lm(a)mathias-kettner.de>
Date: Wed Nov 10 22:12:34 2010 +0100
check validation: Added comments, added verbose mode to print out more details e.g. about wrong global vars per check
---
doc/helpers/validate_checks | 103 +++++++++++++++++++++++++++++++------------
1 files changed, 75 insertions(+), 28 deletions(-)
diff --git a/doc/helpers/validate_checks b/doc/helpers/validate_checks
index d273228..a0650c0 100755
--- a/doc/helpers/validate_checks
+++ b/doc/helpers/validate_checks
@@ -7,7 +7,7 @@
# - Zu viele?
# - Check Namen in der Variable?
-import os, sys, re
+import os, sys, re, getopt
import reindent
on_tty = sys.stdout.isatty()
@@ -80,6 +80,36 @@ def is_snmp_check(check):
def all_nonfunction_vars():
return set([ name for name,value in globals().items() if name[0] != '_' and type(value) != type(lambda:0) ])
+def get_manpage(check):
+ if not check in manpage:
+ try:
+ manpage[check] = open('checkman/%s' % check.split('.')[0]).read()
+ except IOError, e:
+ manpage[check] = ""
+ return manpage[check]
+
+def grep_manpage(check, match, section = None):
+ manpage = get_manpage(check)
+ if section is None:
+ return not re.search(match, manpage) is None
+ else:
+ started = False
+ for line in manpage.split("\n"):
+ if line == '[%s]' % section:
+ # Block starts with this line
+ started = True
+ elif started and line == '' or line.startswith('['):
+ # Reached nex section. Didn't find a match ... so return false
+ return False
+ elif started:
+ if not re.search(match, line) is None:
+ return True
+ return False
+
+def usage():
+ print "No real help available... The only option is -v|--verbose."
+ sys.exit(0)
+
ignored_variables = []
# Load all checks and record global var definitions
@@ -112,35 +142,13 @@ WEIGHT = { 'manpage': 2, 'global_vars': 2, 'reindent': 2 }
manpage = {}
-#
+# #############################################################################
# Check definitions
-#
+# #############################################################################
-def get_manpage(check):
- if not check in manpage:
- try:
- manpage[check] = open('checkman/%s' % check.split('.')[0]).read()
- except IOError, e:
- manpage[check] = ""
- return manpage[check]
-
-def grep_manpage(check, match, section = None):
- manpage = get_manpage(check)
- if section is None:
- return not re.search(match, manpage) is None
- else:
- started = False
- for line in manpage.split("\n"):
- if line == '[%s]' % section:
- # Block starts with this line
- started = True
- elif started and line == '' or line.startswith('['):
- # Reached nex section. Didn't find a match ... so return false
- return False
- elif started:
- if not re.search(match, line) is None:
- return True
- return False
+# Verify global vars:
+# - Are the global configuration vars mentioned in the manpage
+# - Are the other (internal) helper vars namend correctly
def is_valid_global_vars(check):
return True
@@ -172,6 +180,9 @@ def verify_global_vars(check):
return check_file in invalid_global_vars
+# Reindent code:
+# - Is there some code to be reindented?
+
def is_valid_reindent(check):
return True
@@ -181,30 +192,57 @@ def verify_reindent(check):
f.close()
return not r.run()
+# Manpage:
+# - Does the check have a manpage?
+
def is_valid_manpage(check):
return True
def verify_manpage(check):
return os.path.exists('checkman/%s' % check)
+# SNMP scan function:
+# - Does the snmp check have a scan function?
+
def is_valid_snmp_scan(check):
return is_snmp_check(check)
def verify_snmp_scan(check):
return check in snmp_scan_functions
+# PNP-Template:
+# Does the chekc which produces perfdata have a pnp template?
+
def is_valid_pnp_tmpl(check):
return check_has_perfdata(check)
def verify_pnp_tmpl(check):
return os.path.exists('pnp-templates/check_mk-%s.php' % check)
+# PNP-Template:
+# Does the chekc which produces perfdata have a rra config?
+
def is_valid_pnp_rra(check):
return check_has_perfdata(check)
def verify_pnp_rra(check):
return os.path.exists('pnp-rraconf/check_mk-%s.rra.cfg' % check)
+# #############################################################################
+# MAIN
+# #############################################################################
+
+_verbose = 0
+try:
+ opts, args = getopt.getopt(sys.argv[1:], "vh",
+ ["verbose", "help"])
+except getopt.error, msg:
+ usage(msg)
+for o, a in opts:
+ if o in ('-v', '--verbose'):
+ _verbose += 1
+ elif o in ('-h', '--help'):
+ usage()
# 1) Perform checks
#
@@ -262,3 +300,12 @@ for check, (score, check_results) in results:
sys.stdout.write('%s%-8s%s' % (color, score, tty_normal))
sys.stdout.write("\n")
+
+if _verbose > 0:
+ sys.stdout.write("\n")
+ sys.stdout.write("===========================================================================\n")
+ sys.stdout.write("Invalid global vars by check:\n")
+ sys.stdout.write("===========================================================================\n")
+ for check, vars in invalid_global_vars.iteritems():
+ for var in vars:
+ sys.stdout.write("%-25s: %s\n" % (check, var))
Module: check_mk
Branch: master
Commit: a590335da6ccdca345acddd7f1a373f22d77b08c
URL: http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=a590335da6ccdc…
Author: Lars Michelsen <lm(a)mathias-kettner.de>
Date: Wed Nov 10 22:21:14 2010 +0100
Sort invalid global vars by checkname
---
doc/helpers/validate_checks | 6 +++---
1 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/doc/helpers/validate_checks b/doc/helpers/validate_checks
index a0650c0..91c5577 100755
--- a/doc/helpers/validate_checks
+++ b/doc/helpers/validate_checks
@@ -7,7 +7,7 @@
# - Zu viele?
# - Check Namen in der Variable?
-import os, sys, re, getopt
+import os, sys, re, getopt, operator
import reindent
on_tty = sys.stdout.isatty()
@@ -264,7 +264,6 @@ for check in get_all_checks():
#
# 2) Sort by score
#
-import operator
results = sorted(results.iteritems(), key=operator.itemgetter(1))
#
@@ -306,6 +305,7 @@ if _verbose > 0:
sys.stdout.write("===========================================================================\n")
sys.stdout.write("Invalid global vars by check:\n")
sys.stdout.write("===========================================================================\n")
- for check, vars in invalid_global_vars.iteritems():
+ # sort checks by name
+ for check, vars in sorted(invalid_global_vars.iteritems(), key=operator.itemgetter(0)):
for var in vars:
sys.stdout.write("%-25s: %s\n" % (check, var))
Module: check_mk
Branch: master
Commit: 9589fd9e64adf4441f8a1d1f1c6326a9917766ba
URL: http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=9589fd9e64adf4…
Author: Lars Michelsen <lm(a)mathias-kettner.de>
Date: Wed Nov 10 21:59:08 2010 +0100
check validation: Added global vars check
---
doc/helpers/validate_checks | 89 ++++++++++++++++++++++++++++++++++++++++--
1 files changed, 84 insertions(+), 5 deletions(-)
diff --git a/doc/helpers/validate_checks b/doc/helpers/validate_checks
index 1108402..d273228 100755
--- a/doc/helpers/validate_checks
+++ b/doc/helpers/validate_checks
@@ -1,14 +1,13 @@
#!/usr/bin/python
# Ideen:
-# - Reindent
# - Header
# - Copyright drin?
# - Globale Variablen
# - Zu viele?
# - Check Namen in der Variable?
-import os, sys
+import os, sys, re
import reindent
on_tty = sys.stdout.isatty()
@@ -78,21 +77,101 @@ def get_all_checks():
def is_snmp_check(check):
return check in snmp_info or check in snmp_info_single
-# Load all checks
+def all_nonfunction_vars():
+ return set([ name for name,value in globals().items() if name[0] != '_' and type(value) != type(lambda:0) ])
+
+ignored_variables = []
+
+# Load all checks and record global var definitions
+# Also read the man pages
+global_vars = {}
+invalid_global_vars = {}
for check in get_checks():
+ vars_before_check = all_nonfunction_vars()
execfile('checks/%s' % check)
+ vars_after_check = all_nonfunction_vars()
+
+ global_vars[check] = []
+ for name in vars_after_check:
+ if name not in ignored_variables and name not in vars_before_check:
+ global_vars[check] += [ name ]
SCORE_START = 10
C_OK = 1
C_FAILED = 2
C_INVALID = 3
-TESTS = { 'manpage': C_OK, 'snmp_scan': C_OK, 'pnp_tmpl': C_OK, 'pnp_rra': C_OK, 'snmp_scan': C_OK, 'reindent': C_OK }
-WEIGHT = { 'manpage': 2 }
+TESTS = { 'manpage': C_OK,
+ 'snmp_scan': C_OK,
+ 'pnp_tmpl': C_OK,
+ 'pnp_rra': C_OK,
+ 'snmp_scan': C_OK,
+ 'reindent': C_OK,
+ 'global_vars': C_OK,
+}
+WEIGHT = { 'manpage': 2, 'global_vars': 2, 'reindent': 2 }
+
+manpage = {}
#
# Check definitions
#
+def get_manpage(check):
+ if not check in manpage:
+ try:
+ manpage[check] = open('checkman/%s' % check.split('.')[0]).read()
+ except IOError, e:
+ manpage[check] = ""
+ return manpage[check]
+
+def grep_manpage(check, match, section = None):
+ manpage = get_manpage(check)
+ if section is None:
+ return not re.search(match, manpage) is None
+ else:
+ started = False
+ for line in manpage.split("\n"):
+ if line == '[%s]' % section:
+ # Block starts with this line
+ started = True
+ elif started and line == '' or line.startswith('['):
+ # Reached nex section. Didn't find a match ... so return false
+ return False
+ elif started:
+ if not re.search(match, line) is None:
+ return True
+ return False
+
+def is_valid_global_vars(check):
+ return True
+
+def verify_global_vars(check):
+ check_file = check.split('.')[0]
+
+ # No global vars registered by this check
+ if not check_file in global_vars:
+ return True
+
+ # Loop all global vars of this check and verify them
+ for var in global_vars[check_file]:
+ invalid = False
+ if not var.islower():
+ invalid = True
+
+ # Filter out known config vars
+ # And check for correct prefix
+ if not invalid and not grep_manpage(check, "^%s" % var, 'configuration') \
+ and not var.startswith('%s_' % check_file):
+ invalid = True
+
+ if invalid:
+ if not check_file in invalid_global_vars:
+ invalid_global_vars[check_file] = [ var ]
+ else:
+ invalid_global_vars[check_file] += [ var ]
+
+ return check_file in invalid_global_vars
+
def is_valid_reindent(check):
return True