Example #1
0
def _create_app_manager():
    my_manager = ServerManager()
    if isfile(ServerManager.PICKLE_FILENAME):
        logger.info("Load server data from file")
        my_manager.load_state(init=True)
    else:
        logger.info("Create new server data")
        asset_list = [
            PestBox("AutumnFly"),
            PestBox("Greenfly"),
            PestBox("Dogmite"),
            CFS("itchy", MetaswitchAsset.SOLARIS)]
        my_manager.add_assets(asset_list)
    return my_manager
Example #2
0
    async def on_reaction_add(
        self,
        reaction: discord.Reaction,
        user: discord.User,
    ) -> None:
        if user == self.user:
            # Don't let the bot listen to reactions from itself
            return

        mgr = ServerManager.try_load(self.lock, self.mgr_path)
        await mgr.handle_reaction_add(self, reaction, user, self.db_conn)
Example #3
0
    def __init__(self):
        gtk.Window.__init__(self)

        pynotify.init('PyCruiseTray')

        # Create ServerManager
        self.server_manager = ServerManager()

        # Load servers
        self.load_servers()

        # Load BuildIcons
        self.build_icons = BuildIcons()

        self.statusicon = gtk.StatusIcon()
        self.statusicon.set_from_stock(gtk.STOCK_APPLY)
        self.statusicon.connect("popup-menu", self.right_click_event)
        self.statusicon.connect("activate", self.status_clicked)
        self.statusicon.set_tooltip("PyCruiseTray")

        self.connect("delete-event", self.delete_event)
        self.connect("destroy", lambda w: gtk.main_quit())

        # Create TreeStore for Server list
        self.liststore = gtk.ListStore(gtk.gdk.Pixbuf, str, str)
        self.treeview = gtk.TreeView(self.liststore)

        # Create TreeViewColumns to display data
        cell = gtk.CellRendererPixbuf()
        col = gtk.TreeViewColumn("Status", cell, pixbuf=0)
        self.treeview.append_column(col)

        cell = gtk.CellRendererText()
        col = gtk.TreeViewColumn("Name", cell, text=1)
        self.treeview.append_column(col)

        cell = gtk.CellRendererText()
        col = gtk.TreeViewColumn("URL", cell, text=2)
        self.treeview.append_column(col)

        self.add(self.treeview)
        self.set_size_request(450, 300)
        self.set_position(gtk.WIN_POS_CENTER)
        self.set_title("PyCruiseTray")

        self.menu = ContextMenu(self, self.build_icons)
        self.show_all()

        # Start update thread (run every 5 minutes)
        self.update_projects()
        self.thread = gobject.timeout_add(60000, self.update_projects)
Example #4
0
    async def on_message(self, message: discord.Message) -> None:
        if message.author == self.user:
            # Don't let the bot respond to itself
            return

        # Test messages are designated with a leading "tt "
        if self.is_test:
            if message.content.startswith("tt "):
                message.content = message.content[len("tt "):]
            else:
                return

        mgr = ServerManager.try_load(self.lock, self.mgr_path)
        await mgr.handle_message(self, message, self.db_conn)
Example #5
0
def setup_app(app: Flask, args: object):
    setup_logger()

    # if enabled allow the GPU to run the server, else use the CPU
    torch_device = 'cuda' if args.cuda and torch.cuda.is_available() else 'cpu'
    print(f'Using device: {torch_device}...')
    logging.info(f'Using device: {torch_device}...')
    SERVER_STATE["server_manager"] = ServerManager(thread_manager,
                                                   torch_device)
    if args.load_state:
        with open("server_state.pkl", 'rb') as f:
            state = pickle.load(f)
            SERVER_STATE["server_manager"].load_state(state, "server_manager")

    @app.route('/api/set_session/', methods=['GET'])
    def create_experiment():
        session_id, ner_class, user_name = get_keys_from_data(
            request.args, 'session_id', 'ner_class', 'user_name')
        server_manager = SERVER_STATE["server_manager"]
        user_state = server_manager.get_user_state(user_name)
        building = user_state.set_session_state(session_id=session_id,
                                                ner_class=ner_class)
        if not building:
            logging.info("Preserving state, no need to reload")
        return jsonify({"messsage": "success"}), 201

    @app.route('/api/get_query/', methods=['GET'])
    def get_query():
        user_name = get_key_from_data(request.args, 'user_name')
        server_manager = SERVER_STATE["server_manager"]
        user_state = server_manager.get_user_state(user_name)
        al_manager = user_state.get_al_manager()
        if al_manager.get_is_start():
            user_state.set_start_time()

        query, query_predictions, final_batch = al_manager.get_query()
        if query is None and user_state.get_end_time() is None:
            user_state.set_end_time()
        return jsonify({
            "results": query,
            "predictions": query_predictions,
            "final_batch": final_batch,
        }), 201

    @app.route('/api/add_examples/', methods=['POST'])
    def add_examples():
        '''
        assuming arguments come as a list of (sentence_id, sentence, label)
        in an arugment called examples
        '''
        user_name = get_key_from_data(request.args, 'user_name')
        server_manager = SERVER_STATE["server_manager"]
        al_manager = server_manager.get_user_state(user_name).get_al_manager()

        json_data = json.loads(request.data)
        examples = get_keys_from_data(json_data, 'data')[0]
        sentence_ids = []
        labels = []
        try:
            for s_id, (s, ranges) in examples.items():
                sentence_ids.append(int(s_id))
                labels.append(
                    al_manager.convert_word_ranges_to_labels(s, ranges))
            al_manager.update_examples(sentence_ids, labels)
            return jsonify({"messsage": "success"}), 201
        except:
            with open('log.txt', 'w') as f:
                f.writelines(str(json_data))
                f.writelines(str(examples.items()))

    @app.route('/api/train/', methods=['GET'])
    def get_experiment():
        user_name = get_key_from_data(request.args, 'user_name')
        server_manager = SERVER_STATE["server_manager"]
        al_manager = server_manager.get_user_state(user_name).get_al_manager()
        thread_id = al_manager.train()
        return jsonify({
            'thread_id': thread_id,
        }), 200

    @app.route('/api/evaluate/', methods=['GET'])
    def get_all_experiments():
        user_name = get_key_from_data(request.args, 'user_name')
        server_manager = SERVER_STATE["server_manager"]
        al_manager = server_manager.get_user_state(user_name).get_al_manager()
        eval_results = al_manager.evaluate()
        return jsonify(eval_results), 200

    @app.route('/api/sessions/', methods=['GET'])
    def get_all_sessions():
        db_manager = SERVER_STATE["database_manager"]
        return jsonify(db_manager.get_all_session_info()), 200

    @app.route('/api/predictions/', methods=['GET'])
    def get_predictions():
        # retrieves precomputed predictions
        user_name = get_key_from_data(request.args, 'user_name')
        server_manager = SERVER_STATE["server_manager"]
        al_manager = server_manager.get_user_state(user_name).get_al_manager()
        if al_manager is None:
            return jsonify({"error": "unknown user"}), 200

        return jsonify(al_manager.get_predictions()), 200

    @app.route('/api/progress/', methods=['GET'])
    def get_progress():
        thread_id = int(get_keys_from_data(request.args, 'thread_id')[0])
        thread_manager = SERVER_STATE["thread_manager"]
        prog = thread_manager.get_progress(thread_id)
        return jsonify(prog), 200

    @app.route('/api/trainer_progress/', methods=['GET'])
    def get_trainer_progress():
        user_name = get_key_from_data(request.args, 'user_name')
        server_manager = SERVER_STATE["server_manager"]
        al_manager = server_manager.get_user_state(user_name).get_al_manager()
        res = al_manager.get_training_progress()
        return jsonify(res, ), 200

    @app.route('/api/compute_ground_truth/', methods=['GET'])
    def get_ground_truth_result():
        user_name = get_key_from_data(request.args, 'user_name')
        server_manager = SERVER_STATE["server_manager"]
        al_manager = server_manager.get_user_state(user_name).get_al_manager()
        res = al_manager.evaluate_ground_truth()
        return jsonify(res, ), 200

    @app.route('/api/users/', methods=['GET'])
    def get_all_users():
        server_manager = SERVER_STATE["server_manager"]
        return jsonify(server_manager.get_all_users()), 200

    @app.route('/api/add_users/', methods=['POST'])
    def add_user():
        server_manager = SERVER_STATE["server_manager"]

        json_data = json.loads(request.data)
        user_name = get_key_from_data(json_data, 'user_name')
        res = server_manager.add_user(user_name)
        return jsonify(res), 201

    @app.route('/api/save_server_state/', methods=['GET'])
    def save_server_state():
        state = {}
        server_manager = SERVER_STATE["server_manager"]
        server_manager.save_state(state, "server_manager")
        with open("server_state.pkl", "wb") as f:
            pickle.dump(state, f)

        return jsonify("Success"), 201

    @app.route('/api/save_model/', methods=['GET'])
    def save_user_model():
        server_manager = SERVER_STATE["server_manager"]
        user_name = get_key_from_data(request.args, 'user_name')
        al_manager = server_manager.get_user_state(user_name).save_model()

        return jsonify("Success"), 201

    @app.route('/api/load_model/', methods=['GET'])
    def load_user_model():
        server_manager = SERVER_STATE["server_manager"]
        user_name = get_key_from_data(request.args, 'user_name')
        al_manager = server_manager.get_user_state(user_name).load_model()

        return jsonify("Success"), 201

    @app.route('/api/submit_turk_survey/', methods=['POST'])
    def submit_turk_survey():
        user_name = get_key_from_data(request.args, 'user_name')
        server_manager = SERVER_STATE["server_manager"]
        firebase_manager = SERVER_STATE["firebase_manager"]
        server_manager = SERVER_STATE["server_manager"]
        user_state = server_manager.get_user_state(user_name)
        al_manager = server_manager.get_user_state(user_name).get_al_manager()
        preds = al_manager.get_predictions()

        json_data = json.loads(request.data)
        survey_info = json_data['submit_data']
        survey_info['user_name'] = user_name
        survey_info['start_time'] = user_state.get_start_time()
        survey_info['end_time'] = user_state.get_end_time()
        survey_info['labeled_example_sizes'] = preds['labeled_set_sizes']
        survey_info['training_summary'] = preds['training_summary']
        survey_info['flipped_data'] = preds['flipped_data']
        survey_info['experiment_stats'] = al_manager.experiment_stats

        survey_code = survey_utils.submit_survey(firebase_manager, survey_info)

        try:
            server_manager.get_user_state(user_name).save_model()
            server_manager.get_user_state(user_name).save_data()
        except Exception as e:
            print('Error ocurred while attempting to save state')
            logging.exception(e)

        return jsonify({"survey_code": survey_code}), 201

    @app.route('/api/has_completed_task/', methods=['GET'])
    def check_if_user_completed_task():
        server_manager = SERVER_STATE["server_manager"]
        user_name = get_key_from_data(request.args, 'user_name')
        firebase_manager = SERVER_STATE["firebase_manager"]
        exists = firebase_manager.user_exists(user_name)

        return jsonify({"exists": exists}), 200

    @app.route('/api/used_cheatsheet/', methods=['GET'])
    def used_cheatsheet():
        user_name = get_key_from_data(request.args, 'user_name')
        server_manager = SERVER_STATE["server_manager"]
        user_state = server_manager.get_user_state(user_name)
        al_manager = user_state.get_al_manager()
        al_manager.experiment_stats["used_cheatsheet"].append(time.time())
        return jsonify({"success": True}), 200
from sqlalchemy.orm.exc import NoResultFound
from setup_database import Base, Player, Server, Match, Player_Match, User
from flask import session as login_session
import string
import os
import random
import json
import socket
from flask import make_response, send_from_directory
import requests
from server_manager import ServerManager
from oauth2client.client import flow_from_clientsecrets
from oauth2client.client import FlowExchangeError
import httplib2

manager = ServerManager()
app = Flask(__name__)
engine = create_engine('sqlite:///ranks.db')
Base.metadata.bind = engine
DBSession = sessionmaker(bind=engine)
session = DBSession()

CLIENT_ID = json.loads(open('client_secrets.json',
                            'r').read())['web']['client_id']


@app.context_processor
def utility_processor():
    user = None
    if 'email' in login_session:
        user = session.query(User).\
import time, sys
from app import app
sys.path.append('/home/pi/Documents/3CB101-Pi/project/web_server/server')
sys.path.append("server")
from server_manager import ServerManager
from flask import Flask, Response, request, render_template, redirect

global server_manager_instance
server_manager_instance = ServerManager()
server_manager_instance.setup()
server_manager_instance.start()

socket_ip = server_manager_instance.get_socket_ip()


@app.route('/socket_call')
def socket_call():
    socket_instance = server_manager_instance.get_socket_instance()
    socket_code = request.args.get('socket_code', None)
    if socket_code == "get_data":
        print('api call: ', get_data())
    elif socket_code != None:
        socket_instance.server_request(socket_code)
    return redirect("/public/debug")


@app.route('/start')
def start():
    socket_instance = server_manager_instance.get_socket_instance()
    socket_instance.server_request('session_start')
    return redirect("/public/debug")
Example #8
0
class PyCruiseTray(gtk.Window):
    def __init__(self):
        gtk.Window.__init__(self)

        pynotify.init('PyCruiseTray')

        # Create ServerManager
        self.server_manager = ServerManager()

        # Load servers
        self.load_servers()

        # Load BuildIcons
        self.build_icons = BuildIcons()

        self.statusicon = gtk.StatusIcon()
        self.statusicon.set_from_stock(gtk.STOCK_APPLY)
        self.statusicon.connect("popup-menu", self.right_click_event)
        self.statusicon.connect("activate", self.status_clicked)
        self.statusicon.set_tooltip("PyCruiseTray")

        self.connect("delete-event", self.delete_event)
        self.connect("destroy", lambda w: gtk.main_quit())

        # Create TreeStore for Server list
        self.liststore = gtk.ListStore(gtk.gdk.Pixbuf, str, str)
        self.treeview = gtk.TreeView(self.liststore)

        # Create TreeViewColumns to display data
        cell = gtk.CellRendererPixbuf()
        col = gtk.TreeViewColumn("Status", cell, pixbuf=0)
        self.treeview.append_column(col)

        cell = gtk.CellRendererText()
        col = gtk.TreeViewColumn("Name", cell, text=1)
        self.treeview.append_column(col)

        cell = gtk.CellRendererText()
        col = gtk.TreeViewColumn("URL", cell, text=2)
        self.treeview.append_column(col)

        self.add(self.treeview)
        self.set_size_request(450, 300)
        self.set_position(gtk.WIN_POS_CENTER)
        self.set_title("PyCruiseTray")

        self.menu = ContextMenu(self, self.build_icons)
        self.show_all()

        # Start update thread (run every 5 minutes)
        self.update_projects()
        self.thread = gobject.timeout_add(60000, self.update_projects)

    def load_servers(self):
        self.servers = []
        for server in self.server_manager.list():
            self.servers.append(CruiseControlServer(server['name'], server['url']))

    def update_projects(self):
        projects = []
        for server in self.servers:
            server.load_projects()
            projects.extend(server.projects)

        self.show_projects_list(projects)
        self.menu.update(projects)
        failures = filter((lambda p: 'Failure' in p.get_build_status()), projects)


        # Change StatusIcon accordingly
        if len(failures) > 0:
            self.statusicon.set_from_pixbuf(self.build_icons.get_icon('Failure.Sleeping'))
        else:
            self.statusicon.set_from_pixbuf(self.build_icons.get_icon('Success.Sleeping'))

        for fail in failures:
            notification = pynotify.Notification("Build failure", "Project %s failed to build!" % fail.name)
            notification.attach_to_status_icon(self.statusicon)
            notification.set_urgency(pynotify.URGENCY_CRITICAL)
            notification.set_timeout(10000)
            notification.show()
        return True

    def show_projects_list(self, projects):
        self.liststore.clear()
        for project in projects:
            icon = self.build_icons.get_icon(project.get_build_status())
            self.liststore.append([icon, project.name, project.url])

    def status_clicked(self, status):
        self.show_all()

    def delete_event(self, window, event):
        self.hide_on_delete()
        return True
		
    def right_click_event(self, icon, button, time):
        self.menu.popup(None, None, gtk.status_icon_position_menu, button, time, self.statusicon)