use of org.eclipse.che.multiuser.resource.model.Resource in project che-server by eclipse-che.
the class OrganizationalAccountAvailableResourcesProvider method getAvailableOrganizationResources.
/**
* Returns total resources minus resources which are already used by organization or by any of its
* suborganizations.
*
* @param organization organization id to calculate its available resources
* @return resources which are available for usage by specified organization
* @throws NotFoundException when organization with specified id doesn't exist
* @throws ServerException when any other exception occurs on calculation of available resources
*/
@VisibleForTesting
List<? extends Resource> getAvailableOrganizationResources(Organization organization) throws NotFoundException, ServerException {
final ResourceManager resourceManager = resourceManagerProvider.get();
final List<? extends Resource> total = resourceManager.getTotalResources(organization.getId());
final List<Resource> unavailable = new ArrayList<>(resourceManager.getUsedResources(organization.getId()));
unavailable.addAll(getUsedResourcesBySuborganizations(organization.getQualifiedName()));
try {
return resourceAggregator.deduct(total, unavailable);
} catch (NoEnoughResourcesException e) {
LOG.warn("Organization with id {} uses more resources {} than it has {}.", organization.getId(), format(unavailable), format(total));
return resourceAggregator.excess(total, unavailable);
}
}
use of org.eclipse.che.multiuser.resource.model.Resource in project che-server by eclipse-che.
the class OrganizationalAccountAvailableResourcesProvider method getUsedResourcesBySuborganizations.
/**
* Returns resources which are used by suborganizations of specified organization.
*
* <p>Note that the result will includes used resources of all direct and nested suborganizations.
*
* @param parentQualifiedName parent qualified name, e.g. 'parentName/suborgName
* @return resources which are used by suborganizations of specified organization.
* @throws ServerException when any other exception occurs on calculation of used resources
*/
@VisibleForTesting
List<Resource> getUsedResourcesBySuborganizations(String parentQualifiedName) throws NotFoundException, ServerException {
ResourceManager resourceManager = resourceManagerProvider.get();
List<Resource> usedResources = new ArrayList<>();
for (Organization suborganization : Pages.iterate((maxItems, skipCount) -> organizationManager.getSuborganizations(parentQualifiedName, maxItems, skipCount))) {
usedResources.addAll(resourceManager.getUsedResources(suborganization.getId()));
}
return usedResources;
}
use of org.eclipse.che.multiuser.resource.model.Resource in project che-server by eclipse-che.
the class MultiUserWorkspaceActivityManager method getIdleTimeout.
@Override
protected long getIdleTimeout(String wsId) {
List<? extends Resource> availableResources;
try {
WorkspaceImpl workspace = workspaceManager.getWorkspace(wsId);
Account account = accountManager.getByName(workspace.getNamespace());
availableResources = resourceManager.getAvailableResources(account.getId());
} catch (NotFoundException | ServerException e) {
LOG.error(e.getLocalizedMessage(), e);
return defaultTimeout;
}
Optional<? extends Resource> timeoutOpt = availableResources.stream().filter(resource -> TimeoutResourceType.ID.equals(resource.getType())).findAny();
if (timeoutOpt.isPresent()) {
return timeoutOpt.get().getAmount() * 60 * 1000;
} else {
return defaultTimeout;
}
}
use of org.eclipse.che.multiuser.resource.model.Resource in project devspaces-images by redhat-developer.
the class AbstractExhaustibleResourceTest method shouldReturnResourceWithMinusOneAmountWhenFirstResourceHasMinusOneAmountOnResourcesDeduction.
@Test
public void shouldReturnResourceWithMinusOneAmountWhenFirstResourceHasMinusOneAmountOnResourcesDeduction() throws Exception {
final Resource aggregate = resourceType.aggregate(new ResourceImpl(TestResourceType.ID, -1, TestResourceType.UNIT), new ResourceImpl(TestResourceType.ID, 500, TestResourceType.UNIT));
assertEquals(aggregate.getType(), TestResourceType.ID);
assertEquals(aggregate.getAmount(), -1);
assertEquals(aggregate.getUnit(), TestResourceType.UNIT);
}
use of org.eclipse.che.multiuser.resource.model.Resource in project devspaces-images by redhat-developer.
the class RamResourceUsageTrackerTest method returnUsedRamOfStartingWorkspaceForGivenAccount.
@Test
public void returnUsedRamOfStartingWorkspaceForGivenAccount() throws Exception {
mockWorkspaces(createWorkspace(WorkspaceStatus.STARTING, 1000, 500, 500));
when(envRamCalculator.calculate(any(Environment.class))).thenReturn(2000L);
final Optional<Resource> usedRamOpt = ramUsageTracker.getUsedResource(ACCOUNT_ID);
assertTrue(usedRamOpt.isPresent());
final Resource usedRam = usedRamOpt.get();
assertEquals(usedRam.getType(), RamResourceType.ID);
assertEquals(usedRam.getAmount(), 2000L);
assertEquals(usedRam.getUnit(), RamResourceType.UNIT);
verify(accountManager).getById(ACCOUNT_ID);
verify(workspaceManager).getByNamespace(anyString(), anyBoolean(), anyInt(), anyLong());
}
Aggregations