"""
	This is a RESTful interface implemented using Flask micro framework.
	The API is driven by configuration that is organized in terms of the monitoring classes

	We designed the classes to be reusable (and powered by labels):
	'monitoring-type':
		'class':'<class-name>'
		'config':<labeled-class-specific-configuration>'
"""
from flask import Flask,request
import sys
import os
import json
import re
import monitor
PARAMS  = {'context':''}
if len(sys.argv) > 1:
	
	N = len(sys.argv)
	for i in range(1,N):
		value = None
		if sys.argv[i].startswith('--'):
			key = sys.argv[i].replace('-','')
			
			if i + 1 < N:
				value = sys.argv[i + 1] = sys.argv[i+1].strip()
			if key and value:
				PARAMS[key] = value
		
		i += 2
		

app = Flask(__name__)
f = open(PARAMS['path'])
CONFIG 	= json.loads(f.read())
HANDLERS= {}
for key in CONFIG :
	
	className = CONFIG[key]['class']
	ref	= "".join(["monitor.",className,"()"])
	ref 	=  eval(ref)
	HANDLERS[key] = {"class":ref,"config":CONFIG[key]["config"]}

f.close()
@app.route('/get/<id>')
def procs(id):
	if id in HANDLERS:
		handler = HANDLERS[id]["class"]
		
		conf = HANDLERS[id]["config"]
		r = {}
		for key in conf:
			handler.init(conf[key])
			r[key] = handler.composite()
			return json.dumps(r)
	else:
		return "[]"
	pass


if __name__== '__main__':
	app.run(host='0.0.0.0',debug=True,threaded=True)