def increase_quota(cluster, role, cpu_str, ram_str, disk_str): """usage: increase_quota cluster role cpu ram[unit] disk[unit] Increases the amount of production quota allocated to a user. """ cpu = float(cpu_str) ram = parse_data(ram_str).as_(Data.MB) disk = parse_data(disk_str).as_(Data.MB) client = make_admin_client_with_options(cluster) resp = client.get_quota(role) quota = resp.result.getQuotaResult.quota resource_details = ResourceManager.resource_details_from_quota(quota) log.info('Current quota for %s:\n\t%s' % ( role, '\n\t'.join('%s\t%s%s' % ( r.resource_type.display_name, r.value, r.resource_type.display_unit) for r in resource_details))) new_cpu = ResourceType.CPUS.value_type( cpu + ResourceManager.quantity_of(resource_details, ResourceType.CPUS)) new_ram = ResourceType.RAM_MB.value_type( ram + ResourceManager.quantity_of(resource_details, ResourceType.RAM_MB)) new_disk = ResourceType.DISK_MB.value_type( disk + ResourceManager.quantity_of(resource_details, ResourceType.DISK_MB)) log.info('Attempting to update quota for %s to\n\tCPU\t%s\n\tRAM\t%s MB\n\tDisk\t%s MB' % (role, new_cpu, new_ram, new_disk)) resp = client.set_quota(role, new_cpu, new_ram, new_disk) check_and_log_response(resp)
def increase_quota(cluster, role, cpu_str, ram_str, disk_str): """usage: increase_quota cluster role cpu ram[unit] disk[unit] Increases the amount of production quota allocated to a user. """ cpu = float(cpu_str) ram = parse_data(ram_str).as_(Data.MB) disk = parse_data(disk_str).as_(Data.MB) client = make_admin_client_with_options(cluster) resp = client.get_quota(role) quota = resp.result.getQuotaResult.quota resource_details = ResourceManager.resource_details_from_quota(quota) log.info('Current quota for %s:\n\t%s' % (role, '\n\t'.join( '%s\t%s%s' % (r.resource_type.display_name, r.value, r.resource_type.display_unit) for r in resource_details))) new_cpu = ResourceType.CPUS.value_type( cpu + ResourceManager.quantity_of(resource_details, ResourceType.CPUS)) new_ram = ResourceType.RAM_MB.value_type( ram + ResourceManager.quantity_of(resource_details, ResourceType.RAM_MB)) new_disk = ResourceType.DISK_MB.value_type( disk + ResourceManager.quantity_of(resource_details, ResourceType.DISK_MB)) log.info( 'Attempting to update quota for %s to\n\tCPU\t%s\n\tRAM\t%s MB\n\tDisk\t%s MB' % (role, new_cpu, new_ram, new_disk)) resp = client.set_quota(role, new_cpu, new_ram, new_disk) check_and_log_response(resp)
def test_backfill_quota(self): quota = ResourceAggregate(numCpus=1.0, ramMb=2, diskMb=3) assert ResourceManager.resource_details_from_quota(quota) == [ ResourceDetails(ResourceType.CPUS, 1.0), ResourceDetails(ResourceType.RAM_MB, 2), ResourceDetails(ResourceType.DISK_MB, 3) ]
def render_task_pretty(scheduled_task): assigned_task = scheduled_task.assignedTask task_info = assigned_task.task task_strings = [] task_strings.append("\tTask role: %s, env: %s, name: %s, instance: %s, status: %s on %s" % (task_info.job.role, task_info.job.environment, task_info.job.name, assigned_task.instanceId, ScheduleStatus._VALUES_TO_NAMES[scheduled_task.status], assigned_task.slaveHost)) resource_details = ResourceManager.resource_details_from_task(task_info) if task_info: task_strings.append("""\t %s""" % ", ".join("%s: %s%s" % ( r.resource_type.display_name, r.value, r.resource_type.display_unit) for r in resource_details)) if assigned_task.assignedPorts: task_strings.append("\t assigned ports: %s" % assigned_task.assignedPorts) # TODO(mchucarroll): only add the max if taskInfo is filled in! task_strings.append("\t failure count: %s (max %s)" % (scheduled_task.failureCount, task_info.maxTaskFailures)) task_strings.append("\t events:") events = sorted(scheduled_task.taskEvents, key=lambda event: event.timestamp) for event in events: task_strings.append("\t %s %s: %s" % (datetime.fromtimestamp(event.timestamp / 1000), ScheduleStatus._VALUES_TO_NAMES[event.status], event.message)) if assigned_task.task.metadata is not None and len(assigned_task.task.metadata) > 0: task_strings.append("\t metadata:") for md in assigned_task.task.metadata: task_strings.append("\t\t (key: '%s', value: '%s')" % (md.key, md.value)) task_strings.append("") return "\n".join(task_strings)
def test_backfill_task(self): task = TaskConfig(numCpus=1.0, ramMb=2, diskMb=3, requestedPorts=frozenset(['http'])) assert ResourceManager.resource_details_from_quota(task) == [ ResourceDetails(ResourceType.CPUS, 1.0), ResourceDetails(ResourceType.RAM_MB, 2), ResourceDetails(ResourceType.DISK_MB, 3), ResourceDetails(ResourceType.PORTS, 'http'), ]
def test_resource_details(self): details = ResourceManager.resource_details([ Resource(ramMb=2), Resource(numCpus=1.0), Resource(numGpus=1.0) ]) assert len(details) == 3 assert details[1] == ResourceDetails(ResourceType.RAM_MB, 2) assert details[0] == ResourceDetails(ResourceType.CPUS, 1.0) assert details[2] == ResourceDetails(ResourceType.GPUS, 1)
def test_resource_details(self): details = ResourceManager.resource_details( [Resource(ramMb=2), Resource(numCpus=1.0), Resource(numGpus=1.0)]) assert len(details) == 3 assert details[1] == ResourceDetails(ResourceType.RAM_MB, 2) assert details[0] == ResourceDetails(ResourceType.CPUS, 1.0) assert details[2] == ResourceDetails(ResourceType.GPUS, 1)
def test_quantity_of(self): quantity = ResourceManager.quantity_of( ResourceManager.resource_details([Resource(ramMb=2), Resource(numCpus=1.0)]), ResourceType.CPUS) assert quantity == 1.0
def test_quantity_of(self): quantity = ResourceManager.quantity_of( ResourceManager.resource_details( [Resource(ramMb=2), Resource(numCpus=1.0)]), ResourceType.CPUS) assert quantity == 1.0
def get_quota_str(quota): resource_details = ResourceManager.resource_details_from_quota(quota) return (' %s: %s%s' % ( r.resource_type.display_name, r.value, r.resource_type.display_unit) for r in resource_details)