You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
1.3 KiB
Python
62 lines
1.3 KiB
Python
"""
|
|
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) |