Exemplo n.º 1
0
def _set_alert_status(n, request):
    if n is None:
        raise ValueError('no such node')
    n.suppress_alert = int(request.form['suppress'])
    db.session.add(n)
    db.session.flush()
    file_ipc.write_nodes_proxies_from_db()
Exemplo n.º 2
0
def _set_alert_status(n, request):
    if n is None:
        raise ValueError('no such node')
    n.suppress_alert = int(request.form['suppress'])
    db.session.add(n)
    db.session.flush()
    file_ipc.write_nodes_proxies_from_db()
Exemplo n.º 3
0
 def delete_eru_node(request):
     eru_container_id = request.form['id']
     if request.form['type'] == 'node':
         models.node.delete_eru_instance(eru_container_id)
     else:
         models.proxy.delete_eru_instance(eru_container_id)
     file_ipc.write_nodes_proxies_from_db()
     rm_containers([eru_container_id])
Exemplo n.º 4
0
 def g(request, *args, **kwargs):
     try:
         r = f(request, *args, **kwargs) or ''
         if commit_db:
             models.base.db.session.commit()
             file_ipc.write_nodes_proxies_from_db()
         return r
     except KeyError, e:
         r = dict(reason='missing argument', missing=e.message)
Exemplo n.º 5
0
 def g(request, *args, **kwargs):
     try:
         r = f(request, *args, **kwargs) or ''
         if commit_db:
             models.base.db.session.commit()
             file_ipc.write_nodes_proxies_from_db()
         return r
     except KeyError, e:
         r = dict(reason='missing argument', missing=e.message)
Exemplo n.º 6
0
def run_app(app, debug):
    import file_ipc
    file_ipc.write_nodes_proxies_from_db()
    if debug:
        app.debug = True
        return app.run(port=config.SERVER_PORT)
    from app import WrapperApp
    WrapperApp(app, {
        'bind': '0.0.0.0:%d' % config.SERVER_PORT,
        'workers': 2,
        'timeout': 86400,
    }).run()
Exemplo n.º 7
0
def main():
    config.init_logging()

    if config.OPEN_FALCON and config.OPEN_FALCON['host_query']:
        stats.init(**config.OPEN_FALCON)

    import handlers
    app = handlers.base.app
    app.config['SQLALCHEMY_DATABASE_URI'] = config.SQLALCHEMY_DATABASE_URI
    models.base.init_db(app)

    import file_ipc
    file_ipc.write_nodes_proxies_from_db()
    debug = config.DEBUG == 1
    app.debug = debug
    app.run(host='127.0.0.1' if debug else '0.0.0.0', port=config.SERVER_PORT)
Exemplo n.º 8
0
def main():
    config.init_logging()

    if config.OPEN_FALCON and config.OPEN_FALCON['host_query']:
        stats.init(**config.OPEN_FALCON)

    import handlers
    app = handlers.base.app
    app.config['SQLALCHEMY_DATABASE_URI'] = config.SQLALCHEMY_DATABASE_URI
    models.base.init_db(app)

    import file_ipc
    file_ipc.write_nodes_proxies_from_db()
    debug = config.DEBUG == 1
    app.debug = debug
    app.run(host='127.0.0.1' if debug else '0.0.0.0', port=config.SERVER_PORT)
Exemplo n.º 9
0
def add_node_to_balance_for(host, port, plan, slots):
    node = models.node.get_by_host_port(host, int(port))
    if node is None or node.assignee_id is None:
        logging.info(
            'No node or cluster found for %s:%d (This should be a corrupt)',
            host, port)
        return
    if node.assignee.current_task is not None:
        logging.info(
            'Fail to auto balance cluster %d for node %s:%d : busy',
            node.assignee_id, host, port)
        return

    task, cid, new_host = _prepare_master_node(
        node, plan.pod, plan.aof, plan.host)
    cids = [cid]
    try:
        cids.extend(_add_slaves(
            plan.slaves, task, node.assignee_id,
            new_host, plan.pod, plan.aof))

        migrating_slots = slots[: len(slots) / 2]
        task.add_step(
            'migrate', src_host=node.host, src_port=node.port,
            dst_host=new_host, dst_port=6379, slots=migrating_slots)
        logging.info('Migrating %d slots from %s to %s',
                     len(migrating_slots), host, new_host)
        db.session.add(task)
        db.session.flush()
        lock = task.acquire_lock()
        if lock is not None:
            logging.info('Auto balance task %d has been emit; lock id=%d',
                         task.id, lock.id)
            file_ipc.write_nodes_proxies_from_db()
            return
        logging.info('Auto balance task fail to lock,'
                     ' discard auto balance this time.'
                     ' Delete container id=%s', cids)
        _rm_containers(cids)
    except BaseException as exc:
        logging.info('Remove container %s and rollback', cids)
        _rm_containers(cids)
        db.session.rollback()
        raise
Exemplo n.º 10
0
def del_node(request):
    models.node.delete_free_instance(
        request.form['host'], int(request.form['port']))
    file_ipc.write_nodes_proxies_from_db()
Exemplo n.º 11
0
def add_node(request):
    models.node.create_instance(
        request.form['host'], int(request.form['port']),
        int(request.form['mem']))
    file_ipc.write_nodes_proxies_from_db()
Exemplo n.º 12
0
 def write_polling_targets(self):
     file_ipc.write_nodes_proxies_from_db()
Exemplo n.º 13
0
    def test_suppress_alert(self):
        app = handlers.base.app

        with app.test_client() as client:
            r = client.post('/nodes/add',
                            data={
                                'host': '127.0.0.1',
                                'port': '7100',
                                'mem': '1048576',
                            })
            self.assertEqual(200, r.status_code)

            r = client.post('/nodes/add',
                            data={
                                'host': '127.0.0.1',
                                'port': '7101',
                                'mem': '1048576',
                            })
            self.assertEqual(200, r.status_code)

            r = client.post('/set_alert_status/redis',
                            data={
                                'host': '127.0.0.1',
                                'port': '7100',
                                'suppress': '0',
                            })
            self.assertEqual(200, r.status_code)

            r = client.post('/cluster/autojoin',
                            data={
                                'host': '127.0.0.1',
                                'port': '7100',
                            })
            self.assertEqual(200, r.status_code)
            cluster_id = r.data

            r = client.post('/cluster/set_info',
                            data={
                                'cluster_id': cluster_id,
                                'descr': '.',
                                'proxy_host': '127.0.0.1',
                                'proxy_port': '8889',
                            })
            self.assertEqual(200, r.status_code)

            file_ipc.write_nodes_proxies_from_db()
            with open(file_ipc.POLL_FILE, 'r') as fin:
                polls = json.loads(fin.read())

            self.assertEqual(2, len(polls['nodes']))
            poll_nodes = sorted(polls['nodes'],
                                key=lambda n: '%s:%d' % (n['host'], n['port']))

            n = poll_nodes[0]
            self.assertEqual('127.0.0.1', n['host'])
            self.assertEqual(7100, n['port'])
            self.assertEqual(0, n['suppress_alert'])

            n = poll_nodes[1]
            self.assertEqual('127.0.0.1', n['host'])
            self.assertEqual(7101, n['port'])
            self.assertEqual(1, n['suppress_alert'])

            self.assertEqual(1, len(polls['proxies']))
            poll_proxies = sorted(polls['proxies'],
                                  key=lambda n: '%s:%d' %
                                  (n['host'], n['port']))

            n = poll_proxies[0]
            self.assertEqual('127.0.0.1', n['host'])
            self.assertEqual(8889, n['port'])
            self.assertEqual(1, n['suppress_alert'])

            r = client.post('/set_alert_status/redis',
                            data={
                                'host': '127.0.0.1',
                                'port': '7101',
                                'suppress': '0',
                            })
            self.assertEqual(200, r.status_code)

            r = client.post('/set_alert_status/redis',
                            data={
                                'host': '127.0.0.1',
                                'port': '7102',
                                'suppress': '0',
                            })
            self.assertEqual(400, r.status_code)
            self.assertEqual({'reason': 'no such node'}, json.loads(r.data))

            file_ipc.write_nodes_proxies_from_db()
            with open(file_ipc.POLL_FILE, 'r') as fin:
                polls = json.loads(fin.read())

            self.assertEqual(2, len(polls['nodes']))
            poll_nodes = sorted(polls['nodes'],
                                key=lambda n: '%s:%d' % (n['host'], n['port']))

            n = poll_nodes[0]
            self.assertEqual('127.0.0.1', n['host'])
            self.assertEqual(7100, n['port'])
            self.assertEqual(0, n['suppress_alert'])

            n = poll_nodes[1]
            self.assertEqual('127.0.0.1', n['host'])
            self.assertEqual(7101, n['port'])
            self.assertEqual(0, n['suppress_alert'])

            self.assertEqual(1, len(polls['proxies']))
            poll_proxies = sorted(polls['proxies'],
                                  key=lambda n: '%s:%d' %
                                  (n['host'], n['port']))

            n = poll_proxies[0]
            self.assertEqual('127.0.0.1', n['host'])
            self.assertEqual(8889, n['port'])
            self.assertEqual(1, n['suppress_alert'])
Exemplo n.º 14
0
    def test_suppress_alert(self):
        app = handlers.base.app

        with app.test_client() as client:
            r = client.post('/nodes/add', data={
                'host': '127.0.0.1',
                'port': '7100',
                'mem': '1048576',
            })
            self.assertEqual(200, r.status_code)

            r = client.post('/nodes/add', data={
                'host': '127.0.0.1',
                'port': '7101',
                'mem': '1048576',
            })
            self.assertEqual(200, r.status_code)

            r = client.post('/set_alert_status/redis', data={
                'host': '127.0.0.1',
                'port': '7100',
                'suppress': '0',
            })
            self.assertEqual(200, r.status_code)

            r = client.post('/cluster/autojoin', data={
                'host': '127.0.0.1',
                'port': '7100',
            })
            self.assertEqual(200, r.status_code)
            cluster_id = r.data

            r = client.post('/cluster/set_info', data={
                'cluster_id': cluster_id,
                'descr': '.',
                'proxy_host': '127.0.0.1',
                'proxy_port': '8889',
            })
            self.assertEqual(200, r.status_code)

            file_ipc.write_nodes_proxies_from_db()
            with open(file_ipc.POLL_FILE, 'r') as fin:
                polls = json.loads(fin.read())

            self.assertEqual(2, len(polls['nodes']))
            poll_nodes = sorted(polls['nodes'],
                                key=lambda n: '%s:%d' % (n['host'], n['port']))

            n = poll_nodes[0]
            self.assertEqual('127.0.0.1', n['host'])
            self.assertEqual(7100, n['port'])
            self.assertEqual(0, n['suppress_alert'])

            n = poll_nodes[1]
            self.assertEqual('127.0.0.1', n['host'])
            self.assertEqual(7101, n['port'])
            self.assertEqual(1, n['suppress_alert'])

            self.assertEqual(1, len(polls['proxies']))
            poll_proxies = sorted(
                polls['proxies'],
                key=lambda n: '%s:%d' % (n['host'], n['port']))

            n = poll_proxies[0]
            self.assertEqual('127.0.0.1', n['host'])
            self.assertEqual(8889, n['port'])
            self.assertEqual(1, n['suppress_alert'])

            r = client.post('/set_alert_status/redis', data={
                'host': '127.0.0.1',
                'port': '7101',
                'suppress': '0',
            })
            self.assertEqual(200, r.status_code)

            r = client.post('/set_alert_status/redis', data={
                'host': '127.0.0.1',
                'port': '7102',
                'suppress': '0',
            })
            self.assertEqual(400, r.status_code)
            self.assertEqual({'reason': 'no such node'}, json.loads(r.data))

            file_ipc.write_nodes_proxies_from_db()
            with open(file_ipc.POLL_FILE, 'r') as fin:
                polls = json.loads(fin.read())

            self.assertEqual(2, len(polls['nodes']))
            poll_nodes = sorted(polls['nodes'],
                                key=lambda n: '%s:%d' % (n['host'], n['port']))

            n = poll_nodes[0]
            self.assertEqual('127.0.0.1', n['host'])
            self.assertEqual(7100, n['port'])
            self.assertEqual(0, n['suppress_alert'])

            n = poll_nodes[1]
            self.assertEqual('127.0.0.1', n['host'])
            self.assertEqual(7101, n['port'])
            self.assertEqual(0, n['suppress_alert'])

            self.assertEqual(1, len(polls['proxies']))
            poll_proxies = sorted(
                polls['proxies'],
                key=lambda n: '%s:%d' % (n['host'], n['port']))

            n = poll_proxies[0]
            self.assertEqual('127.0.0.1', n['host'])
            self.assertEqual(8889, n['port'])
            self.assertEqual(1, n['suppress_alert'])
Exemplo n.º 15
0
def add_node(request):
    models.node.create_instance(request.form['host'],
                                int(request.form['port']),
                                int(request.form['mem']))
    file_ipc.write_nodes_proxies_from_db()
Exemplo n.º 16
0
def del_node(request):
    models.node.delete_free_instance(request.form['host'],
                                     int(request.form['port']))
    file_ipc.write_nodes_proxies_from_db()