You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by mp...@apache.org on 2015/01/30 15:26:38 UTC

svn commit: r1656026 - in /sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution: agent/ agent/impl/ resources/impl/ servlet/

Author: mpetria
Date: Fri Jan 30 14:26:37 2015
New Revision: 1656026

URL: http://svn.apache.org/r1656026
Log:
SLING-4375: exposing agent state via api

Added:
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/DistributionAgentState.java
Modified:
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/DistributionAgent.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/ForwardDistributionAgentFactory.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/QueueDistributionAgentFactory.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/ReverseDistributionAgentFactory.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgent.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgentFactory.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/SyncDistributionAgentFactory.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/resources/impl/ExtendedDistributionServiceResourceProvider.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/servlet/DistributionAgentLogServlet.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/servlet/DistributionAgentServlet.java

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/DistributionAgent.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/DistributionAgent.java?rev=1656026&r1=1656025&r2=1656026&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/DistributionAgent.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/DistributionAgent.java Fri Jan 30 14:26:37 2015
@@ -27,6 +27,7 @@ import org.apache.sling.distribution.Dis
 import org.apache.sling.distribution.DistributionResponse;
 import org.apache.sling.distribution.log.DistributionLog;
 import org.apache.sling.distribution.queue.DistributionQueue;
+import org.apache.sling.distribution.queue.DistributionQueueState;
 
 /**
  * A distribution agent is responsible for handling {@link org.apache.sling.distribution.DistributionRequest}s.
@@ -65,6 +66,14 @@ public interface DistributionAgent {
     @Nonnull
     DistributionLog getLog();
 
+
+    /**
+     * returns the state of the agent
+     * @return the agent state
+     */
+    @Nonnull
+    DistributionAgentState getState();
+
     /**
      * Perform a {@link org.apache.sling.distribution.DistributionRequest} to distribute content from a source
      * instance to a target instance.

Added: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/DistributionAgentState.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/DistributionAgentState.java?rev=1656026&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/DistributionAgentState.java (added)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/DistributionAgentState.java Fri Jan 30 14:26:37 2015
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.sling.distribution.agent;
+
+/**
+ * The state of a distribution agent.
+ */
+public enum DistributionAgentState {
+
+    /**
+     * The agent is active but the queue processing is disabled.
+     */
+    PAUSED,
+
+    /**
+     * The agent is active and it does not have items in its queues.
+     */
+    IDLE,
+
+    /**
+     * The agent is active and there are items in its queues.
+     */
+    RUNNING,
+
+    /**
+     * The agent is active and some items in its queues cannot be processed.
+     */
+    BLOCKED
+}

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/ForwardDistributionAgentFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/ForwardDistributionAgentFactory.java?rev=1656026&r1=1656025&r2=1656026&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/ForwardDistributionAgentFactory.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/ForwardDistributionAgentFactory.java Fri Jan 30 14:26:37 2015
@@ -75,6 +75,13 @@ public class ForwardDistributionAgentFac
     @Property(label = "Name", description = "The name of the agent.")
     public static final String NAME = DistributionComponentUtils.PN_NAME;
 
+    @Property(label = "Title", description = "The display friendly title of the agent.")
+    public static final String TITLE = "title";
+
+    @Property(label = "Details", description = "The display friendly details of the agent.")
+    public static final String DETAILS = "details";
+
+
     @Property(boolValue = true, label = "Enabled", description = "Whether or not to start the distribution agent.")
     private static final String ENABLED = "enabled";
 

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/QueueDistributionAgentFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/QueueDistributionAgentFactory.java?rev=1656026&r1=1656025&r2=1656026&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/QueueDistributionAgentFactory.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/QueueDistributionAgentFactory.java Fri Jan 30 14:26:37 2015
@@ -70,6 +70,13 @@ public class QueueDistributionAgentFacto
     @Property(label = "Name", description = "The name of the agent.")
     public static final String NAME = DistributionComponentUtils.PN_NAME;
 
+    @Property(label = "Title", description = "The display friendly title of the agent.")
+    public static final String TITLE = "title";
+
+    @Property(label = "Details", description = "The display friendly details of the agent.")
+    public static final String DETAILS = "details";
+
+
     @Property(boolValue = true, label = "Enabled", description = "Whether or not to start the distribution agent.")
     private static final String ENABLED = "enabled";
 

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/ReverseDistributionAgentFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/ReverseDistributionAgentFactory.java?rev=1656026&r1=1656025&r2=1656026&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/ReverseDistributionAgentFactory.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/ReverseDistributionAgentFactory.java Fri Jan 30 14:26:37 2015
@@ -74,6 +74,12 @@ public class ReverseDistributionAgentFac
     @Property(label = "Name", description = "The name of the agent.")
     public static final String NAME = DistributionComponentUtils.PN_NAME;
 
+    @Property(label = "Title", description = "The display friendly title of the agent.")
+    public static final String TITLE = "title";
+
+    @Property(label = "Details", description = "The display friendly details of the agent.")
+    public static final String DETAILS = "details";
+
     @Property(boolValue = true, label = "Enabled", description = "Whether or not to start the distribution agent.")
     private static final String ENABLED = "enabled";
 

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgent.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgent.java?rev=1656026&r1=1656025&r2=1656026&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgent.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgent.java Fri Jan 30 14:26:37 2015
@@ -37,6 +37,7 @@ import org.apache.sling.distribution.age
 import org.apache.sling.distribution.DistributionRequest;
 import org.apache.sling.distribution.DistributionRequestState;
 import org.apache.sling.distribution.DistributionResponse;
+import org.apache.sling.distribution.agent.DistributionAgentState;
 import org.apache.sling.distribution.component.impl.DistributionComponentKind;
 import org.apache.sling.distribution.impl.CompositeDistributionResponse;
 import org.apache.sling.distribution.impl.SimpleDistributionResponse;
@@ -52,6 +53,7 @@ import org.apache.sling.distribution.pac
 import org.apache.sling.distribution.packaging.DistributionPackageInfo;
 import org.apache.sling.distribution.packaging.SharedDistributionPackage;
 import org.apache.sling.distribution.queue.DistributionQueue;
+import org.apache.sling.distribution.queue.DistributionQueueState;
 import org.apache.sling.distribution.queue.impl.DistributionQueueDispatchingStrategy;
 import org.apache.sling.distribution.queue.DistributionQueueException;
 import org.apache.sling.distribution.queue.DistributionQueueItem;
@@ -169,7 +171,12 @@ public class SimpleDistributionAgent imp
             log.info(silent, "returning response {}", distributionResponse);
 
             return distributionResponse;
-        } catch (Exception e) {
+        } catch (DistributionRequestAuthorizationException e) {
+            return new SimpleDistributionResponse(DistributionRequestState.DROPPED, "Request is not authorized");
+        } catch (LoginException e) {
+            log.error("Error executing distribution request {} {}", distributionRequest, e);
+            throw new DistributionAgentException(e);
+        } catch (DistributionPackageExportException e) {
             log.error("Error executing distribution request {} {}", distributionRequest, e);
             throw new DistributionAgentException(e);
         } finally {
@@ -246,6 +253,39 @@ public class SimpleDistributionAgent imp
         return log;
     }
 
+    @Nonnull
+    public DistributionAgentState getState() {
+        DistributionAgentState agentState = DistributionAgentState.IDLE;
+
+        // if it is passive and it is not a queueing agent
+        if (isPassive() && distributionPackageImporter != null) {
+            return DistributionAgentState.PAUSED;
+        }
+
+        for (String queueName : getQueueNames()) {
+            DistributionQueue queue = null;
+            try {
+                 queue = getQueue(queueName);
+            } catch (DistributionAgentException e) {
+
+            }
+
+            if (queue != null) {
+                DistributionQueueState state = queue.getState();
+                if (DistributionQueueState.BLOCKED.equals(state)) {
+                    return DistributionAgentState.BLOCKED;
+                }
+
+                if (DistributionQueueState.RUNNING.equals(state)) {
+                    agentState = DistributionAgentState.RUNNING;
+                }
+            }
+        }
+
+        return agentState;
+
+    }
+
 
     public void enable() {
         log.info("enabling agent");

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgentFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgentFactory.java?rev=1656026&r1=1656025&r2=1656026&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgentFactory.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgentFactory.java Fri Jan 30 14:26:37 2015
@@ -67,6 +67,13 @@ public class SimpleDistributionAgentFact
     @Property(label = "Name", description = "The name of the agent.")
     public static final String NAME = DistributionComponentUtils.PN_NAME;
 
+    @Property(label = "Title", description = "The display friendly title of the agent.")
+    public static final String TITLE = "title";
+
+    @Property(label = "Details", description = "The display friendly details of the agent.")
+    public static final String DETAILS = "details";
+
+
     @Property(boolValue = true, label = "Enabled", description = "Whether or not to start the distribution agent.")
     private static final String ENABLED = "enabled";
 

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/SyncDistributionAgentFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/SyncDistributionAgentFactory.java?rev=1656026&r1=1656025&r2=1656026&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/SyncDistributionAgentFactory.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/SyncDistributionAgentFactory.java Fri Jan 30 14:26:37 2015
@@ -76,6 +76,12 @@ public class SyncDistributionAgentFactor
     @Property(label = "Name", description = "The name of the agent.")
     public static final String NAME = DistributionComponentUtils.PN_NAME;
 
+    @Property(label = "Title", description = "The display friendly title of the agent.")
+    public static final String TITLE = "title";
+
+    @Property(label = "Details", description = "The display friendly details of the agent.")
+    public static final String DETAILS = "details";
+
     @Property(boolValue = true, label = "Enabled", description = "Whether or not to start the distribution agent.")
     private static final String ENABLED = "enabled";
 

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/resources/impl/ExtendedDistributionServiceResourceProvider.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/resources/impl/ExtendedDistributionServiceResourceProvider.java?rev=1656026&r1=1656025&r2=1656026&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/resources/impl/ExtendedDistributionServiceResourceProvider.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/resources/impl/ExtendedDistributionServiceResourceProvider.java Fri Jan 30 14:26:37 2015
@@ -21,6 +21,7 @@ package org.apache.sling.distribution.re
 
 import org.apache.sling.distribution.agent.DistributionAgent;
 import org.apache.sling.distribution.agent.DistributionAgentException;
+import org.apache.sling.distribution.agent.DistributionAgentState;
 import org.apache.sling.distribution.component.impl.DistributionComponent;
 import org.apache.sling.distribution.component.impl.DistributionComponentKind;
 import org.apache.sling.distribution.component.impl.DistributionComponentProvider;
@@ -29,6 +30,7 @@ import org.apache.sling.distribution.que
 import org.apache.sling.distribution.queue.DistributionQueueException;
 import org.apache.sling.distribution.queue.DistributionQueueItem;
 import org.apache.sling.distribution.queue.DistributionQueueItemStatus;
+import org.apache.sling.distribution.queue.DistributionQueueState;
 import org.apache.sling.distribution.resources.DistributionResourceTypes;
 import org.apache.sling.distribution.resources.impl.common.SimplePathInfo;
 
@@ -44,6 +46,8 @@ public class ExtendedDistributionService
 
     private static final String QUEUES_PATH = "queues";
     private static final String LOG_PATH = "log";
+    private static final String STATUS_PATH = "status";
+
 
     private static final int MAX_QUEUE_DEPTH = 100;
 
@@ -74,6 +78,12 @@ public class ExtendedDistributionService
                     result.put(ADAPTABLE_PROPERTY_NAME, distributionLog);
 
                     return result;
+                } else if (childResourceName.startsWith(STATUS_PATH)) {
+                    Map<String, Object> result = new HashMap<String, Object>();
+                    DistributionAgentState agentState = agent.getState();
+
+                    result.put("state", agentState.name());
+                    return result;
                 }
 
             }
@@ -93,6 +103,8 @@ public class ExtendedDistributionService
                     List<String> nameList = new ArrayList<String>();
                     nameList.add(QUEUES_PATH);
                     nameList.add(LOG_PATH);
+                    nameList.add(STATUS_PATH);
+
                     return nameList;
                 }
             }
@@ -119,8 +131,17 @@ public class ExtendedDistributionService
             try {
                 DistributionQueue queue = agent.getQueue(queueName);
 
+                DistributionAgentState agentState = agent.getState();
+
                 result.put(SLING_RESOURCE_TYPE, DistributionResourceTypes.AGENT_QUEUE_RESOURCE_TYPE);
-                result.put("state", queue.getState().name());
+
+                // if the agent is paused report also the queues as paused.
+                // TODO: to this at java API level
+                if (DistributionAgentState.PAUSED.equals(agentState)) {
+                    result.put("state", DistributionQueueState.PAUSED.name());
+                } else {
+                    result.put("state", queue.getState().name());
+                }
                 result.put("empty", queue.isEmpty());
                 result.put("itemsCount", queue.getItemsCount());
 

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/servlet/DistributionAgentLogServlet.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/servlet/DistributionAgentLogServlet.java?rev=1656026&r1=1656025&r2=1656026&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/servlet/DistributionAgentLogServlet.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/servlet/DistributionAgentLogServlet.java Fri Jan 30 14:26:37 2015
@@ -65,7 +65,7 @@ public class DistributionAgentLogServlet
             }
         } else {
             response.setStatus(404);
-            writer.append("Agent not found");
+            writer.append("agent not found");
         }
     }
 }

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/servlet/DistributionAgentServlet.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/servlet/DistributionAgentServlet.java?rev=1656026&r1=1656025&r2=1656026&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/servlet/DistributionAgentServlet.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/servlet/DistributionAgentServlet.java Fri Jan 30 14:26:37 2015
@@ -74,14 +74,13 @@ public class DistributionAgentServlet ex
                 response.getWriter().append(distributionResponse.toString());
 
                 log.debug("distribution response : {}", distributionResponse);
-            } catch (DistributionAgentException e) {
+            } catch (Throwable e) {
                 response.setStatus(503);
-                response.getWriter().append("{\"error\" : \"").append(e.toString()).append("\"}");
+                response.getWriter().append("an error has occured");
             }
         } else {
             response.setStatus(404);
-            response.getWriter().append("{\"error\" : \"agent ").append(request.getServletPath())
-                    .append(" not found\"}");
+            response.getWriter().append("agent not found");
         }
     }
 }