You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by he...@apache.org on 2017/10/06 08:09:31 UTC
[2/6] brooklyn-server git commit: REST API for entity adjunct
activities
REST API for entity adjunct activities
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/d1ab00c0
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/d1ab00c0
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/d1ab00c0
Branch: refs/heads/master
Commit: d1ab00c0f65c9444fd655bbf8759c982fe1d02ab
Parents: cf56492
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Tue Sep 19 14:04:06 2017 +0100
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Mon Sep 25 13:16:42 2017 +0100
----------------------------------------------------------------------
.../brooklyn/core/mgmt/BrooklynTaskTags.java | 4 +++
.../apache/brooklyn/rest/api/AdjunctApi.java | 19 +++++++++++
.../rest/resources/AdjunctResource.java | 12 +++++++
.../brooklyn/rest/resources/EntityResource.java | 26 ++-------------
.../rest/transform/TaskTransformer.java | 33 ++++++++++++++++++++
5 files changed, 71 insertions(+), 23 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/d1ab00c0/core/src/main/java/org/apache/brooklyn/core/mgmt/BrooklynTaskTags.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/BrooklynTaskTags.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/BrooklynTaskTags.java
index 7d35ac4..f889b5a 100644
--- a/core/src/main/java/org/apache/brooklyn/core/mgmt/BrooklynTaskTags.java
+++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/BrooklynTaskTags.java
@@ -235,6 +235,10 @@ public class BrooklynTaskTags extends TaskTags {
return em.getTasksWithTag(tagForContextEntity(e));
}
+ public static Set<Task<?>> getTasksInAdjunctContext(ExecutionManager em, EntityAdjunct a) {
+ return em.getTasksWithTag(tagForContextAdjunct(a));
+ }
+
public static ManagementContext getManagementContext(Task<?> task) {
for (Object tag : getTagsFast(task))
if ((tag instanceof ManagementContext))
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/d1ab00c0/rest/rest-api/src/main/java/org/apache/brooklyn/rest/api/AdjunctApi.java
----------------------------------------------------------------------
diff --git a/rest/rest-api/src/main/java/org/apache/brooklyn/rest/api/AdjunctApi.java b/rest/rest-api/src/main/java/org/apache/brooklyn/rest/api/AdjunctApi.java
index 1886f63..f07759d 100644
--- a/rest/rest-api/src/main/java/org/apache/brooklyn/rest/api/AdjunctApi.java
+++ b/rest/rest-api/src/main/java/org/apache/brooklyn/rest/api/AdjunctApi.java
@@ -23,6 +23,7 @@ import java.util.Map;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
+import javax.ws.rs.DefaultValue;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
@@ -36,6 +37,7 @@ import org.apache.brooklyn.rest.domain.AdjunctDetail;
import org.apache.brooklyn.rest.domain.AdjunctSummary;
import org.apache.brooklyn.rest.domain.ConfigSummary;
import org.apache.brooklyn.rest.domain.Status;
+import org.apache.brooklyn.rest.domain.TaskSummary;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -230,4 +232,21 @@ public interface AdjunctApi {
@PathParam("config") String configKeyName,
@ApiParam(name = "value", value = "New value for the configuration", required = true)
Object value);
+
+
+ @GET
+ @Path("/{adjunct}/activities")
+ @ApiOperation(value = "Fetch list of tasks for this adjunct")
+ @ApiResponses(value = {
+ @ApiResponse(code = 404, message = "Could not find application, entity, or adjunct")
+ })
+ public List<TaskSummary> listTasks(
+ @ApiParam(value = "Application ID or name", required = true) @PathParam("application") String applicationId,
+ @ApiParam(value = "Entity ID or name", required = true) @PathParam("entity") String entityId,
+ @ApiParam(value = "Adjunct ID or name", required = true) @PathParam("adjunct") String adjunctToken,
+ @ApiParam(value = "Max number of tasks, or -1 for all (default 200)", required = false)
+ @QueryParam("limit") @DefaultValue("200") int limit,
+ @ApiParam(value = "Whether to include subtasks recursively across different entities (default false)", required = false)
+ @QueryParam("recurse") @DefaultValue("false") Boolean recurse);
+
}
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/d1ab00c0/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/AdjunctResource.java
----------------------------------------------------------------------
diff --git a/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/AdjunctResource.java b/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/AdjunctResource.java
index 08f3698..ec9444b 100644
--- a/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/AdjunctResource.java
+++ b/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/AdjunctResource.java
@@ -40,6 +40,7 @@ import org.apache.brooklyn.api.typereg.RegisteredType;
import org.apache.brooklyn.config.ConfigKey;
import org.apache.brooklyn.core.config.ConfigPredicates;
import org.apache.brooklyn.core.entity.EntityInternal;
+import org.apache.brooklyn.core.mgmt.BrooklynTaskTags;
import org.apache.brooklyn.core.mgmt.entitlement.Entitlements;
import org.apache.brooklyn.rest.api.AdjunctApi;
import org.apache.brooklyn.rest.domain.AdjunctDetail;
@@ -47,12 +48,15 @@ import org.apache.brooklyn.rest.domain.AdjunctSummary;
import org.apache.brooklyn.rest.domain.ConfigSummary;
import org.apache.brooklyn.rest.domain.Status;
import org.apache.brooklyn.rest.domain.SummaryComparators;
+import org.apache.brooklyn.rest.domain.TaskSummary;
import org.apache.brooklyn.rest.filter.HaHotStateRequired;
import org.apache.brooklyn.rest.transform.AdjunctTransformer;
import org.apache.brooklyn.rest.transform.ConfigTransformer;
import org.apache.brooklyn.rest.transform.EntityTransformer;
+import org.apache.brooklyn.rest.transform.TaskTransformer;
import org.apache.brooklyn.rest.util.BrooklynRestResourceUtils;
import org.apache.brooklyn.rest.util.WebResourceUtils;
+import org.apache.brooklyn.util.collections.MutableList;
import org.apache.brooklyn.util.core.ClassLoaderUtils;
import org.apache.brooklyn.util.core.flags.TypeCoercions;
import org.apache.brooklyn.util.exceptions.Exceptions;
@@ -260,5 +264,13 @@ public class AdjunctResource extends AbstractBrooklynRestResource implements Adj
public static String getStringValueForDisplay(BrooklynRestResourceUtils utils, EntityAdjunct policy, Object value) {
return utils.getStringValueForDisplay(value);
}
+
+ @Override
+ public List<TaskSummary> listTasks(String applicationId, String entityId, String adjunctToken, int limit, Boolean recurse) {
+ Entity entity = brooklyn().getEntity(applicationId, entityId);
+ EntityAdjunct adjunct = brooklyn().getAdjunct(entity, adjunctToken);
+ return TaskTransformer.fromTasks(MutableList.copyOf(BrooklynTaskTags.getTasksInAdjunctContext(mgmt().getExecutionManager(), adjunct)),
+ limit, recurse, entity, ui);
+ }
}
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/d1ab00c0/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/EntityResource.java
----------------------------------------------------------------------
diff --git a/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/EntityResource.java b/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/EntityResource.java
index 7d764a4..39eb42b 100644
--- a/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/EntityResource.java
+++ b/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/EntityResource.java
@@ -135,31 +135,11 @@ public class EntityResource extends AbstractBrooklynRestResource implements Enti
@Override
public List<TaskSummary> listTasks(String applicationId, String entityId, int limit, Boolean recurse) {
- int sizeRemaining = limit;
Entity entity = brooklyn().getEntity(applicationId, entityId);
- List<Task<?>> tasksToScan = MutableList.copyOf(BrooklynTaskTags.getTasksInEntityContext(mgmt().getExecutionManager(), entity));
- if (limit>0) {
- tasksToScan = MutableList.copyOf(Ordering.from(new InterestingTasksFirstComparator(entity)).leastOf(tasksToScan, limit));
- }
- Map<String,Task<?>> tasksLoaded = MutableMap.of();
-
- while (!tasksToScan.isEmpty()) {
- Task<?> t = tasksToScan.remove(0);
- if (tasksLoaded.put(t.getId(), t)==null) {
- if (--sizeRemaining==0) {
- break;
- }
- if (Boolean.TRUE.equals(recurse)) {
- if (t instanceof HasTaskChildren) {
- Iterables.addAll(tasksToScan, ((HasTaskChildren) t).getChildren() );
- }
- }
- }
- }
- return new LinkedList<TaskSummary>(Collections2.transform(tasksLoaded.values(),
- TaskTransformer.fromTask(ui.getBaseUriBuilder())));
+ return TaskTransformer.fromTasks(MutableList.copyOf(BrooklynTaskTags.getTasksInEntityContext(mgmt().getExecutionManager(), entity)),
+ limit, recurse, entity, ui);
}
-
+
/** API does not guarantee order, but this is a the one we use (when there are lots of tasks):
* prefer top-level tasks and to recent tasks,
* balanced such that the following are equal:
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/d1ab00c0/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/transform/TaskTransformer.java
----------------------------------------------------------------------
diff --git a/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/transform/TaskTransformer.java b/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/transform/TaskTransformer.java
index 7abb71a..b4e1f08 100644
--- a/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/transform/TaskTransformer.java
+++ b/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/transform/TaskTransformer.java
@@ -22,6 +22,7 @@ import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.Collections;
+import java.util.LinkedList;
import java.util.List;
import java.util.Map;
@@ -36,7 +37,9 @@ import org.apache.brooklyn.core.mgmt.BrooklynTaskTags;
import org.apache.brooklyn.core.mgmt.BrooklynTaskTags.WrappedStream;
import org.apache.brooklyn.rest.domain.LinkWithMetadata;
import org.apache.brooklyn.rest.domain.TaskSummary;
+import org.apache.brooklyn.rest.resources.EntityResource.InterestingTasksFirstComparator;
import org.apache.brooklyn.rest.util.WebResourceUtils;
+import org.apache.brooklyn.util.collections.MutableList;
import org.apache.brooklyn.util.collections.MutableMap;
import org.apache.brooklyn.util.core.task.TaskInternal;
import org.apache.brooklyn.util.exceptions.Exceptions;
@@ -44,7 +47,13 @@ import org.apache.brooklyn.util.text.Strings;
import com.google.common.base.Function;
import com.google.common.base.Preconditions;
+import com.google.common.collect.Collections2;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Ordering;
+
import javax.ws.rs.core.UriBuilder;
+import javax.ws.rs.core.UriInfo;
+
import org.apache.brooklyn.rest.api.ActivityApi;
import org.apache.brooklyn.rest.api.EntityApi;
import static org.apache.brooklyn.rest.util.WebResourceUtils.serviceUriBuilder;
@@ -150,4 +159,28 @@ public class TaskTransformer {
URI taskUri = serviceUriBuilder(ub, ActivityApi.class, "get").build(t.getId());
return new LinkWithMetadata(taskUri.toString(), data);
}
+
+ public static List<TaskSummary> fromTasks(List<Task<?>> tasksToScan, int limit, Boolean recurse, Entity entity, UriInfo ui) {
+ int sizeRemaining = limit;
+ if (limit>0) {
+ tasksToScan = MutableList.copyOf(Ordering.from(new InterestingTasksFirstComparator(entity)).leastOf(tasksToScan, limit));
+ }
+ Map<String,Task<?>> tasksLoaded = MutableMap.of();
+
+ while (!tasksToScan.isEmpty()) {
+ Task<?> t = tasksToScan.remove(0);
+ if (tasksLoaded.put(t.getId(), t)==null) {
+ if (--sizeRemaining==0) {
+ break;
+ }
+ if (Boolean.TRUE.equals(recurse)) {
+ if (t instanceof HasTaskChildren) {
+ Iterables.addAll(tasksToScan, ((HasTaskChildren) t).getChildren() );
+ }
+ }
+ }
+ }
+ return new LinkedList<TaskSummary>(Collections2.transform(tasksLoaded.values(),
+ TaskTransformer.fromTask(ui.getBaseUriBuilder())));
+ }
}