예제 #1
0
파일: views.py 프로젝트: cshamis/scale
    def get(self, request, node_id):
        '''Gets node info

        :param request: the HTTP GET request
        :type request: :class:`rest_framework.request.Request`
        :param node_id: The ID for the node.
        :type node_id: str
        :rtype: :class:`rest_framework.response.Response`
        :returns: the HTTP response to send back to the user
        '''

        # Fetch the basic node attributes
        try:
            node = Node.objects.get_details(node_id)
        except Node.DoesNotExist:
            raise Http404
        serializer = NodeDetailsSerializer(node)
        result = serializer.data

        # Attempt to fetch resource usage for the node
        resources = None
        try:
            sched = Scheduler.objects.get_master()
            slave_info = mesos_api.get_slave(sched.master_hostname, sched.master_port, node.slave_id, True)
            if slave_info and slave_info.total:
                resources = slave_info.to_dict()['resources']
        except:
            logger.exception('Unable to fetch slave resource usage')
        if resources:
            result['resources'] = resources
        else:
            result['disconnected'] = True

        return Response(serializer.data)
예제 #2
0
파일: views.py 프로젝트: mnjstwins/scale
    def _get_node_details_v4(self, node_id):

        # Fetch the basic node attributes
        try:
            node = Node.objects.get_details(node_id)
        except Node.DoesNotExist:
            raise Http404
        serializer = self.get_serializer(node)
        result = serializer.data

        # Attempt to fetch resource usage for the node
        resources = None
        try:
            sched = Scheduler.objects.get_master()
            slave_info = mesos_api.get_slave(sched.master_hostname,
                                             sched.master_port, node.slave_id,
                                             True)
            if slave_info and slave_info.total:
                resources = slave_info.to_dict()['resources']
        except:
            logger.exception('Unable to fetch slave resource usage')
        if resources:
            result['resources'] = resources
        else:
            result['disconnected'] = True

        return result
예제 #3
0
파일: views.py 프로젝트: droessne/scale
    def _get_node_details(self, node_id):

        # Fetch the basic node attributes
        try:
            node = Node.objects.get_details(node_id)
        except Node.DoesNotExist:
            raise Http404
        serializer = self.get_serializer(node)
        result = serializer.data

        # Attempt to fetch resource usage for the node
        resources = None
        try:
            sched = Scheduler.objects.get_master()
            slave_info = mesos_api.get_slave(sched.master_hostname, sched.master_port, node.slave_id, True)
            if slave_info and slave_info.total:
                resources = slave_info.to_dict()['resources']
        except:
            logger.exception('Unable to fetch slave resource usage')
        if resources:
            result['resources'] = resources
        else:
            result['disconnected'] = True

        return result
예제 #4
0
    def get(self, request, node_id):
        """Gets node info

        :param request: the HTTP GET request
        :type request: :class:`rest_framework.request.Request`
        :param node_id: The ID for the node.
        :type node_id: str
        :rtype: :class:`rest_framework.response.Response`
        :returns: the HTTP response to send back to the user
        """

        # Fetch the basic node attributes
        try:
            node = Node.objects.get_details(node_id)
        except Node.DoesNotExist:
            raise Http404
        serializer = self.get_serializer(node)
        result = serializer.data

        # Attempt to fetch resource usage for the node
        resources = None
        try:
            sched = Scheduler.objects.get_master()
            slave_info = mesos_api.get_slave(sched.master_hostname, sched.master_port, node.slave_id, True)
            if slave_info and slave_info.total:
                resources = slave_info.to_dict()['resources']
        except:
            logger.exception('Unable to fetch slave resource usage')
        if resources:
            result['resources'] = resources
        else:
            result['disconnected'] = True

        return Response(result)
예제 #5
0
    def _create_scale_offers(self, driver, offers):
        '''Creates a list of Scale offers from the given Mesos offers

        :param driver: The scheduler driver
        :type driver: :class:`mesos.interface.SchedulerDriver`
        :param offers: The Mesos offers
        :type offers: list
        :returns: The list of Scale offers
        :rtype: list
        '''

        scale_offers = []
        for offer in offers:
            slave_id = offer.slave_id.value

            # Register node if scheduler doesn't have it in memory
            if not slave_id in self.node_ids:
                # Register node
                slave_info = None
                try:
                    slave_info = api.get_slave(self.master_hostname, self.master_port, slave_id)
                    node = Node.objects.register_node(slave_info.hostname, slave_info.port, slave_id)
                    with self.current_jobs_lock:
                        self.current_jobs[slave_id] = []
                    self.node_ids[slave_id] = node.id
                except:
                    logger.exception('Error registering node at %s, rejecting offer',
                                     slave_info.hostname if slave_info else slave_id)
                    # Decline offers where node registration failed
                    driver.launchTasks(offer.id, [])
                    continue
            else:
                node = Node.objects.get(id=self.node_ids[slave_id])

            scale_offers.append(ScaleOffer(offer, node))

        return scale_offers