if not plugin.options.sensorid:
    plugin.back2nagios(3, "Need at least one sensor id!")

# Make list of sensor ids
if "," in plugin.options.sensorid:
    plugin.options.sensorid = plugin.options.sensorid.split(",")
else:
    plugin.options.sensorid = [plugin.options.sensorid]

# Check all sensor ids are hex
re_hex = re.compile("^[0-9A-Fa-f]+$")
for sid in plugin.options.sensorid:
    if not re_hex.search(sid):
        plugin.back2nagios(3, 'Sensor id "%s" must be integer or hex!' % sid)

plugin.verbose(1, "Sensor id(s): " + " - ".join([str(s) for s in plugin.options.sensorid]))

searchpattern = re.compile(
    r"(\d+)\s+Sensor:\s*([0-9A-Za-z]+)\s+Raw:\s*(-?[0-9\.]+)?\s+Value:\s*(-?[0-9\.]+)\s+Unit:\s*(\S+)\b"
)

for sensorid in plugin.options.sensorid:
    filename = os.path.join(plugin.options.path, "%s%s" % (plugin.options.basefilename, sensorid))
    try:
        plugin.verbose(2, "Reading sensor %s" % sensorid)
        data = file(filename).readlines()
    except IOError:
        plugin.back2nagios(3, 'Could not read file "%s"' % filename)

    if plugin.options.verbose >= 3:
        plugin.verbose(3, "Read line(s):" % data)
plugin.add_cmdlineoption('-c', '', 'crit', 'warning thresold', default='50')
plugin.add_cmdlineoption('', '--statistics', 'statistics', 'Output worker statistics', action='store_true')

plugin.parse_cmdlineoptions()

if plugin.options.proto not in ['http', 'https']:
	plugin.back2nagios(3, 'Unknown protocol "' + plugin.options.proto + '"')

if not plugin.options.port:
	if plugin.options.proto == 'https':
		plugin.options.port = '443'
	else:
		plugin.options.port = '80'

url = plugin.options.proto + '://' + plugin.options.host + ':' + plugin.options.port + '/' + plugin.options.url + '?auto'
plugin.verbose(1, 'Status URL: ' + url)

if plugin.options.httpauth:
	httpauth = plugin.options.httpauth.split(':')
	if len(httpauth) != 2:
		plugin.back2nagios(3, 'Wrong format of authentication data! Need "USERNAME:PASSWORD", got "' + plugin.options.httpauth + '"')
	passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
	passman.add_password(None, url, httpauth[0], httpauth[1])
	authhandler = urllib2.HTTPBasicAuthHandler(passman)
	opener = urllib2.build_opener(authhandler)
	urllib2.install_opener(opener)

try:
	data = urllib2.urlopen(url).read()
except urllib2.HTTPError, e:
	plugin.back2nagios(2, 'Could not read data! ' + str(e))
	'PERFORMANCE': ['AVGACTSVCLAT', 'AVGPSVSVCLAT', 'AVGACTSVCEXT', 'AVGACTHSTLAT', 'AVGPSVHSTLAT', 'AVGACTHSTEXT', ],
	'PEAK': [ 'MAXACTSVCLAT', 'MAXPSVSVCLAT', 'MAXACTSVCEXT', 'MAXACTHSTLAT', 'MAXPSVHSTLAT', 'MAXACTHSTEXT', ],
	}


plugin.add_cmdlineoption('-C', '', 'checks', 'Use built-in checks (predefined lists of variables)', default='')
plugin.add_cmdlineoption('-V', '', 'vars', 'List of "nagiostats" variables to check', default='')
plugin.add_cmdlineoption('-n', '', 'nagiostats', 'Full path to nagiostat', default='')
plugin.add_cmdlineoption('-w', '', 'warn', 'warning thresold', default='')
plugin.add_cmdlineoption('-c', '', 'crit', 'warning thresold', default='')

plugin.parse_cmdlineoptions()


if not plugin.options.nagiostats:
	plugin.verbose(2, 'Auto-detecting path to "nagiostats"...')
	for nagiostats in NAGIOSTATSs:
		if os.path.exists(nagiostats):
			plugin.options.nagiostats = nagiostats
			plugin.verbose(2, 'Found it at "%s"' % nagiostats)
			break

if not os.path.exists(plugin.options.nagiostats):
	plugin.back2nagios(3, 'Could not find "nagiostats"')

if not plugin.options.checks and not plugin.options.vars:
	plugin.back2nagios(3, 'Need either "-C" or "-V"')

# Checks and Variables
varlist = []
varlist_unknown = []
#if plugin.options.v6:
#	plugin.verbose(1, 'Using IPv6')


# Get IP from interface
try:
	ip_iface = get_ipv4_address(plugin.options.iface)
except IOError, (errno, strerror):
	if errno == 19:
		plugin.back2nagios(2, 'Interface "%s" does not exist!' % plugin.options.iface)
	elif errno == 99:
		plugin.back2nagios(2, 'Interface "%s" has no IP!' % plugin.options.iface)

	plugin.back2nagios(2, 'I/O error(%s): %s, interface "%s"' % (errno, strerror, plugin.options.iface))

plugin.verbose(1, 'Found IP "%s" on interface "%s"' % (ip_iface, plugin.options.iface))

# Get IP(s) from DNS
if not ',' in plugin.options.dns:
	# Only one DNS object
	try:
		ip_dns = socket.gethostbyname(plugin.options.dns)
	except socket.gaierror:
		ip_dns = None
		plugin.back2nagios(1, 'Could not find "%s" in DNS!' % plugin.options.dns)

	if ip_iface == ip_dns:
		plugin.back2nagios(0, 'Found %s for "%s" in DNS and on interface "%s"' % (ip_dns, plugin.options.dns, plugin.options.iface))
	else:
		plugin.back2nagios(2, 'Found %s for "%s" in DNS, but %s for interface "%s"' % (ip_dns, plugin.options.dns, ip_iface, plugin.options.iface))