#!/usr/bin/python
import httplib
import base64
import datetime
import hashlib
import hmac
import re
import getopt
import sys

def ret(retcode, message):
	if retcode == 0:
		sys.stdout.write("Ok")
	elif retcode == 1:
		sys.stdout.write("Warning")
	elif retcode == 2:
		sys.stdout.write("Critical")
	else:
		sys.stdout.write("Unknown")
	sys.stdout.write(" - ")
	sys.stdout.write(message)
	sys.stdout.write("\n")
	sys.exit(retcode)

host = ""
username = ''
password = ''

try:
        options, remainder = getopt.getopt(sys.argv[1:], 'H:u:p:i:D:', ['host=', 'user=', 'pass=', 'id=', 'dir=' ])

        for opt, arg in options:
                if opt in ('-H', '--host'):
                        host = arg
                elif opt in ('-u', '--user'):
                        username = arg
                elif opt in ('-p', '--pass'):
                        password = arg
except getopt.GetoptError as err:
        ret(3,str(err))

if host == '':
        ret(3, "Host must be set")

if username == '':
        ret(3, "Username must be set")

if password == '':
        ret(3, "Password  must be set")

method = 'POST'
path = "/api/external/4.0/hw_monitoring.Administration.health_state"
message = '{}'

timestamp = datetime.datetime.utcnow().strftime('%a, %d %b %Y %H:%M:%S') + ' GMT'

m = hashlib.sha1()
m.update(password)
passwordsha1 = m.hexdigest();

payload = method + ' ' + path + '\n' + 'Date: ' + timestamp + '\n' 
if message:
	payload += message

mac = hmac.new(passwordsha1, payload, hashlib.sha1).digest()
signature = mac.encode('base64').strip('\n')
uname = username.encode('base64').strip('\n')
try:
	conn = httplib.HTTPConnection(host, 80)
	conn.connect()
	request = conn.putrequest(method, path)
	conn.putheader('Date', timestamp)
	conn.putheader('DATE-AUTH', timestamp)
	conn.putheader('AUTHENTICATION', "HMAC-SHA1-DATE " + uname + ':' + signature)
	if message:
		conn.putheader('Content-Length', "%d"%(len(message)))
	else:
		conn.putheader('Content-Length', "0")
	conn.endheaders()
	if message:
		conn.send(message)
except Exception as exc:
	ret(3, str(exc))

resp = conn.getresponse()
result = resp.read()

if not re.search('healthy', result):
	ret(2, "Found " + str(result))
conn.close()

ret(0, str(result))
