use of org.eclipse.che.multiuser.resource.model.Resource in project devspaces-images by redhat-developer.
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 devspaces-images by redhat-developer.
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 devspaces-images by redhat-developer.
the class WorkspaceResourceUsageTrackerTest method shouldReturnUsedWorkspacesForGivenAccount.
@Test
public void shouldReturnUsedWorkspacesForGivenAccount() throws Exception {
when(accountManager.getById(any())).thenReturn(account);
when(account.getName()).thenReturn("testAccount");
when(workspaceManager.getByNamespace(anyString(), anyBoolean(), anyInt(), anyLong())).thenReturn(new Page<>(Arrays.asList(new WorkspaceImpl(), new WorkspaceImpl(), new WorkspaceImpl()), 0, 3, 3));
Optional<Resource> usedWorkspacesOpt = workspaceResourceUsageTracker.getUsedResource("account123");
assertTrue(usedWorkspacesOpt.isPresent());
Resource usedWorkspaces = usedWorkspacesOpt.get();
assertEquals(usedWorkspaces.getType(), WorkspaceResourceType.ID);
assertEquals(usedWorkspaces.getAmount(), 3);
assertEquals(usedWorkspaces.getUnit(), WorkspaceResourceType.UNIT);
verify(accountManager).getById(eq("account123"));
verify(workspaceManager).getByNamespace(eq("testAccount"), eq(false), anyInt(), anyLong());
}
use of org.eclipse.che.multiuser.resource.model.Resource in project devspaces-images by redhat-developer.
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 shouldReturnResourceWithMinusOneAmountWhenTotalResourceHasMinusOneOnResourcesDeduction.
@Test
public void shouldReturnResourceWithMinusOneAmountWhenTotalResourceHasMinusOneOnResourcesDeduction() throws Exception {
final Resource deducted = resourceType.deduct(new ResourceImpl(TestResourceType.ID, -1, TestResourceType.UNIT), new ResourceImpl(TestResourceType.ID, 500, TestResourceType.UNIT));
assertEquals(deducted.getType(), TestResourceType.ID);
assertEquals(deducted.getAmount(), -1);
assertEquals(deducted.getUnit(), TestResourceType.UNIT);
}
Aggregations