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