示例#1
0
def routers(cluster_id):
    logger.debug("routers({cluster_id})".format(**locals()))
    if cluster_id not in ShardedClusters():
        return send_result(404)
    router_docs = []
    for router_info in ShardedClusters().routers(cluster_id):
        # Server id is the same as router id.
        server_id = router_info['id']
        links = [
            sharded_cluster_link('delete-router',
                                 cluster_id,
                                 router_id=server_id),
            server_link('get-server-info', server_id)
        ]
        router_info['links'] = links
        router_docs.append(router_info)
    result = {
        'routers':
        router_docs,
        'links': [
            sharded_cluster_link('get-sharded-cluster-info', cluster_id),
            sharded_cluster_link('get-shards', cluster_id),
            sharded_cluster_link('get-configsvrs', cluster_id),
            sharded_cluster_link('get-routers', cluster_id, self_rel=True)
        ]
    }
    return send_result(200, result)
示例#2
0
def shards(cluster_id):
    logger.debug("shards({cluster_id})".format(**locals()))
    if cluster_id not in ShardedClusters():
        return send_result(404)
    shard_docs = []
    for shard_info in ShardedClusters().members(cluster_id):
        shard_id = shard_info['id']
        resource_id = shard_info['_id']
        shard_info['links'] = [
            sharded_cluster_link('get-shard-info', cluster_id, shard_id),
            sharded_cluster_link('delete-shard', cluster_id, shard_id),
            sharded_cluster_link('get-sharded-cluster-info', cluster_id),
        ]
        shard_info['links'].append(_server_or_rs_link(shard_info))
        shard_docs.append(shard_info)
    result = {
        'shards':
        shard_docs,
        'links': [
            sharded_cluster_link('get-sharded-cluster-info', cluster_id),
            sharded_cluster_link('get-shards', cluster_id, self_rel=True),
            sharded_cluster_link('get-configsvrs', cluster_id),
            sharded_cluster_link('get-routers', cluster_id)
        ]
    }
    return send_result(200, result)
示例#3
0
def sh_command(cluster_id):
    logger.debug("sh_command({cluster_id})".format(**locals()))
    if cluster_id not in ShardedClusters():
        return send_result(404)
    command = get_json(request.body).get('action')
    if command is None:
        raise RequestError('Expected body with an {"action": ...}.')
    result = {
        'command_result':
        ShardedClusters().command(cluster_id, command),
        'links':
        all_sharded_cluster_links(cluster_id, rel_to='sharded-cluster-command')
    }
    return send_result(200, result)
示例#4
0
def router_add(cluster_id):
    logger.debug("router_add({cluster_id})".format(**locals()))
    if cluster_id not in ShardedClusters():
        return send_result(404)
    data = get_json(request.body)
    result = ShardedClusters().router_add(cluster_id, data)
    router_id = result['id']
    result['links'] = [
        server_link('get-server-info', router_id),
        sharded_cluster_link('add-router', cluster_id, self_rel=True),
        sharded_cluster_link('delete-router', cluster_id, router_id=router_id),
        sharded_cluster_link('get-sharded-cluster-info', cluster_id),
        sharded_cluster_link('get-routers', cluster_id),
    ]
    return send_result(200, result)
示例#5
0
def _sh_create(params):
    cluster_id = ShardedClusters().create(params)
    result = ShardedClusters().info(cluster_id)
    result['links'] = all_sharded_cluster_links(cluster_id)
    for router in result['routers']:
        router['links'] = [
            server_link('get-server-info', server_id=router['id'])
        ]
    for cfg in result['configsvrs']:
        cfg['links'] = [server_link('get-server-info', server_id=cfg['id'])]
    for sh in result['shards']:
        sh['links'] = [
            sharded_cluster_link('get-shard-info', cluster_id, sh['id']),
            _server_or_rs_link(sh)
        ]
    return result
示例#6
0
def shard_add(cluster_id):
    logger.debug("shard_add({cluster_id})".format(**locals()))
    if cluster_id not in ShardedClusters():
        return send_result(404)
    data = get_json(request.body)
    result = ShardedClusters().member_add(cluster_id, data)
    resource_id = result['_id']
    shard_id = result['id']
    result['links'] = [
        sharded_cluster_link('get-shard-info', cluster_id, shard_id),
        sharded_cluster_link('delete-shard', cluster_id, shard_id),
        sharded_cluster_link('add-shard', cluster_id, self_rel=True),
        sharded_cluster_link('get-sharded-cluster-info', cluster_id),
        sharded_cluster_link('get-shards', cluster_id)
    ]
    result['links'].append(_server_or_rs_link(result))
    return send_result(200, result)
示例#7
0
def info(cluster_id):
    logger.debug("info({cluster_id})".format(**locals()))
    if cluster_id not in ShardedClusters():
        return send_result(404)
    result = ShardedClusters().info(cluster_id)
    result['links'] = all_sharded_cluster_links(
        cluster_id, rel_to='get-sharded-cluster-info')
    for router in result['routers']:
        router['links'] = [
            server_link('get-server-info', server_id=router['id'])
        ]
    for cfg in result['configsvrs']:
        cfg['links'] = [server_link('get-server-info', server_id=cfg['id'])]
    for sh in result['shards']:
        sh['links'] = [
            sharded_cluster_link('get-shard-info', cluster_id, sh['id']),
            _server_or_rs_link(sh)
        ]
    return send_result(200, result)
示例#8
0
def configsvrs(cluster_id):
    logger.debug("configsvrs({cluster_id})".format(**locals()))
    if cluster_id not in ShardedClusters():
        return send_result(404)
    config_docs = []
    for config_info in ShardedClusters().configsvrs(cluster_id):
        server_id = config_info['id']
        config_info['links'] = [server_link('get-server-info', server_id)]
        config_docs.append(config_info)
    result = {
        'configsvrs':
        config_docs,
        'links': [
            sharded_cluster_link('get-sharded-cluster-info', cluster_id),
            sharded_cluster_link('get-shards', cluster_id),
            sharded_cluster_link('get-configsvrs', cluster_id, self_rel=True),
            sharded_cluster_link('get-routers', cluster_id)
        ]
    }
    return send_result(200, result)
示例#9
0
def sh_list():
    logger.debug("sh_list()")
    sharded_clusters = []
    for cluster_id in ShardedClusters():
        cluster_info = {'id': cluster_id}
        cluster_info['links'] = all_sharded_cluster_links(
            cluster_id, rel_to='get-sharded-clusters')
        sharded_clusters.append(cluster_info)
    response = {
        'links': [
            base_link('service'),
            base_link('get-releases'),
            sharded_cluster_link('get-sharded-clusters', self_rel=True),
            sharded_cluster_link('add-sharded-cluster'),
            replica_set_link('get-replica-sets'),
            server_link('get-servers')
        ]
    }
    response['sharded_clusters'] = sharded_clusters
    return send_result(200, response)
 def setUp(self):
     self.sh = ShardedClusters()
     PortPool().change_range()
 def setUp(self):
     self.sh = ShardedClusters()
     set_releases({"default-release": os.environ.get('MONGOBIN', '')},
                  'default-release')
     PortPool().change_range()
示例#12
0
def shard_del(cluster_id, shard_id):
    logger.debug("member_del({cluster_id}), {shard_id}".format(**locals()))
    if cluster_id not in ShardedClusters():
        return send_result(404)
    result = ShardedClusters().member_del(cluster_id, shard_id)
    return send_result(204, result)
示例#13
0
def set_releases(releases=None, default_release=None):
    Servers().set_settings(releases, default_release)
    ReplicaSets().set_settings(releases, default_release)
    ShardedClusters().set_settings(releases, default_release)
示例#14
0
def sh_del(cluster_id):
    logger.debug("sh_del({cluster_id})".format(**locals()))
    if cluster_id not in ShardedClusters():
        return send_result(404)
    result = ShardedClusters().remove(cluster_id)
    return send_result(204, result)
 def test_singleton(self):
     self.assertEqual(id(self.sh), id(ShardedClusters()))
示例#16
0
def cleanup_storage():
    ShardedClusters().cleanup()
    ReplicaSets().cleanup()
    Servers().cleanup()
示例#17
0
def router_del(cluster_id, router_id):
    logger.debug("router_del({cluster_id}), {router_id}".format(**locals()))
    if cluster_id not in ShardedClusters():
        return send_result(404)
    result = ShardedClusters().router_del(cluster_id, router_id)
    return send_result(204, result)
示例#18
0
def cleanup_storage(*args):
    """Clean up processes after SIGTERM or SIGINT is received."""
    ShardedClusters().cleanup()
    ReplicaSets().cleanup()
    Servers().cleanup()
    sys.exit(0)
示例#19
0
    sh_create_by_id,
    Route('/sharded_clusters/<cluster_id>', method='DELETE'):
    sh_del,
    Route('/sharded_clusters/<cluster_id>/shards', method='POST'):
    shard_add,
    Route('/sharded_clusters/<cluster_id>/shards', method='GET'):
    shards,
    Route('/sharded_clusters/<cluster_id>/configsvrs', method='GET'):
    configsvrs,
    Route('/sharded_clusters/<cluster_id>/routers', method='GET'):
    routers,
    Route('/sharded_clusters/<cluster_id>/routers', method='POST'):
    router_add,
    Route('/sharded_clusters/<cluster_id>/routers/<router_id>',
          method='DELETE'):
    router_del,
    Route('/sharded_clusters/<cluster_id>/shards/<shard_id>', method='GET'):
    shard_info,
    Route('/sharded_clusters/<cluster_id>/shards/<shard_id>', method='DELETE'):
    shard_del
}

setup_versioned_routes(ROUTES, version='v1')
# Assume v1 if no version is specified.
setup_versioned_routes(ROUTES)

if __name__ == '__main__':
    rs = ShardedClusters()
    rs.set_settings()
    run(host='localhost', port=8889, debug=True, reloader=False)