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_calculate_resource_utilization_for_slaves(): fake_slaves = [ { "id": "somenametest-slave2", "hostname": "test2.somewhere.www", "resources": {"cpus": 500, "disk": 200, "mem": 750, "gpus": 5}, "reserved_resources": {}, "attributes": {"habitat": "somenametest-habitat-2"}, } ] tasks = [ { "resources": {"cpus": 10, "mem": 10, "disk": 10, "gpus": 1}, "state": "TASK_RUNNING", }, { "resources": {"cpus": 10, "mem": 10, "disk": 10, "gpus": 2}, "state": "TASK_RUNNING", }, ] free = metastatus_lib.calculate_resource_utilization_for_slaves( slaves=fake_slaves, tasks=tasks )["free"] assert free.cpus == 480 assert free.mem == 730 assert free.disk == 180 assert free.gpus == 2
def main(hostnames): master = get_mesos_master() try: mesos_state = master.state except MasterNotAvailableException as e: paasta_print(PaastaColors.red("CRITICAL: %s" % e.message)) sys.exit(2) slaves = [slave for slave in mesos_state.get('slaves', []) if slave['hostname'] in hostnames] tasks = get_all_tasks_from_state(mesos_state, include_orphans=True) filtered_tasks = filter_tasks_for_slaves(slaves, tasks) resource_info_dict = calculate_resource_utilization_for_slaves(slaves, filtered_tasks) resource_utilizations = resource_utillizations_from_resource_info( total=resource_info_dict['total'], free=resource_info_dict['free'], ) output = {} for metric in resource_utilizations: utilization = metric.total - metric.free if int(metric.total) == 0: utilization_perc = 100 else: utilization_perc = utilization / float(metric.total) * 100 output[metric.metric] = { 'total': metric.total, 'used': utilization, 'perc': utilization_perc, } print(json.dumps(output))
def main(hostnames: Sequence[str]) -> None: master = get_mesos_master() try: mesos_state = block(master.state) except MasterNotAvailableException as e: print(PaastaColors.red("CRITICAL: %s" % e.message)) sys.exit(2) slaves = [ slave for slave in mesos_state.get("slaves", []) if slave["hostname"] in hostnames ] tasks = get_all_tasks_from_state(mesos_state, include_orphans=True) filtered_tasks = filter_tasks_for_slaves(slaves, tasks) resource_info_dict = calculate_resource_utilization_for_slaves( slaves, filtered_tasks) resource_utilizations = resource_utillizations_from_resource_info( total=resource_info_dict["total"], free=resource_info_dict["free"]) output = {} for metric in resource_utilizations: utilization = metric.total - metric.free if int(metric.total) == 0: utilization_perc = 100 else: utilization_perc = utilization / float(metric.total) * 100 output[metric.metric] = { "total": metric.total, "used": utilization, "perc": utilization_perc, } print(json.dumps(output))
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)
def test_calculate_resource_utilization_for_slaves(): fake_slaves = [ { 'id': 'somenametest-slave2', 'hostname': 'test2.somewhere.www', 'resources': { 'cpus': 500, 'disk': 200, 'mem': 750, 'gpus': 5, }, 'reserved_resources': {}, 'attributes': { 'habitat': 'somenametest-habitat-2', }, }, ] tasks = [ { 'resources': { 'cpus': 10, 'mem': 10, 'disk': 10, 'gpus': 1, }, 'state': 'TASK_RUNNING', }, { 'resources': { 'cpus': 10, 'mem': 10, 'disk': 10, 'gpus': 2, }, 'state': 'TASK_RUNNING', }, ] free = metastatus_lib.calculate_resource_utilization_for_slaves( slaves=fake_slaves, tasks=tasks, )['free'] assert free.cpus == 480 assert free.mem == 730 assert free.disk == 180 assert free.gpus == 2
def test_get_resource_utilization_per_slave(): tasks = [{"resources": {"cpus": 10, "mem": 10, "disk": 10}}, {"resources": {"cpus": 10, "mem": 10, "disk": 10}}] 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)
def test_get_resource_utilization_per_slave(): tasks = [ { 'resources': { 'cpus': 10, 'mem': 10, 'disk': 10 } }, { 'resources': { 'cpus': 10, 'mem': 10, 'disk': 10 } } ] 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 )