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 <[email protected]>
Authored: Tue Sep 19 14:04:06 2017 +0100
Committer: Alex Heneveld <[email protected]>
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())));
+    }
 }

Reply via email to