You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ar...@apache.org on 2014/03/15 03:54:20 UTC

git commit: AMQ-2429: Add pages listing producers for Queues and Topics.

Repository: activemq
Updated Branches:
  refs/heads/trunk adb49f562 -> db1e3fc9e


AMQ-2429: Add pages listing producers for Queues and Topics.


Project: http://git-wip-us.apache.org/repos/asf/activemq/repo
Commit: http://git-wip-us.apache.org/repos/asf/activemq/commit/db1e3fc9
Tree: http://git-wip-us.apache.org/repos/asf/activemq/tree/db1e3fc9
Diff: http://git-wip-us.apache.org/repos/asf/activemq/diff/db1e3fc9

Branch: refs/heads/trunk
Commit: db1e3fc9e375f6fa2692c2cc3d539af563063be7
Parents: adb49f5
Author: artnaseef <ar...@artnaseef.com>
Authored: Fri Mar 14 19:52:03 2014 -0700
Committer: artnaseef <ar...@artnaseef.com>
Committed: Fri Mar 14 19:53:53 2014 -0700

----------------------------------------------------------------------
 .../main/webapp/WEB-INF/webconsole-query.xml    |  2 +
 .../src/main/webapp/queueProducers.jsp          | 70 ++++++++++++++++++++
 activemq-web-console/src/main/webapp/queues.jsp |  2 +
 .../src/main/webapp/topicProducers.jsp          | 70 ++++++++++++++++++++
 activemq-web-console/src/main/webapp/topics.jsp |  2 +
 .../org/apache/activemq/web/BrokerFacade.java   | 24 ++++++-
 .../activemq/web/BrokerFacadeSupport.java       | 23 +++++++
 .../apache/activemq/web/QueueProducerQuery.java | 45 +++++++++++++
 .../apache/activemq/web/TopicProducerQuery.java | 45 +++++++++++++
 9 files changed, 282 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/activemq/blob/db1e3fc9/activemq-web-console/src/main/webapp/WEB-INF/webconsole-query.xml
----------------------------------------------------------------------
diff --git a/activemq-web-console/src/main/webapp/WEB-INF/webconsole-query.xml b/activemq-web-console/src/main/webapp/WEB-INF/webconsole-query.xml
index 6a1fcf6..556d9b7 100644
--- a/activemq-web-console/src/main/webapp/WEB-INF/webconsole-query.xml
+++ b/activemq-web-console/src/main/webapp/WEB-INF/webconsole-query.xml
@@ -21,5 +21,7 @@
   <bean id="queueBrowser" class="org.apache.activemq.web.QueueBrowseQuery" autowire="constructor" destroy-method="destroy" scope="request"/>
   <bean id="messageQuery" class="org.apache.activemq.web.MessageQuery" autowire="constructor" destroy-method="destroy" scope="request"/>
   <bean id="queueConsumerQuery" class="org.apache.activemq.web.QueueConsumerQuery" autowire="constructor" destroy-method="destroy" scope="request"/>
+  <bean id="queueProducerQuery" class="org.apache.activemq.web.QueueProducerQuery" autowire="constructor" destroy-method="destroy" scope="request"/>
+  <bean id="topicProducerQuery" class="org.apache.activemq.web.TopicProducerQuery" autowire="constructor" destroy-method="destroy" scope="request"/>
   <bean id="connectionQuery" class="org.apache.activemq.web.ConnectionQuery" autowire="constructor" destroy-method="destroy" scope="request"/>
 </beans>

http://git-wip-us.apache.org/repos/asf/activemq/blob/db1e3fc9/activemq-web-console/src/main/webapp/queueProducers.jsp
----------------------------------------------------------------------
diff --git a/activemq-web-console/src/main/webapp/queueProducers.jsp b/activemq-web-console/src/main/webapp/queueProducers.jsp
new file mode 100644
index 0000000..724a76c
--- /dev/null
+++ b/activemq-web-console/src/main/webapp/queueProducers.jsp
@@ -0,0 +1,70 @@
+<%--
+    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.
+--%>
+<html>
+<head>
+<c:set var="pageTitle" value="Producers for Queue ${requestContext.queueProducerQuery.JMSDestination}"/>
+
+<%@include file="decorators/head.jsp" %>
+</head>
+<body>
+
+<%@include file="decorators/header.jsp" %>
+
+
+
+<h2>Active Producers for <c:out value="${requestContext.queueProducerQuery.JMSDestination}" /></h2>
+
+<table id="producers" class="sortable autostripe">
+<thead>
+<tr>
+	<th>
+		<span>Client ID</span>
+		<br/>
+		<span>Connection ID</span>
+	</th>
+	<th>SessionId</th>
+	<th>ProducerId</th>
+	<th>ProducerWindowSize</th>
+	<th>DispatchAsync</th>
+	<th>Blocked</th>
+	<th>BlockedTime</th>
+	<th>SentCount</th>
+</tr>
+</thead>
+<tbody>
+<c:forEach items="${requestContext.queueProducerQuery.producers}" var="row">
+<tr>
+	<td>
+        <a href="<c:url value="connection.jsp?connectionID=${row.clientId}"/>"><c:out value="${row.clientId}" /></a><br/>
+        <br>
+        <c:out value="${row.connectionId}" />
+    </td>
+	<td><c:out value="${row.sessionId}" /></td>
+	<td><c:out value="${row.producerId}" /></td>
+	<td><c:out value="${row.producerWindowSize}" /></td>
+	<td><c:out value="${row.dispatchAsync}" /></td>
+	<td><c:out value="${row.producerBlocked}" /></td>
+	<td><c:out value="${row.totalTimeBlocked}" /></td>
+	<td><c:out value="${row.sentCount}" /></td>
+</tr>
+</c:forEach>
+</tbody>
+</table>
+<%@include file="decorators/footer.jsp" %>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/activemq/blob/db1e3fc9/activemq-web-console/src/main/webapp/queues.jsp
----------------------------------------------------------------------
diff --git a/activemq-web-console/src/main/webapp/queues.jsp b/activemq-web-console/src/main/webapp/queues.jsp
index 8b3a204..86e5772 100644
--- a/activemq-web-console/src/main/webapp/queues.jsp
+++ b/activemq-web-console/src/main/webapp/queues.jsp
@@ -66,6 +66,8 @@
                    <c:param name="JMSDestination" value="${row.name}" /></c:url>">Browse</a>
 	<a href="<c:url value="queueConsumers.jsp">
 	                <c:param name="JMSDestination" value="${row.name}" /></c:url>">Active Consumers</a><br/>
+	<a href="<c:url value="queueProducers.jsp">
+	                <c:param name="JMSDestination" value="${row.name}" /></c:url>">Active Producers</a><br/>
     <a href="<c:url value="queueBrowse/${row.name}">
                     <c:param name="view" value="rss" />
                     <c:param name="feedType" value="atom_1.0" />

http://git-wip-us.apache.org/repos/asf/activemq/blob/db1e3fc9/activemq-web-console/src/main/webapp/topicProducers.jsp
----------------------------------------------------------------------
diff --git a/activemq-web-console/src/main/webapp/topicProducers.jsp b/activemq-web-console/src/main/webapp/topicProducers.jsp
new file mode 100644
index 0000000..2a14077
--- /dev/null
+++ b/activemq-web-console/src/main/webapp/topicProducers.jsp
@@ -0,0 +1,70 @@
+<%--
+    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.
+--%>
+<html>
+<head>
+<c:set var="pageTitle" value="Producers for Topic ${requestContext.topicProducerQuery.JMSDestination}"/>
+
+<%@include file="decorators/head.jsp" %>
+</head>
+<body>
+
+<%@include file="decorators/header.jsp" %>
+
+
+
+<h2>Active Producers for <c:out value="${requestContext.topicProducerQuery.JMSDestination}" /></h2>
+
+<table id="producers" class="sortable autostripe">
+<thead>
+<tr>
+	<th>
+		<span>Client ID</span>
+		<br/>
+		<span>Connection ID</span>
+	</th>
+	<th>SessionId</th>
+	<th>ProducerId</th>
+	<th>ProducerWindowSize</th>
+	<th>DispatchAsync</th>
+	<th>Blocked</th>
+	<th>BlockedTime</th>
+	<th>SentCount</th>
+</tr>
+</thead>
+<tbody>
+<c:forEach items="${requestContext.topicProducerQuery.producers}" var="row">
+<tr>
+	<td>
+        <a href="<c:url value="connection.jsp?connectionID=${row.clientId}"/>"><c:out value="${row.clientId}" /></a><br/>
+        <br>
+        <c:out value="${row.connectionId}" />
+    </td>
+	<td><c:out value="${row.sessionId}" /></td>
+	<td><c:out value="${row.producerId}" /></td>
+	<td><c:out value="${row.producerWindowSize}" /></td>
+	<td><c:out value="${row.dispatchAsync}" /></td>
+	<td><c:out value="${row.producerBlocked}" /></td>
+	<td><c:out value="${row.totalTimeBlocked}" /></td>
+	<td><c:out value="${row.sentCount}" /></td>
+</tr>
+</c:forEach>
+</tbody>
+</table>
+<%@include file="decorators/footer.jsp" %>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/activemq/blob/db1e3fc9/activemq-web-console/src/main/webapp/topics.jsp
----------------------------------------------------------------------
diff --git a/activemq-web-console/src/main/webapp/topics.jsp b/activemq-web-console/src/main/webapp/topics.jsp
index f964180..d44de08 100644
--- a/activemq-web-console/src/main/webapp/topics.jsp
+++ b/activemq-web-console/src/main/webapp/topics.jsp
@@ -61,6 +61,8 @@
     <a href="<c:url value="send.jsp">
                         <c:param name="JMSDestination" value="${row.name}" />
                         <c:param name="JMSDestinationType" value="topic"/></c:url>">Send To</a>
+    <a href="<c:url value="topicProducers.jsp">
+                        <c:param name="JMSDestination" value="${row.name}" /></c:url>">Active Producers</a><br/>
     <a href="<c:url value="deleteDestination.action">
                    <c:param name="JMSDestination" value="${row.name}" />
                    <c:param name="JMSDestinationType" value="topic"/>

http://git-wip-us.apache.org/repos/asf/activemq/blob/db1e3fc9/activemq-web/src/main/java/org/apache/activemq/web/BrokerFacade.java
----------------------------------------------------------------------
diff --git a/activemq-web/src/main/java/org/apache/activemq/web/BrokerFacade.java b/activemq-web/src/main/java/org/apache/activemq/web/BrokerFacade.java
index d4bf13a..c7e4d4a 100644
--- a/activemq-web/src/main/java/org/apache/activemq/web/BrokerFacade.java
+++ b/activemq-web/src/main/java/org/apache/activemq/web/BrokerFacade.java
@@ -73,6 +73,28 @@ public interface BrokerFacade {
 			throws Exception;
 
 	/**
+	 * All active producers to a queue.
+	 * 
+	 * @param queueName
+	 *            the name of the queue, not <code>null</code>
+	 * @return not <code>null</code>
+	 * @throws Exception
+	 */
+	Collection<ProducerViewMBean> getQueueProducers(String queueName)
+			throws Exception;
+
+	/**
+	 * All active producers to a topic.
+	 * 
+	 * @param queueName
+	 *            the name of the topic, not <code>null</code>
+	 * @return not <code>null</code>
+	 * @throws Exception
+	 */
+	Collection<ProducerViewMBean> getTopicProducers(String queueName)
+			throws Exception;
+
+	/**
 	 * Active durable subscribers to topics of the broker.
 	 * 
 	 * @return not <code>null</code>
@@ -209,4 +231,4 @@ public interface BrokerFacade {
 
     boolean isJobSchedulerStarted();
 
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/activemq/blob/db1e3fc9/activemq-web/src/main/java/org/apache/activemq/web/BrokerFacadeSupport.java
----------------------------------------------------------------------
diff --git a/activemq-web/src/main/java/org/apache/activemq/web/BrokerFacadeSupport.java b/activemq-web/src/main/java/org/apache/activemq/web/BrokerFacadeSupport.java
index babd892..aa2006a 100644
--- a/activemq-web/src/main/java/org/apache/activemq/web/BrokerFacadeSupport.java
+++ b/activemq-web/src/main/java/org/apache/activemq/web/BrokerFacadeSupport.java
@@ -39,6 +39,7 @@ import org.apache.activemq.broker.jmx.NetworkBridgeViewMBean;
 import org.apache.activemq.broker.jmx.NetworkConnectorViewMBean;
 import org.apache.activemq.broker.jmx.QueueViewMBean;
 import org.apache.activemq.broker.jmx.SubscriptionViewMBean;
+import org.apache.activemq.broker.jmx.ProducerViewMBean;
 import org.apache.activemq.broker.jmx.TopicViewMBean;
 import org.springframework.util.StringUtils;
 
@@ -218,6 +219,28 @@ public abstract class BrokerFacadeSupport implements BrokerFacade {
 
     @Override
     @SuppressWarnings("unchecked")
+    public Collection<ProducerViewMBean> getQueueProducers(String queueName) throws Exception {
+        String brokerName = getBrokerName();
+        queueName = StringUtils.replace(queueName, "\"", "_");
+        ObjectName query = new ObjectName("org.apache.activemq:type=Broker,brokerName=" + brokerName
+                + ",destinationType=Queue,destinationName=" + queueName + ",endpoint=Producer,*");
+        Set<ObjectName> queryResult = queryNames(query, null);
+        return getManagedObjects(queryResult.toArray(new ObjectName[queryResult.size()]), ProducerViewMBean.class);
+    }
+
+    @Override
+    @SuppressWarnings("unchecked")
+    public Collection<ProducerViewMBean> getTopicProducers(String topicName) throws Exception {
+        String brokerName = getBrokerName();
+        topicName = StringUtils.replace(topicName, "\"", "_");
+        ObjectName query = new ObjectName("org.apache.activemq:type=Broker,brokerName=" + brokerName
+                + ",destinationType=Topic,destinationName=" + topicName + ",endpoint=Producer,*");
+        Set<ObjectName> queryResult = queryNames(query, null);
+        return getManagedObjects(queryResult.toArray(new ObjectName[queryResult.size()]), ProducerViewMBean.class);
+    }
+
+    @Override
+    @SuppressWarnings("unchecked")
     public Collection<SubscriptionViewMBean> getConsumersOnConnection(String connectionName) throws Exception {
         connectionName = StringUtils.replace(connectionName, ":", "_");
         String brokerName = getBrokerName();

http://git-wip-us.apache.org/repos/asf/activemq/blob/db1e3fc9/activemq-web/src/main/java/org/apache/activemq/web/QueueProducerQuery.java
----------------------------------------------------------------------
diff --git a/activemq-web/src/main/java/org/apache/activemq/web/QueueProducerQuery.java b/activemq-web/src/main/java/org/apache/activemq/web/QueueProducerQuery.java
new file mode 100644
index 0000000..b5ca8c9
--- /dev/null
+++ b/activemq-web/src/main/java/org/apache/activemq/web/QueueProducerQuery.java
@@ -0,0 +1,45 @@
+/*
+ * 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.activemq.web;
+
+import java.util.Collection;
+
+import javax.jms.JMSException;
+
+import org.apache.activemq.broker.jmx.ProducerViewMBean;
+
+/**
+ * Query for Queue producers.
+ * 
+ * 
+ */
+public class QueueProducerQuery extends DestinationFacade {
+
+	public QueueProducerQuery(BrokerFacade brokerFacade) throws JMSException {
+		super(brokerFacade);
+		setJMSDestinationType("queue");
+	}
+
+	public Collection<ProducerViewMBean> getProducers() throws Exception {
+		return getBrokerFacade().getQueueProducers(getJMSDestination());
+	}
+
+	public void destroy() {
+		// empty
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/activemq/blob/db1e3fc9/activemq-web/src/main/java/org/apache/activemq/web/TopicProducerQuery.java
----------------------------------------------------------------------
diff --git a/activemq-web/src/main/java/org/apache/activemq/web/TopicProducerQuery.java b/activemq-web/src/main/java/org/apache/activemq/web/TopicProducerQuery.java
new file mode 100644
index 0000000..e645c27
--- /dev/null
+++ b/activemq-web/src/main/java/org/apache/activemq/web/TopicProducerQuery.java
@@ -0,0 +1,45 @@
+/*
+ * 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.activemq.web;
+
+import java.util.Collection;
+
+import javax.jms.JMSException;
+
+import org.apache.activemq.broker.jmx.ProducerViewMBean;
+
+/**
+ * Query for Topic producers.
+ * 
+ * 
+ */
+public class TopicProducerQuery extends DestinationFacade {
+
+	public TopicProducerQuery(BrokerFacade brokerFacade) throws JMSException {
+		super(brokerFacade);
+		setJMSDestinationType("queue");
+	}
+
+	public Collection<ProducerViewMBean> getProducers() throws Exception {
+		return getBrokerFacade().getTopicProducers(getJMSDestination());
+	}
+
+	public void destroy() {
+		// empty
+	}
+
+}