예제 #1
0
def test_get_resource_utilization_per_slave():
    tasks = [
        {"resources": {"cpus": 10, "mem": 10, "disk": 10}, "state": "TASK_RUNNING"},
        {"resources": {"cpus": 10, "mem": 10, "disk": 10}, "state": "TASK_RUNNING"},
    ]
    slaves = [
        {
            "id": "somenametest-slave",
            "hostname": "test.somewhere.www",
            "resources": {"cpus": 75, "disk": 250, "mem": 100},
            "reserved_resources": {},
            "attributes": {"habitat": "somenametest-habitat"},
        },
        {
            "id": "somenametest-slave2",
            "hostname": "test2.somewhere.www",
            "resources": {"cpus": 500, "disk": 200, "mem": 750},
            "reserved_resources": {"maintenance": {"cpus": 10, "disk": 0, "mem": 150}},
            "attributes": {"habitat": "somenametest-habitat-2"},
        },
    ]
    actual = metastatus_lib.calculate_resource_utilization_for_slaves(
        slaves=slaves, tasks=tasks
    )
    assert sorted(actual.keys()) == sorted(["total", "free", "slave_count"])
    assert actual["total"] == metastatus_lib.ResourceInfo(cpus=575, disk=450, mem=850)
    assert actual["free"] == metastatus_lib.ResourceInfo(cpus=545, disk=430, mem=680)
    assert actual["slave_count"] == 2
예제 #2
0
def test_get_resource_utilization_by_grouping(
    mock_get_all_tasks_from_state,
    mock_calculate_resource_utilization_for_slaves,
    mock_group_slaves_by_key_func,
):
    mock_group_slaves_by_key_func.return_value = {
        'somenametest-habitat': [{
            'id': 'abcd',
            'hostname': 'test.somewhere.www'
        }],
        'somenametest-habitat-2': [{
            'id': 'abcd',
            'hostname': 'test2.somewhere.www'
        }]
    }
    mock_calculate_resource_utilization_for_slaves.return_value = {
        'free': metastatus_lib.ResourceInfo(cpus=10, mem=10, disk=10),
        'total': metastatus_lib.ResourceInfo(cpus=20, mem=20, disk=20)
    }
    mock_get_all_tasks_from_state([Mock(), Mock()])
    state = {'frameworks': Mock(), 'slaves': [{}]}
    actual = metastatus_lib.get_resource_utilization_by_grouping(
        grouping_func=lambda slave: slave['attributes']['habitat'],
        mesos_state=state,
    )
    assert sorted(actual.keys()) == sorted(
        ['somenametest-habitat', 'somenametest-habitat-2'])
    for k, v in actual.items():
        paasta_print(v)
        assert v['total'] == metastatus_lib.ResourceInfo(cpus=20,
                                                         disk=20,
                                                         mem=20)
        assert v['free'] == metastatus_lib.ResourceInfo(cpus=10,
                                                        disk=10,
                                                        mem=10)
def test_get_resource_utilization_by_grouping(
    mock_get_all_tasks_from_state,
    mock_calculate_resource_utilization_for_slaves,
    mock_group_slaves_by_key_func,
):
    mock_group_slaves_by_key_func.return_value = {
        "somenametest-habitat": [{
            "id": "abcd",
            "hostname": "test.somewhere.www"
        }],
        "somenametest-habitat-2": [{
            "id": "abcd",
            "hostname": "test2.somewhere.www"
        }],
    }
    mock_calculate_resource_utilization_for_slaves.return_value = {
        "free": metastatus_lib.ResourceInfo(cpus=10, mem=10, disk=10),
        "total": metastatus_lib.ResourceInfo(cpus=20, mem=20, disk=20),
    }
    state = {"frameworks": Mock(), "slaves": [{"id": "abcd"}]}
    actual = metastatus_lib.get_resource_utilization_by_grouping(
        grouping_func=mock.sentinel.grouping_func, mesos_state=state)
    mock_get_all_tasks_from_state.assert_called_with(state,
                                                     include_orphans=True)
    assert sorted(actual.keys()) == sorted(
        ["somenametest-habitat", "somenametest-habitat-2"])
    for k, v in actual.items():
        assert v["total"] == metastatus_lib.ResourceInfo(cpus=20,
                                                         disk=20,
                                                         mem=20)
        assert v["free"] == metastatus_lib.ResourceInfo(cpus=10,
                                                        disk=10,
                                                        mem=10)
예제 #4
0
def test_get_resource_utilization_by_grouping(
    mock_get_all_tasks_from_state,
    mock_calculate_resource_utilization_for_slaves,
    mock_group_slaves_by_key_func,
):
    mock_group_slaves_by_key_func.return_value = {
        'somenametest-habitat': [{
            'id': 'abcd',
            'hostname': 'test.somewhere.www'
        }],
        'somenametest-habitat-2': [{
            'id': 'abcd',
            'hostname': 'test2.somewhere.www'
        }]
    }
    mock_calculate_resource_utilization_for_slaves.return_value = {
        'free': metastatus_lib.ResourceInfo(cpus=10, mem=10, disk=10),
        'total': metastatus_lib.ResourceInfo(cpus=20, mem=20, disk=20)
    }
    state = {'frameworks': Mock(), 'slaves': [{'id': 'abcd'}]}
    actual = metastatus_lib.get_resource_utilization_by_grouping(
        grouping_func=mock.sentinel.grouping_func,
        mesos_state=state,
    )
    mock_get_all_tasks_from_state.assert_called_with(state,
                                                     include_orphans=True)
    assert sorted(actual.keys()) == sorted(
        ['somenametest-habitat', 'somenametest-habitat-2'])
    for k, v in actual.items():
        assert v['total'] == metastatus_lib.ResourceInfo(cpus=20,
                                                         disk=20,
                                                         mem=20)
        assert v['free'] == metastatus_lib.ResourceInfo(cpus=10,
                                                        disk=10,
                                                        mem=10)
예제 #5
0
def test_resources_utilization_nothing_special(
        mock_get_mesos_master, mock_get_resource_utilization_by_grouping):
    request = testing.DummyRequest()
    request.swagger_data = {'groupings': None, 'filter': None}
    mock_mesos_state = mock.Mock()
    mock_master = mock.Mock(state=mock_mesos_state)
    mock_get_mesos_master.return_value = mock_master

    mock_get_resource_utilization_by_grouping.return_value = {
        frozenset([('superregion', 'unknown')]): {
            'total': metastatus_lib.ResourceInfo(cpus=10.0,
                                                 mem=512.0,
                                                 disk=100.0),
            'free': metastatus_lib.ResourceInfo(cpus=8.0, mem=312.0,
                                                disk=20.0),
        },
    }

    resp = resources_utilization(request)
    body = json.loads(resp.body.decode('utf-8'))

    assert (resp.status_int == 200)
    assert (len(body) == 1)
    assert (set(
        body[0].keys()) == {"disk", "mem", "groupings", "cpus", "gpus"})
예제 #6
0
def test_resources_utilization_nothing_special(
        mock_get_mesos_master, mock_get_resource_utilization_by_grouping):
    request = testing.DummyRequest()
    request.swagger_data = {"groupings": None, "filter": None}
    mock_mesos_state = mock.Mock()
    mock_master = mock.Mock(state=asynctest.CoroutineMock(
        return_value=mock_mesos_state))
    mock_get_mesos_master.return_value = mock_master

    mock_get_resource_utilization_by_grouping.return_value = {
        frozenset([("superregion", "unknown")]): {
            "total": metastatus_lib.ResourceInfo(cpus=10.0,
                                                 mem=512.0,
                                                 disk=100.0),
            "free": metastatus_lib.ResourceInfo(cpus=8.0, mem=312.0,
                                                disk=20.0),
        }
    }

    resp = resources_utilization(request)
    body = json.loads(resp.body.decode("utf-8"))

    assert resp.status_int == 200
    assert len(body) == 1
    assert set(body[0].keys()) == {"disk", "mem", "groupings", "cpus", "gpus"}
예제 #7
0
def test_get_resource_utilization_per_slave():
    tasks = [{
        'resources': {
            'cpus': 10,
            'mem': 10,
            'disk': 10
        },
        'state': 'TASK_RUNNING'
    }, {
        'resources': {
            'cpus': 10,
            'mem': 10,
            'disk': 10
        },
        'state': 'TASK_RUNNING'
    }]
    slaves = [
        {
            'id': 'somenametest-slave',
            'hostname': 'test.somewhere.www',
            'resources': {
                'cpus': 75,
                'disk': 250,
                'mem': 100,
            },
            'reserved_resources': {},
            'attributes': {
                'habitat': 'somenametest-habitat',
            },
        },
        {
            'id': 'somenametest-slave2',
            'hostname': 'test2.somewhere.www',
            'resources': {
                'cpus': 500,
                'disk': 200,
                'mem': 750,
            },
            'reserved_resources': {
                'some-role': {
                    'cpus': 10,
                    'disk': 0,
                    'mem': 150,
                },
            },
            'attributes': {
                'habitat': 'somenametest-habitat-2',
            },
        },
    ]
    actual = metastatus_lib.calculate_resource_utilization_for_slaves(
        slaves=slaves, tasks=tasks)
    assert sorted(actual.keys()) == sorted(['total', 'free'])
    assert actual['total'] == metastatus_lib.ResourceInfo(cpus=575,
                                                          disk=450,
                                                          mem=850)
    assert actual['free'] == metastatus_lib.ResourceInfo(cpus=545,
                                                         disk=430,
                                                         mem=680)