Author: ryan
Date: Mon Feb 9 05:09:43 2009
New Revision: 742265
URL: http://svn.apache.org/viewvc?rev=742265&view=rev
Log:
DROIDS-40 -- simple wicket UI to see what is running
Added:
incubator/droids/trunk/droids-wicket/src/main/java/org/apache/droids/wicket/component/CollectionDataProvider.java
incubator/droids/trunk/droids-wicket/src/main/java/org/apache/droids/wicket/component/WorkBeanDataProvider.java
Modified:
incubator/droids/trunk/droids-wicket/pom.xml
incubator/droids/trunk/droids-wicket/src/main/java/org/apache/droids/wicket/component/DroidPanel.html
incubator/droids/trunk/droids-wicket/src/main/java/org/apache/droids/wicket/component/DroidPanel.java
incubator/droids/trunk/droids-wicket/src/main/resources/applicationContext.xml
Modified: incubator/droids/trunk/droids-wicket/pom.xml
URL:
http://svn.apache.org/viewvc/incubator/droids/trunk/droids-wicket/pom.xml?rev=742265&r1=742264&r2=742265&view=diff
==============================================================================
--- incubator/droids/trunk/droids-wicket/pom.xml (original)
+++ incubator/droids/trunk/droids-wicket/pom.xml Mon Feb 9 05:09:43 2009
@@ -78,6 +78,19 @@
<version>${wicket.version}</version>
</dependency>
-->
+
+
+ <!-- UTIL -->
+ <dependency>
+ <groupId>commons-beanutils</groupId>
+ <artifactId>commons-beanutils</artifactId>
+ <version>1.8.0</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-lang</groupId>
+ <artifactId>commons-lang</artifactId>
+ <version>2.4</version>
+ </dependency>
<!-- LOGGING DEPENDENCIES - LOG4J -->
Added:
incubator/droids/trunk/droids-wicket/src/main/java/org/apache/droids/wicket/component/CollectionDataProvider.java
URL:
http://svn.apache.org/viewvc/incubator/droids/trunk/droids-wicket/src/main/java/org/apache/droids/wicket/component/CollectionDataProvider.java?rev=742265&view=auto
==============================================================================
---
incubator/droids/trunk/droids-wicket/src/main/java/org/apache/droids/wicket/component/CollectionDataProvider.java
(added)
+++
incubator/droids/trunk/droids-wicket/src/main/java/org/apache/droids/wicket/component/CollectionDataProvider.java
Mon Feb 9 05:09:43 2009
@@ -0,0 +1,101 @@
+package org.apache.droids.wicket.component;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.commons.beanutils.BeanComparator;
+import org.apache.wicket.extensions.markup.html.repeater.data.sort.ISortState;
+import
org.apache.wicket.extensions.markup.html.repeater.data.table.ISortableDataProvider;
+import org.apache.wicket.model.AbstractReadOnlyModel;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+
+public class CollectionDataProvider<T> implements ISortableDataProvider<T> {
+
+ private Collection<T> _values = null;
+ private ISortState _sort = null;
+
+ //---------------------------------------------
+ //---------------------------------------------
+
+ public CollectionDataProvider( Collection<T> values ) {
+ _values = values;
+ }
+
+ /**
+ * @return a thread safe copy of the values as a List
+ */
+ protected List<T> getValues()
+ {
+ return new ArrayList<T>( _values );
+ }
+
+ @SuppressWarnings("unchecked")
+ public IModel<T> model(final T object) {
+ if( object instanceof Serializable ) {
+ return new Model( (Serializable)object );
+ }
+ return new AbstractReadOnlyModel<T>() {
+ @Override
+ public T getObject() {
+ return object;
+ }
+ };
+ }
+
+ protected String getDefaultSortProperty() {
+ return null;
+ }
+
+ //---------------------------------------------
+ //---------------------------------------------
+
+ public void detach() {
+ // nothing....
+ }
+
+ @Override
+ public Iterator<? extends T> iterator(int first, int count) {
+ String sortProperty = getDefaultSortProperty();
+ boolean sortAsc = true;
+
+ // is there any sorting
+ if (_sort != null) {
+ // ????
+ }
+
+ List<T> values = this.getValues();
+
+ // perhaps apply a sort...
+ if( sortProperty != null ) {
+ Comparator<T> comparator = new BeanComparator( sortProperty );
+ if( !sortAsc ) {
+ comparator = Collections.reverseOrder( comparator );
+ }
+ Collections.sort( values, comparator );
+ }
+
+ List<T> sub = values.subList(first, first+count );
+ return sub.iterator();
+ }
+
+ @Override
+ public int size() {
+ return getValues().size();
+ }
+
+ @Override
+ public ISortState getSortState() {
+ return _sort;
+ }
+
+ @Override
+ public void setSortState(ISortState state) {
+ _sort = state;
+ }
+}
Modified:
incubator/droids/trunk/droids-wicket/src/main/java/org/apache/droids/wicket/component/DroidPanel.html
URL:
http://svn.apache.org/viewvc/incubator/droids/trunk/droids-wicket/src/main/java/org/apache/droids/wicket/component/DroidPanel.html?rev=742265&r1=742264&r2=742265&view=diff
==============================================================================
---
incubator/droids/trunk/droids-wicket/src/main/java/org/apache/droids/wicket/component/DroidPanel.html
(original)
+++
incubator/droids/trunk/droids-wicket/src/main/java/org/apache/droids/wicket/component/DroidPanel.html
Mon Feb 9 05:09:43 2009
@@ -20,7 +20,6 @@
<div wicket:id="taskMaster">
<h3>Workers:</h3>
- <!--
<ul wicket:id="workers">
<li wicket:id="task">
[<span wicket:id="time">00,00,10.xx</span>]
@@ -28,7 +27,6 @@
<a href="#">[watch]</a>
</li>
</ul>
- -->
<p wicket:id="threads">
Concurrent threads: <span wicket:id="count">count</span>
</p>
Modified:
incubator/droids/trunk/droids-wicket/src/main/java/org/apache/droids/wicket/component/DroidPanel.java
URL:
http://svn.apache.org/viewvc/incubator/droids/trunk/droids-wicket/src/main/java/org/apache/droids/wicket/component/DroidPanel.java?rev=742265&r1=742264&r2=742265&view=diff
==============================================================================
---
incubator/droids/trunk/droids-wicket/src/main/java/org/apache/droids/wicket/component/DroidPanel.java
(original)
+++
incubator/droids/trunk/droids-wicket/src/main/java/org/apache/droids/wicket/component/DroidPanel.java
Mon Feb 9 05:09:43 2009
@@ -26,9 +26,10 @@
import org.apache.droids.api.Droid;
import org.apache.droids.api.Task;
-import org.apache.droids.api.TaskMaster;
import org.apache.droids.api.TaskQueue;
import org.apache.droids.impl.MultiThreadedTaskMaster;
+import org.apache.droids.monitor.SimpleWorkMonitor;
+import org.apache.droids.monitor.WorkBean;
import org.apache.wicket.ajax.AbstractAjaxTimerBehavior;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.extensions.ajax.markup.html.AjaxEditableChoiceLabel;
@@ -37,6 +38,7 @@
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.markup.repeater.Item;
import org.apache.wicket.markup.repeater.RefreshingView;
+import org.apache.wicket.markup.repeater.data.DataView;
import org.apache.wicket.model.AbstractReadOnlyModel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.PropertyModel;
@@ -56,7 +58,11 @@
@SpringBean( name="taskMaster" )
MultiThreadedTaskMaster taskMaster;
+
+ @SpringBean( name="runningMonitor" )
+ SimpleWorkMonitor monitor;
+
public DroidPanel(String id) {
super(id);
@@ -128,6 +134,25 @@
// TASK MASTER
WebMarkupContainer tmDIV = new WebMarkupContainer( "taskMaster" );
+ final WebMarkupContainer workers = new WebMarkupContainer( "workers" );
+ workers.setOutputMarkupId( true );
+ workers.add(new DataView<WorkBean>("task", new WorkBeanDataProvider(
+ new AbstractReadOnlyModel<SimpleWorkMonitor>() {
+ public SimpleWorkMonitor getObject() {
+ return monitor;
+ }
+ } ) )
+ {
+ @Override
+ protected void populateItem(final Item<WorkBean> item)
+ {
+ WorkBean bean = item.getModelObject();
+ long elapsed = System.currentTimeMillis() -
bean.getStartTime().getTime();
+ item.add( new Label("time", elapsed+"" ));
//DurationFormatUtil.formatDurationHMS(elapsed) ) );
+ item.add( new Label("text", bean.getTask().toString() ) );
+ }
+ });
+ tmDIV.add( workers );
WebMarkupContainer threads = new WebMarkupContainer( "threads" );
threads.add( new AjaxEditableChoiceLabel<Integer>("count",
new PropertyModel<Integer>( taskMaster, "maxThreads" )
@@ -188,6 +213,7 @@
{
target.addComponent( info );
target.addComponent( queueDIV );
+ target.addComponent( workers );
}
});
}
Added:
incubator/droids/trunk/droids-wicket/src/main/java/org/apache/droids/wicket/component/WorkBeanDataProvider.java
URL:
http://svn.apache.org/viewvc/incubator/droids/trunk/droids-wicket/src/main/java/org/apache/droids/wicket/component/WorkBeanDataProvider.java?rev=742265&view=auto
==============================================================================
---
incubator/droids/trunk/droids-wicket/src/main/java/org/apache/droids/wicket/component/WorkBeanDataProvider.java
(added)
+++
incubator/droids/trunk/droids-wicket/src/main/java/org/apache/droids/wicket/component/WorkBeanDataProvider.java
Mon Feb 9 05:09:43 2009
@@ -0,0 +1,64 @@
+package org.apache.droids.wicket.component;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.droids.api.Task;
+import org.apache.droids.monitor.SimpleWorkMonitor;
+import org.apache.droids.monitor.WorkBean;
+import org.apache.wicket.extensions.markup.html.repeater.data.sort.ISortState;
+import org.apache.wicket.model.AbstractReadOnlyModel;
+import org.apache.wicket.model.IModel;
+
+public class WorkBeanDataProvider<T extends Task> extends
CollectionDataProvider<WorkBean<T>> {
+
+ private IModel<SimpleWorkMonitor> monitor;
+ private ISortState _sort = null;
+
+ Map<Task, WorkBean<T>> map = null;
+ List<WorkBean<T>> list = null;
+
+ //---------------------------------------------
+ //---------------------------------------------
+
+ public WorkBeanDataProvider( IModel<SimpleWorkMonitor> monitor ) {
+ super( null );
+ this.monitor = monitor;
+ }
+
+
+ @SuppressWarnings("unchecked")
+ public IModel<WorkBean<T>> model( WorkBean<T> object) {
+ final Task t = object.getTask();
+ return new AbstractReadOnlyModel<WorkBean<T>>() {
+ @Override
+ public WorkBean<T> getObject() {
+ return map.get( t );
+ }
+ };
+ }
+
+ @Override
+ protected List<WorkBean<T>> getValues()
+ {
+ // Keep a cache of it so we are not missing the ones that get terminated
+ // between the beginning of the request and the end of the request
+ list = new ArrayList<WorkBean<T>>( monitor.getObject().getRunningTasks() );
+ map = new HashMap<Task, WorkBean<T>>();
+ for( WorkBean<T> bean : list ) {
+ map.put( bean.getTask(), bean );
+ }
+ return list;
+ }
+
+ //---------------------------------------------
+ //---------------------------------------------
+
+ @Override
+ public void detach() {
+ list = null;
+ map = null;
+ }
+}
Modified:
incubator/droids/trunk/droids-wicket/src/main/resources/applicationContext.xml
URL:
http://svn.apache.org/viewvc/incubator/droids/trunk/droids-wicket/src/main/resources/applicationContext.xml?rev=742265&r1=742264&r2=742265&view=diff
==============================================================================
---
incubator/droids/trunk/droids-wicket/src/main/resources/applicationContext.xml
(original)
+++
incubator/droids/trunk/droids-wicket/src/main/resources/applicationContext.xml
Mon Feb 9 05:09:43 2009
@@ -11,6 +11,9 @@
<!-- setup wicket application -->
<bean id="wicketApplication"
class="org.apache.droids.wicket.app.DroidsApplication" />
+
+
+ <bean id="runningMonitor"
class="org.apache.droids.monitor.SimpleWorkMonitor" />
<!-- DROIDS -->
<bean name="taskMaster"
@@ -18,7 +21,8 @@
<!--
<property name="delayTimer"
ref="org.apache.droids.delay.SimpleDelayTimer"/>
-->
- <property name="maxThreads" value="4"/>
+ <property name="maxThreads" value="1"/>
+ <property name="monitor" ref="runningMonitor"/>
</bean>
<bean name="taskQueue"