Ejemplo n.º 1
0
def _launch_cluster_from_thread(request, node_count, roxie_nodes,
                                launch_config):

    # Get needed info
    session = request.session
    access_key_id = session.get('access_key_id')
    secret_access_key = session.get('secret_access_key')
    owner_id = session.get('owner_id')
    region = launch_config['region']

    # Get a new cluster row id
    cluster = Cluster(owner_id=owner_id, node_count=node_count)
    cluster.requesting_ip = request.META.get('REMOTE_ADDR')
    cluster.region = region
    cluster.is_launching = True
    cluster.save()
    cluster_id = cluster.pk

    debug = False

    # Launch Cluster
    if debug:
        launch_cluster(node_count, roxie_nodes, cluster_id, launch_config,
                       access_key_id, secret_access_key, owner_id)
    else:
        args = (node_count, roxie_nodes, cluster_id, launch_config,
                access_key_id, secret_access_key, owner_id)
        thread = Thread(target=launch_cluster, args=args)
        thread.daemon = True
        thread.start()

    return cluster_id
Ejemplo n.º 2
0
    def __buildClusters(self, task, results, result):
        """
        Build the cluster objects
        :param task:
        :param results:
        :param result:
        :return:
        """

        for tmp in results:
            cluster = Cluster()
            cluster.centerMean = []
            cluster.centerMedian = []
            cluster.result = result

            profiles = []
            for sequence in tmp:
                profiles.append(sequence.dna)

            profiles = np.array(profiles)
            mean = np.mean(profiles, axis = 0)
            median = np.median(profiles, axis = 0)

            cluster.centerMean = mean.tolist()
            cluster.centerMedian = median.tolist()

            cluster.save()

            for sequence in tmp:
                cluster.sequences.add(sequence)

            cluster.save()
Ejemplo n.º 3
0
def rest_clusters(request):
    if request.method == 'GET':
        clusters = Cluster.objects.filter(user_id=request.user.id)
        return JsonResponse(clusters, encoder=QuerySetJSONEncoder, safe=False)
    elif request.method == 'POST':
        data = json.loads(request.body)
        cluster = Cluster()
        cluster.id = data['id']
        cluster.name = data['name']
        cluster.systems = data['systems']['storage'] + data['systems']['compute']
        cluster.created = datetime.now()
        cluster.user = request.user
        cluster.save()

        data['config']['id'] = cluster.id
        response = requests.post(url=DEPLOY_URL, data=json.dumps(data['config']))

        if json.loads(response.text).get('result') == 'success':
            return JsonResponse(model_to_dict(cluster))
        else:
            return JsonResponse({
                'error': response['error_message']
            })
    else:
        return HttpResponse(status=404)
Ejemplo n.º 4
0
def create_cluster():
    """Merges two clusters.

    Processes a POST request that should contain an object like:
    { "cluster": {
        "parents": ["parent1_id", "parent2_id"],
        "members": [{
            "shred": "shred1_id",
            "position": [100, 500],
            "angle": 35,
          },
          ...
        ]
    } }

    """

    req = request.get_json().get('cluster')

    parents = [Cluster.objects.get_or_404(pk=pk) for pk in req['parents']]

    if len(parents) != 2:
        response = jsonify({
            "success": False,
            "message": "Wrong number of good parents: %s" % req['parents']})
        response.status_code = 400
        return response

    if parents[0].batch != parents[1].batch:
        response = jsonify({
            "success": False,
            "message": "Parents are from different batches: %s %s" % (
                parents[0].batch, parents[1].batch)})
        response.status_code = 400
        return response

    member_fields = ['shred', 'position', 'angle']
    for member in req['members']:
        for field in member_fields:
            if field not in member:
                response = jsonify({
                    "success": False,
                    "message": "One of the members doesn't have all required "
                               "fields (%s): %s" % (member_fields, member),
                })
                response.status_code = 400
                return response

    cluster = Cluster(
            id=str(uuid.uuid1()),
            users_count=0,
            users_skipped=[],
            users_processed=[],
            batch=parents[0].batch,
            tags=[],
            parents=parents,
            members=[ClusterMember(
                shred=m['shred'], position=m['position'], angle=m['angle'])
                for m in req['members']],
    )
    cluster.save()

    return jsonify({
        "success": True,
        "id": cluster.id,
    })
Ejemplo n.º 5
0
 def add_cluster():
     cluster = Cluster(jobflow_id=str(uuid.uuid1()))
     cluster.save()
     return cluster