#!/usr/bin/env python2.7 #Jack Dwyer 12-12-2012 import argparse, sys from urlparse import urlparse from flask import Flask, abort, redirect, url_for from flask import render_template import xmlrpclib import utils from client import SupervisorClient app = Flask(__name__) @app.route('/group/<selectedGroup>') def group_list(selectedGroup): fullDetails = {} supervisors = {} fullDetails["totalRunning"] = 0 fullDetails["totalProcesses"] = 0 tables = 0 for group, value in app.clients.items(): if group == selectedGroup: supervisors[group] = [] for supervisor in value: details = supervisor.get_details() supervisors[group].append(details) fullDetails["totalRunning"] += details["totalClientRunning"] fullDetails["totalProcesses"] += details["totalClientProcesses"] tables += 1 if tables == 0: return redirect(url_for('list_all')) fullDetails["totalTables"] = tables fullDetails["supervisors"] = supervisors fullDetails["groups"] = app.groups return render_template('list.html', details=fullDetails) @app.route('/') def list_all(): fullDetails = {} fullDetails["totalRunning"] = 0 fullDetails["totalProcesses"] = 0 print app.clients supervisors = {} for group, value in app.clients.items(): supervisors[group] = [] for supervisor in value: details = supervisor.get_details() supervisors[group].append(details) fullDetails["totalRunning"] += details["totalClientRunning"] fullDetails["totalProcesses"] += details["totalClientProcesses"] fullDetails["totalTables"] = app.totalTables fullDetails["supervisors"] = supervisors fullDetails["groups"] = app.groups return render_template('list.html', details=fullDetails) if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument('-p', '--port', action='store', default=5000, help='Set port to run on') parser.add_argument('--debug', action='store_true', default=False, help='Use to start server in debug mode') results = parser.parse_args() groups = [] clients = {} #Generate Supervisor clients clientID = 0 #for detail in clientDetails: # uri = urlparse(detail[0]) # try: # name = detail[1] # except IndexError: # name = None # # clients.append(SupervisorClient(uri, clientID, name)) supervisors = utils.read_yaml() for key, value in supervisors.items(): uri = urlparse("%s%s%s%s%s" % (value["scheme"], "://", str(key), ":", str(value["port"]))) client = SupervisorClient(uri, clientID) #Add extra details if avaliable try: client.name = value["name"] except KeyError: pass try: client.group = value["group"] if not value["group"] in groups: groups.append(value["group"]) except KeyError: value["group"] = "default" groups.append(value["group"]) try: client.description = value["description"] except KeyError: pass try: clients[value["group"]].append(client) except KeyError: clients[value["group"]] = [] clients[value["group"]].append(client) #clients.append(client) clientID += 1 print clients app.clients = clients app.groups = sorted(groups, key=str.lower) app.totalTables = clientID app.run(host='0.0.0.0', debug=results.debug, port=results.port)