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");
}
}
}