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)
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
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
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)
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