use of org.bf2.srs.fleetmanager.storage.sqlPanacheImpl.model.RegistryData in project srs-fleet-manager by bf2fc6cc711aee1a0c2a.
the class RegistryServiceImpl method getRegistries.
@Override
public RegistryListDto getRegistries(Integer page, Integer size, String orderBy, String search) {
// Defaults
var sort = Sort.by("id", Sort.Direction.Ascending);
page = (page != null) ? page : 1;
size = (size != null) ? size : 10;
if (orderBy != null) {
var order = orderBy.split(" ");
if (order.length != 2) {
throw new ValidationException("invalid orderBy");
}
if ("asc".equals(order[1])) {
sort = Sort.by(order[0], Sort.Direction.Ascending);
} else {
sort = Sort.by(order[0], Sort.Direction.Descending);
}
}
List<Pair<String, Object>> conditions = new ArrayList<>();
if (search != null && !search.isEmpty()) {
var basicQuery = new BasicQuery(search, Arrays.asList("name", "status"));
conditions.add(Pair.of(basicQuery.getColumn(), basicQuery.getArgument()));
}
// list only registries from your organization or the ones the user owns
if (isResolvable(securityIdentity)) {
final AccountInfo accountInfo = authService.extractAccountInfo();
String orgId = accountInfo.getOrganizationId();
if (orgId != null) {
conditions.add(Pair.of("orgId", orgId));
} else {
conditions.add(Pair.of("ownerId", accountInfo.getAccountId()));
}
} else {
conditions.add(Pair.of("ownerId", OWNER_ID_PLACEHOLDER));
}
var query = new SearchQuery(conditions);
PanacheQuery<RegistryData> itemsQuery = storage.executeRegistrySearchQuery(query, sort);
var items = itemsQuery.page(Page.of(page - 1, size)).stream().map(convertRegistry::convert).collect(Collectors.toList());
return RegistryListDto.builder().items(items).page(page).size(size).total(itemsQuery.count()).build();
}
use of org.bf2.srs.fleetmanager.storage.sqlPanacheImpl.model.RegistryData in project srs-fleet-manager by bf2fc6cc711aee1a0c2a.
the class RegistryServiceImpl method createRegistry.
@Audited
@Override
public RegistryDto createRegistry(RegistryCreateDto registryCreate) throws RegistryStorageConflictException, TermsRequiredException, ResourceLimitReachedException, EvalInstancesNotAllowedException, TooManyEvalInstancesForUserException, TooManyInstancesException, AccountManagementServiceException {
final AccountInfo accountInfo = authService.extractAccountInfo();
// Make sure we have more instances available (max capacity not yet reached).
long instanceCount = storage.getRegistryCountTotal();
if (instanceCount >= maxInstances) {
throw new TooManyInstancesException();
}
// Figure out if we are going to create a standard or eval instance.
ResourceType resourceType = evalInstancesOnlyEnabled ? ResourceType.REGISTRY_INSTANCE_EVAL : accountManagementService.determineAllowedResourceType(accountInfo);
if (resourceType == ResourceType.REGISTRY_INSTANCE_EVAL) {
// Are eval instances allowed?
if (!evalInstancesEnabled) {
throw new EvalInstancesNotAllowedException();
}
// Limit the # of eval instances per user. Need to check storage for list of eval registry instances.
List<RegistryData> registriesByOwner = storage.getRegistriesByOwner(accountInfo.getAccountUsername());
int evalInstanceCount = 0;
for (RegistryData registryData : registriesByOwner) {
// TODO Perform a dedicated query
if (RegistryInstanceTypeValueDto.EVAL.value().equals(registryData.getInstanceType())) {
evalInstanceCount++;
}
}
if (evalInstanceCount >= maxEvalInstancesPerUser) {
throw new TooManyEvalInstancesForUserException();
}
}
// Try to consume some quota from AMS for the appropriate resource type (standard or eval). If successful
// we'll get back a subscriptionId - if not we'll throw an exception.
String subscriptionId = accountManagementService.createResource(accountInfo, resourceType);
// Convert to registry data and persist it in the DB.
RegistryInstanceTypeValueDto instanceType = resourceTypeToInstanceType(resourceType);
RegistryData registryData = convertRegistry.convert(registryCreate, subscriptionId, accountInfo.getAccountUsername(), accountInfo.getOrganizationId(), accountInfo.getAccountId(), instanceType);
// Generate the ID
registryData.setId(UUID.randomUUID().toString());
storage.createOrUpdateRegistry(registryData);
tasks.submit(ScheduleRegistryTask.builder().registryId(registryData.getId()).build());
return convertRegistry.convert(registryData);
}
use of org.bf2.srs.fleetmanager.storage.sqlPanacheImpl.model.RegistryData in project srs-fleet-manager by bf2fc6cc711aee1a0c2a.
the class ScheduleRegistryWorker method finallyExecute.
@Override
public void finallyExecute(Task aTask, WorkerContext ctl, Optional<Exception> error) throws RegistryNotFoundException, RegistryStorageConflictException {
ScheduleRegistryTask task = (ScheduleRegistryTask) aTask;
// SUCCESS STATE
Optional<RegistryData> registryOpt = storage.getRegistryById(task.getRegistryId());
if (registryOpt.isPresent() && registryOpt.get().getRegistryDeployment() != null)
return;
// The only thing to handle is if we were able to schedule but storage does not work
// In that case, the only thing to do is to just try deleting the registry.
storage.deleteRegistry(task.getRegistryId());
}
Aggregations