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
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()
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)
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, })
def add_cluster(): cluster = Cluster(jobflow_id=str(uuid.uuid1())) cluster.save() return cluster