use of jetbrains.buildServer.server.graphql.model.agentPool.AbstractAgentPool in project teamcity-rest by JetBrains.
the class AbstractAgentPoolResolver method projects.
@NotNull
public AgentPoolProjectsConnection projects(@NotNull AbstractAgentPool pool, @NotNull ProjectsFilter filter, @NotNull DataFetchingEnvironment env) {
jetbrains.buildServer.serverSide.agentPools.AgentPool realPool = pool.getRealPool();
Collection<String> projectIds = realPool.getProjectIds();
Stream<SProject> projects = myProjectManager.findProjects(projectIds).stream();
if (filter.getArchived() != null) {
projects = projects.filter(p -> p.isArchived() == filter.getArchived());
}
Integer excludedProjectsCount = null;
if (env.getSelectionSet().contains("excludedCount")) {
AuthorityHolder authHolder = mySecurityContext.getAuthorityHolder();
excludedProjectsCount = (int) projectIds.stream().filter(projectId -> !authHolder.isPermissionGrantedForProject(projectId, Permission.VIEW_PROJECT)).count();
}
return new AgentPoolProjectsConnection(projects.collect(Collectors.toList()), excludedProjectsCount, PaginationArguments.everything());
}
use of jetbrains.buildServer.server.graphql.model.agentPool.AbstractAgentPool in project teamcity-rest by JetBrains.
the class CloudImageResolver method agentPool.
@NotNull
public DataFetcherResult<AbstractAgentPool> agentPool(@NotNull CloudImage image, @NotNull DataFetchingEnvironment env) {
DataFetcherResult.Builder<AbstractAgentPool> result = new DataFetcherResult.Builder<>();
AgentType agentType = findAgentType(image);
AgentPool pool = agentType != null ? myAgentPoolManager.findAgentPoolById(agentType.getAgentPoolId()) : null;
if (agentType == null || pool == null) {
result.error(new EntityNotFoundGraphQLError(String.format("Could not find agent pool for image id=%s in profile id=%s", image.getRawId(), image.getProfileId())));
return result.build();
}
return result.data(new ProjectAgentPool(pool)).localContext(pool).build();
}
use of jetbrains.buildServer.server.graphql.model.agentPool.AbstractAgentPool in project teamcity-rest by JetBrains.
the class Mutation method authorizeAgent.
@Used("graphql")
@NotNull
public DataFetcherResult<AuthorizeAgentPayload> authorizeAgent(@NotNull AuthorizeAgentInput input, @NotNull DataFetchingEnvironment dfe) {
return runWithAgent(input.getAgentRawId(), agent -> {
DataFetcherResult.Builder<AuthorizeAgentPayload> result = DataFetcherResult.newResult();
GraphQLContext context = dfe.getContext();
String authReason = input.getReason() == null ? "" : input.getReason();
// Move agent to another pool first as we don't want some cheeky build to start while agent is in a wrong pool.
if (input.getTargetAgentPoolRawId() != null) {
try {
myAgentPoolManager.moveAgentToPool(input.getTargetAgentPoolRawId(), agent);
} catch (NoSuchAgentPoolException e) {
return result.error(new EntityNotFoundGraphQLError(String.format("Agent pool with id=%d is not found.", input.getTargetAgentPoolRawId()))).build();
} catch (PoolQuotaExceededException e) {
LOG.debug(e.getMessage());
return result.error(new OperationFailedGraphQLError(String.format("Agent pool with id=%d does not accept agents.", input.getTargetAgentPoolRawId()))).build();
} catch (AgentTypeCannotBeMovedException e) {
LOG.debug(e.getMessage());
return result.error(new OperationFailedGraphQLError(String.format("Agent with id=%d can not be moved.", input.getAgentRawId()))).build();
}
}
agent.setAuthorized(true, context.getUser(), authReason);
Agent agentModel = new Agent(agent);
AbstractAgentPool targetPoolModel = null;
if (input.getTargetAgentPoolRawId() != null) {
AgentPool realPool = myAgentPoolManager.findAgentPoolById(input.getTargetAgentPoolRawId());
if (realPool != null) {
targetPoolModel = myAgentPoolFactory.produce(realPool);
}
}
return result.data(new AuthorizeAgentPayload(agentModel, targetPoolModel)).build();
});
}
use of jetbrains.buildServer.server.graphql.model.agentPool.AbstractAgentPool in project teamcity-rest by JetBrains.
the class Mutation method bulkAuthorizeAgents.
@Used("graphql")
@NotNull
public DataFetcherResult<BulkAuthorizeAgentsPayload> bulkAuthorizeAgents(@NotNull BulkAuthorizeAgentsInput input, @NotNull DataFetchingEnvironment dfe) {
DataFetcherResult.Builder<BulkAuthorizeAgentsPayload> result = DataFetcherResult.newResult();
GraphQLContext context = dfe.getContext();
String authReason = input.getReason() == null ? "" : input.getReason();
Set<Integer> agentTypeIds = new HashSet<>(input.getAgentRawIds().size());
List<BuildAgentEx> agents = new ArrayList<>();
for (int agentId : input.getAgentRawIds()) {
BuildAgentEx agent = myBuildAgentManager.findAgentById(agentId, true);
if (agent == null) {
return result.error(new EntityNotFoundGraphQLError(String.format("Agent with id=%d is not found.", agentId))).build();
}
agentTypeIds.add(agent.getAgentTypeId());
agents.add(agent);
}
if (input.getTargetAgentPoolRawId() != null) {
try {
myAgentPoolManager.moveAgentTypesToPool(input.getTargetAgentPoolRawId(), agentTypeIds);
} catch (NoSuchAgentPoolException e) {
return result.error(new EntityNotFoundGraphQLError("Agent pool is not found.")).build();
} catch (AgentTypeCannotBeMovedException e) {
LOG.debug(e.getMessage());
return result.error(new OperationFailedGraphQLError("One of the given agents can't be moved.")).build();
} catch (PoolQuotaExceededException e) {
LOG.debug(e.getMessage());
return result.error(new OperationFailedGraphQLError(String.format("Agent pool can't accept %d agents.", agentTypeIds.size()))).build();
}
}
AbstractAgentPool poolModel = null;
if (input.getTargetAgentPoolRawId() != null) {
AgentPool targetRealPool = myAgentPoolManager.findAgentPoolById(input.getTargetAgentPoolRawId());
if (targetRealPool != null) {
poolModel = myAgentPoolFactory.produce(targetRealPool);
} else {
result.error(new EntityNotFoundGraphQLError("Agent pool is not found after successfully moving agents to it. Possibly it was deleted already."));
}
}
List<Agent> agentModels = new ArrayList<>();
for (BuildAgentEx agent : agents) {
try {
agent.setAuthorized(true, context.getUser(), authReason);
} catch (LicenseNotGrantedException e) {
result.error(new OperationFailedGraphQLError(e.getMessage()));
}
agentModels.add(new Agent(agent));
}
return result.data(new BulkAuthorizeAgentsPayload(agentModels, poolModel)).build();
}
Aggregations