You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ch...@apache.org on 2013/04/19 22:14:49 UTC

svn commit: r1470019 - in /activemq/activemq-apollo/trunk: apollo-dto/src/main/java/org/apache/activemq/apollo/dto/DispatchQueueMetrics.java apollo-web/src/main/scala/org/apache/activemq/apollo/web/resources/BrokerResource.scala

Author: chirino
Date: Fri Apr 19 20:14:49 2013
New Revision: 1470019

URL: http://svn.apache.org/r1470019
Log:
Expose dispatch queue monitoring via the web admin interfaces.

Modified:
    activemq/activemq-apollo/trunk/apollo-dto/src/main/java/org/apache/activemq/apollo/dto/DispatchQueueMetrics.java
    activemq/activemq-apollo/trunk/apollo-web/src/main/scala/org/apache/activemq/apollo/web/resources/BrokerResource.scala

Modified: activemq/activemq-apollo/trunk/apollo-dto/src/main/java/org/apache/activemq/apollo/dto/DispatchQueueMetrics.java
URL: http://svn.apache.org/viewvc/activemq/activemq-apollo/trunk/apollo-dto/src/main/java/org/apache/activemq/apollo/dto/DispatchQueueMetrics.java?rev=1470019&r1=1470018&r2=1470019&view=diff
==============================================================================
--- activemq/activemq-apollo/trunk/apollo-dto/src/main/java/org/apache/activemq/apollo/dto/DispatchQueueMetrics.java (original)
+++ activemq/activemq-apollo/trunk/apollo-dto/src/main/java/org/apache/activemq/apollo/dto/DispatchQueueMetrics.java Fri Apr 19 20:14:49 2013
@@ -1,11 +1,88 @@
+/**
+ * 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.apollo.dto;
 
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlRootElement;
+
 /**
- * Created with IntelliJ IDEA.
- * User: chirino
- * Date: 4/19/13
- * Time: 2:13 PM
- * To change this template use File | Settings | File Templates.
+ * <p>
+ * </p>
+ *
+ * @author <a href="http://hiramchirino.com">Hiram Chirino</a>
  */
+@XmlRootElement(name = "dispatch_queue_metrics")
+@XmlAccessorType(XmlAccessType.FIELD)
+@JsonIgnoreProperties(ignoreUnknown = true)
 public class DispatchQueueMetrics {
-}
+
+    /**
+     * How long the metrics gathered
+     */
+    @XmlAttribute(name="duration")
+    public long duration;
+
+    /**
+     * The name of the dispatch queue associated with the metrics collected.
+     */
+    @XmlAttribute(name="queue")
+    public String queue;
+
+    /**
+     * The number of tasks waiting to execute
+     */
+    @XmlAttribute(name="waiting")
+    public long waiting;
+
+    /**
+     * The longest amount of time a task spent waiting to execute (in nanoseconds).
+     */
+    @XmlAttribute(name="wait_time_max")
+    public long wait_time_max;
+
+    /**
+     * The total time all tasks spent waiting to execute (in nanoseconds).
+     */
+    @XmlAttribute(name="wait_time_total")
+    public long wait_time_total;
+
+
+    /**
+     * The number of tasks executed.
+     */
+    @XmlAttribute(name="executed")
+    public long executed;
+
+    /**
+     * The longest amount of time a task spent executing (in nanoseconds).
+     */
+    @XmlAttribute(name="execute_time_max")
+    public long execute_time_max;
+
+    /**
+     *  The total time all tasks spent executing (in nanoseconds).
+     */
+    @XmlAttribute(name="execute_time_total")
+    public long execute_time_total;
+
+
+
+}
\ No newline at end of file

Modified: activemq/activemq-apollo/trunk/apollo-web/src/main/scala/org/apache/activemq/apollo/web/resources/BrokerResource.scala
URL: http://svn.apache.org/viewvc/activemq/activemq-apollo/trunk/apollo-web/src/main/scala/org/apache/activemq/apollo/web/resources/BrokerResource.scala?rev=1470019&r1=1470018&r2=1470019&view=diff
==============================================================================
--- activemq/activemq-apollo/trunk/apollo-web/src/main/scala/org/apache/activemq/apollo/web/resources/BrokerResource.scala (original)
+++ activemq/activemq-apollo/trunk/apollo-web/src/main/scala/org/apache/activemq/apollo/web/resources/BrokerResource.scala Fri Apr 19 20:14:49 2013
@@ -1024,4 +1024,40 @@ class BrokerResource() extends Resource 
     }
   }
 
+  @GET
+  @Path("/hawtdispatch/profile")
+  @ApiOperation(value="Enables or disables profiling")
+  def hawtdispatch_profile(@QueryParam("enabled") enabled : Boolean) = ok {
+    with_broker { broker =>
+      admining(broker) {
+        Dispatch.profile(enabled)
+      }
+    }
+  }
+
+  @GET
+  @Path("/hawtdispatch/metrics")
+  @ApiOperation(value="Enables or disables profiling")
+  def hawtdispatch_metrics(@QueryParam("enabled") enabled : Boolean):Array[DispatchQueueMetrics] = {
+    with_broker { broker =>
+      monitoring(broker) {
+        val m = Dispatch.metrics()
+        m.toArray(new Array[Metrics](m.size())).sortWith{ case (l,r)=> l.totalRunTimeNS > r.totalRunTimeNS }.map { x =>
+          val rc = new DispatchQueueMetrics
+          rc.queue = x.queue.getLabel
+          rc.duration = x.durationNS
+
+          rc.waiting = (x.enqueued - x.dequeued).max(0)
+          rc.wait_time_max = x.maxWaitTimeNS
+          rc.wait_time_total = x.totalWaitTimeNS
+
+          rc.execute_time_max = x.maxRunTimeNS
+          rc.execute_time_total = x.totalRunTimeNS
+          rc.executed = x.dequeued
+          rc
+        }
+      }
+    }
+  }
+
 }