1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- """
- 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, session, request, redirect, Response
- from flask.templating import render_template
- from flask_session import Session
- import sys
- import os
- import json
- import re
- import monitor
- import Queue
- 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 :
- if key == "monitor":
- continue
- className = CONFIG[key]['class']
- ref = "".join(["monitor.",className,"()"])
- ref = eval(ref)
- #ref.init(CONFIG[key]['config'])
- HANDLERS[key] = {"class":ref,"config":CONFIG[key]["config"]}
- f.close()
- #
- #
- from threading import Timer,Thread
- ProcessQueue = Queue.LifoQueue()
- mthread = monitor.Monitor(HANDLERS,ProcessQueue,'processes')
- mthread.start()
- #(Timer(10,mthread.run)).start()
- #mthread = Process(target=monitor.Monitor,args=(HANDLERS,ProcessQueue,'processes'))
- #mthread.start()
- @app.route('/get/<id>')
- def procs(id):
- if id in HANDLERS and len(mthread.logs)>0:
- # r = ProcessQueue.get(block=True,timeout=15)
- index = len(mthread.logs) -1
- r = mthread.logs[index]
- return json.dumps(r)
- else:
- return "[]"
- pass
- @app.route('/trends')
- def trends ():
- id = request.args.get('id')
- # key = request.args.get('key')
- handler = monitor.mapreducer()
- r = handler.filter(id,mthread.logs)
- r = handler.run(r,handler.mapper,handler.reducer)
-
- return json.dumps(r)
- @app.route('/dashboard')
- def dashboard():
- context = PARAMS['context']
- return render_template('dashboard.html',context=context)
- if __name__== '__main__':
- app.secret_key = 'A0Zr98j/3yX R~XHH!jmN]LWX=?RT'
- app.run(host='0.0.0.0',debug=True,threaded=True)
-
|