def _get_agent_metadata(self, node_ip: str) -> AgentMetadata:
     node = self._nodes_by_ip.get(node_ip)
     if not node:
         return AgentMetadata(state=AgentState.ORPHANED)
     return AgentMetadata(
         agent_id=node.metadata.name,
         allocated_resources=allocated_node_resources(
             self._pods_by_ip[node_ip]),
         batch_task_count=self._count_batch_tasks(node_ip),
         state=(AgentState.RUNNING
                if self._pods_by_ip[node_ip] else AgentState.IDLE),
         task_count=len(self._pods_by_ip[node_ip]),
         total_resources=total_node_resources(node),
     )
예제 #2
0
def _make_metadata(
    rg_id,
    instance_id,
    agent_state=AgentState.RUNNING,
    is_stale=False,
    weight=1,
    tasks=5,
    batch_tasks=0,
):
    return ClusterNodeMetadata(
        AgentMetadata(
            agent_id='foo',
            batch_task_count=batch_tasks,
            state=agent_state,
            task_count=tasks,
        ),
        InstanceMetadata(
            group_id=rg_id,
            hostname='host1',
            instance_id=instance_id,
            ip_address='1.2.3.4',
            is_stale=is_stale,
            market='market-1',
            state='running',
            uptime=1000,
            weight=weight,
        ),
    )
예제 #3
0
    def _get_agent_metadata(self, instance_ip: str) -> AgentMetadata:
        agent_dict = self._agents_by_ip.get(instance_ip)
        if not agent_dict:
            return AgentMetadata(state=AgentState.ORPHANED)

        allocated_resources = allocated_agent_resources(agent_dict)
        return AgentMetadata(
            agent_id=agent_dict['id'],
            allocated_resources=allocated_agent_resources(agent_dict),
            batch_task_count=self._task_count_per_agent[
                agent_dict['id']]['batch_tasks'],
            state=(AgentState.RUNNING
                   if any(allocated_resources) else AgentState.IDLE),
            task_count=self._task_count_per_agent[agent_dict['id']]
            ['all_tasks'],
            total_resources=total_agent_resources(agent_dict),
        )
예제 #4
0
def test_get_agent_metadata(mock_cluster_connector):
    instance = list(mock_cluster_connector.simulator.aws_clusters[0].instances.values())[0]
    mesos_resources = ClustermanResources(
        get_market_resources(TEST_MARKET).cpus,
        get_market_resources(TEST_MARKET).mem * 1000,
        get_market_resources(TEST_MARKET).disk * 1000,
    )
    assert mock_cluster_connector.get_agent_metadata(instance.ip_address) == AgentMetadata(
        agent_id=mock.ANY,
        state=AgentState.IDLE,
        total_resources=mesos_resources,
    )
예제 #5
0
    def _get_agent_metadata(self, instance_ip: str) -> AgentMetadata:
        for c in self.simulator.aws_clusters:
            for i in c.instances.values():
                if instance_ip == i.ip_address:
                    return AgentMetadata(
                        agent_id=str(uuid.uuid4()),
                        state=(
                            AgentState.ORPHANED
                            if self.simulator.current_time < i.join_time
                            else AgentState.IDLE
                        ),
                        total_resources=ClustermanResources(
                            cpus=i.resources.cpus,
                            mem=i.resources.mem * 1000,
                            disk=(i.resources.disk or staticconf.read_int('ebs_volume_size', 0)) * 1000,
                            gpus=(i.resources.gpus),
                        )
                    )

        # if we don't know the given IP then it's orphaned
        return AgentMetadata(state=AgentState.ORPHANED)
예제 #6
0
def test_get_agent_metadata_unknown(mock_cluster_connector):
    assert mock_cluster_connector.get_agent_metadata('1.2.3.4') == AgentMetadata(
        state=AgentState.ORPHANED,
    )