Author: mattmann
Date: Mon Nov 7 21:56:11 2011
New Revision: 1198964
URL: http://svn.apache.org/viewvc?rev=1198964&view=rev
Log:
- progress towards OODT-157: PCS Operator User Interface web application
- fully done with Status page (show/hide, and sort/unsort all work)
- tested
- onto frame, and Configuration/Resource monitoring, almost done!
Added:
oodt/trunk/pcs/opsui/src/main/java/org/apache/oodt/pcs/opsui/status/VisibilityAndSortToggler.java
oodt/trunk/pcs/opsui/src/main/java/org/apache/oodt/pcs/opsui/status/VisibilityToggler.java
Modified:
oodt/trunk/pcs/opsui/src/main/java/org/apache/oodt/pcs/opsui/OpsuiApp.java
oodt/trunk/pcs/opsui/src/main/java/org/apache/oodt/pcs/opsui/status/StatusPage.html
oodt/trunk/pcs/opsui/src/main/java/org/apache/oodt/pcs/opsui/status/StatusPage.java
Modified:
oodt/trunk/pcs/opsui/src/main/java/org/apache/oodt/pcs/opsui/OpsuiApp.java
URL:
http://svn.apache.org/viewvc/oodt/trunk/pcs/opsui/src/main/java/org/apache/oodt/pcs/opsui/OpsuiApp.java?rev=1198964&r1=1198963&r2=1198964&view=diff
==============================================================================
--- oodt/trunk/pcs/opsui/src/main/java/org/apache/oodt/pcs/opsui/OpsuiApp.java
(original)
+++ oodt/trunk/pcs/opsui/src/main/java/org/apache/oodt/pcs/opsui/OpsuiApp.java
Mon Nov 7 21:56:11 2011
@@ -18,7 +18,7 @@
package org.apache.oodt.pcs.opsui;
//OODT imports
-import java.util.Arrays;
+import java.io.Serializable;
import java.util.List;
import java.util.Vector;
@@ -44,7 +44,9 @@ import org.apache.wicket.request.target.
* @version $Revision$
*
*/
-public class OpsuiApp extends WebApplication {
+public class OpsuiApp extends WebApplication implements Serializable{
+
+ private static final long serialVersionUID = 1403288657369282259L;
public OpsuiApp() {
MixedParamUrlCodingStrategy types = new MixedParamUrlCodingStrategy(
Modified:
oodt/trunk/pcs/opsui/src/main/java/org/apache/oodt/pcs/opsui/status/StatusPage.html
URL:
http://svn.apache.org/viewvc/oodt/trunk/pcs/opsui/src/main/java/org/apache/oodt/pcs/opsui/status/StatusPage.html?rev=1198964&r1=1198963&r2=1198964&view=diff
==============================================================================
---
oodt/trunk/pcs/opsui/src/main/java/org/apache/oodt/pcs/opsui/status/StatusPage.html
(original)
+++
oodt/trunk/pcs/opsui/src/main/java/org/apache/oodt/pcs/opsui/status/StatusPage.html
Mon Nov 7 21:56:11 2011
@@ -53,16 +53,20 @@
<tr wicket:id="crawler_status_list">
<td wicket:id="crawler_name_and_url"
class="crawler_name_and_url">Local File Crawler (http://localhost:9091)</td>
<td><img wicket:id="crawler_status_icon"
src="icon_arrow_up.gif" /></td>
- </tr>
+ </tr>
+ <wicket:container
wicket:id="crawler_toggler">
+ <wicket:enclosure
child="crawler_status_more">
<tr>
- <td colspan="2">... ...</td>
+ <td wicket:id="crawler_status_more" colspan="2">...
...</td>
</tr>
- <tr>
- <td><a
href="javascript:toggleOn('crawlerShowAll');">See All</a></td>
- <td><a
href="javascript:toggleOff('crawlerShowAll');">Hide</a></td>
- <td><a
href="javascript:toggleOn('crawlerSort');">Sorting By Status</a></td>
- <td><a
href="javascript:toggleOff('crawlerSort');">Unsort</a></td>
+ </wicket:enclosure>
+ <tr id="crawler_status_options">
+ <td><a
wicket:id="crawler_status_showall" href="#">See All</a></td>
+ <td><a
wicket:id="crawler_status_hide" "href="#">Hide</a></td>
+ <td><a
wicket:id="crawler_status_sort" href="#">Sorting By Status</a></td>
+ <td><a
wicket:id="crawler_status_unsort" href="#">Unsort</a></td>
</tr>
+ </wicket:container>
</table>
</div>
</td>
@@ -78,13 +82,19 @@
<td class="nowrap"><span
wicket:id="batch_stub_url"
class="batch_stub_url">http://compute-0-1:2001</span></td>
<td><img
wicket:id="batch_stub_status_icon" src="icon_arrow_down.gif" /></td>
</tr>
- <tr>
- <td colspan="2">...
...</td></tr><tr>
- <td><a
href="javascript:toggleOn('batchStubShowAll');">See All</a></td>
- <td><a
href="javascript:toggleOff('batchStubShowAll');">Hide</a></td>
- <td><a
href="javascript:toggleOn('batchStubSort');">Sorting By Status</a></td>
- <td><a
href="javascript:toggleOff('batchStubSort');">Unsort</a></td>
+ <wicket:container
wicket:id="batch_stub_toggler">
+ <wicket:enclosure child="batch_stub_more">
+ <tr>
+ <td wicket:id="batch_stub_more"
colspan="2">... ...</td></tr><tr>
+ </tr>
+ </wicket:enclosure>
+ <tr id="batch_stub_options">
+ <td><a
wicket:id="batch_stub_showall" href="#">See All</a></td>
+ <td><a
wicket:id="batch_stub_hide" href="#">Hide</a></td>
+ <td><a
wicket:id="batch_stub_sort" href="#">Sorting By Status</a></td>
+ <td><a wicket:id="batch_stub_unsort"
href="#">Unsort</a></td>
</tr>
+ </wicket:container>
</table>
</div>
</td>
@@ -142,15 +152,21 @@
<td>
<div class="roundtable">
<table>
- <tr>
- <td class="nowrap"><span
class="crawler_name">Local File Crawler</span> Number of Crawls: <span
class="num_crawls">32</span> Avg Time: <span class="avg_crawl_time">5 sec</span>
+ <tr wicket:id="crawler_health_list">
+ <td class="nowrap"
colspan="2"><span wicket:id="crawler_name" class="crawler_name">Local File
Crawler</span> Number of Crawls: <span wicket:id="num_crawls"
class="num_crawls">32</span> Avg Time: <span wicket:id="avg_crawl_time"
class="avg_crawl_time">5</span> sec
</td>
</tr>
+ <wicket:container
wicket:id="crawler_health_toggler">
+ <wicket:enclosure
child="crawler_health_more">
+ <tr>
+ <td colspan="2"
wicket:id="crawler_health_more">... ...</td>
+ </tr>
+ </wicket:enclosure>
<tr>
- <td colspan="2">...
...</td></tr><tr>
- <td colspan="2"><a
href="javascript:toggleOn('crawlerHealthShowAll');">See All</a></td>
- <td colspan="2"><a
href="javascript:toggleOff('crawlerHealthShowAll');">Hide</a></td>
+ <td><a
wicket:id="crawler_health_showall" href="#">See All</a></td>
+ <td><a
wicket:id="crawler_health_hide" href="#">Hide</a></td>
</tr>
+ </wicket:container>
</table>
</div>
</td>
Modified:
oodt/trunk/pcs/opsui/src/main/java/org/apache/oodt/pcs/opsui/status/StatusPage.java
URL:
http://svn.apache.org/viewvc/oodt/trunk/pcs/opsui/src/main/java/org/apache/oodt/pcs/opsui/status/StatusPage.java?rev=1198964&r1=1198963&r2=1198964&view=diff
==============================================================================
---
oodt/trunk/pcs/opsui/src/main/java/org/apache/oodt/pcs/opsui/status/StatusPage.java
(original)
+++
oodt/trunk/pcs/opsui/src/main/java/org/apache/oodt/pcs/opsui/status/StatusPage.java
Mon Nov 7 21:56:11 2011
@@ -18,16 +18,14 @@
package org.apache.oodt.pcs.opsui.status;
//JDK imports
-import java.util.Collections;
-import java.util.Comparator;
import java.util.List;
-import java.util.Vector;
//OODT imports
import org.apache.oodt.cas.filemgr.metadata.CoreMetKeys;
import org.apache.oodt.cas.filemgr.structs.Product;
import org.apache.oodt.pcs.opsui.ProductBrowserPage;
import org.apache.oodt.cas.metadata.Metadata;
+import org.apache.oodt.pcs.health.CrawlerHealth;
import org.apache.oodt.pcs.health.CrawlerStatus;
import org.apache.oodt.pcs.health.JobHealthStatus;
import org.apache.oodt.pcs.health.PCSDaemonStatus;
@@ -47,10 +45,12 @@ import org.apache.wicket.markup.html.lin
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.model.Model;
+import org.apache.wicket.model.util.ListModel;
/**
*
- * Describe your class here.
+ * A wicket controller for exposing the super awesome power of
+ * the {@link PCSHealthMonitor}.
*
* @author mattmann
* @version $Revision$
@@ -73,7 +73,7 @@ public class StatusPage extends BasePage
String statesFilePath = app.getStatesFilePath();
PCSHealthMonitor mon = new PCSHealthMonitor(fmUrlStr, wmUrlStr, rmUrlStr,
crawlerConfFilePath, statesFilePath);
- PCSHealthMonitorReport report = mon.getReport();
+ final PCSHealthMonitorReport report = mon.getReport();
add(new Label("report_date", report.getCreateDateIsoFormat()));
add(new Label("fmurl", report.getFmStatus().getUrlStr()));
@@ -87,8 +87,13 @@ public class StatusPage extends BasePage
add(new Image("rmstatus_icon", getUpOrDownArrowRef(report.getRmStatus()
.getStatus())));
- List<CrawlerStatus> crawlerStatusList = report.getCrawlerStatus();
- add(new ListView<CrawlerStatus>("crawler_status_list", crawlerStatusList) {
+ ListModel crawlerStatusListModel = new
ListModel(report.getCrawlerStatus());
+ add(new VisibilityAndSortToggler("crawler_toggler",
+ "crawler_status_showall", "crawler_status_hide", "crawler_status_sort",
+ "crawler_status_unsort", "crawler_status_more",
crawlerStatusListModel));
+
+ add(new ListView<CrawlerStatus>("crawler_status_list",
+ crawlerStatusListModel) {
/*
* (non-Javadoc)
*
@@ -108,8 +113,14 @@ public class StatusPage extends BasePage
}
});
- List<PCSDaemonStatus> batchStubStatusList = report.getBatchStubStatus();
- add(new ListView<PCSDaemonStatus>("batch_stub_list", batchStubStatusList) {
+ ListModel batchStubStatusListModel = new ListModel(
+ report.getBatchStubStatus());
+ add(new VisibilityAndSortToggler("batch_stub_toggler",
+ "batch_stub_showall", "batch_stub_hide", "batch_stub_sort",
+ "batch_stub_unsort", "batch_stub_more", batchStubStatusListModel));
+
+ add(new ListView<PCSDaemonStatus>("batch_stub_list",
+ batchStubStatusListModel) {
@Override
protected void populateItem(ListItem<PCSDaemonStatus> item) {
@@ -191,45 +202,36 @@ public class StatusPage extends BasePage
}
});
- }
-
- private ResourceReference getUpOrDownArrowRef(String status) {
- return new ResourceReference(StatusPage.class, "icon_arrow_"
- + status.toLowerCase() + ".gif");
- }
+ ListModel crawlerHealthListModel = new ListModel(
+ report.getCrawlerHealthStatus());
+ add(new VisibilityToggler("crawler_health_toggler",
+ "crawler_health_showall", "crawler_health_hide", "crawler_health_more",
+ crawlerHealthListModel));
- private static List getTopN(List statuses, int topN) {
- List subset = new Vector();
- if (statuses != null && statuses.size() > 0) {
- int numGobble = topN <= statuses.size() ? topN : statuses.size();
- for (int i = 0; i < numGobble; i++) {
- Object status = statuses.get(i);
- subset.add(status);
+ add(new ListView<CrawlerHealth>("crawler_health_list",
+ crawlerHealthListModel) {
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.apache.wicket.markup.html.list.ListView#populateItem(org.apache
+ * .wicket.markup.html.list.ListItem)
+ */
+ @Override
+ protected void populateItem(ListItem<CrawlerHealth> item) {
+ CrawlerHealth health = item.getModelObject();
+ item.add(new Label("crawler_name", health.getCrawlerName()));
+ item.add(new Label("num_crawls",
String.valueOf(health.getNumCrawls())));
+ item.add(new Label("avg_crawl_time", String.valueOf(health
+ .getAvgCrawlTime())));
}
- }
+ });
- return subset;
}
- private static void sortByStatus(List statusList) {
- Collections.sort(statusList, new Comparator() {
-
- public int compare(Object o1, Object o2) {
- if (o1 instanceof CrawlerStatus) {
- CrawlerStatus stat1 = (CrawlerStatus) o1;
- CrawlerStatus stat2 = (CrawlerStatus) o2;
-
- return stat1.getStatus().compareTo(stat2.getStatus());
- } else if (o1 instanceof PCSDaemonStatus) {
- PCSDaemonStatus stat1 = (PCSDaemonStatus) o1;
- PCSDaemonStatus stat2 = (PCSDaemonStatus) o2;
-
- return stat1.getStatus().compareTo(stat2.getStatus());
- } else
- return 0;
- }
-
- });
+ private ResourceReference getUpOrDownArrowRef(String status) {
+ return new ResourceReference(StatusPage.class, "icon_arrow_"
+ + status.toLowerCase() + ".gif");
}
}
Added:
oodt/trunk/pcs/opsui/src/main/java/org/apache/oodt/pcs/opsui/status/VisibilityAndSortToggler.java
URL:
http://svn.apache.org/viewvc/oodt/trunk/pcs/opsui/src/main/java/org/apache/oodt/pcs/opsui/status/VisibilityAndSortToggler.java?rev=1198964&view=auto
==============================================================================
---
oodt/trunk/pcs/opsui/src/main/java/org/apache/oodt/pcs/opsui/status/VisibilityAndSortToggler.java
(added)
+++
oodt/trunk/pcs/opsui/src/main/java/org/apache/oodt/pcs/opsui/status/VisibilityAndSortToggler.java
Mon Nov 7 21:56:11 2011
@@ -0,0 +1,143 @@
+/**
+ * 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.oodt.pcs.opsui.status;
+
+//JDK imports
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Vector;
+
+//OODT imports
+import org.apache.oodt.pcs.health.CrawlerStatus;
+import org.apache.oodt.pcs.health.PCSDaemonStatus;
+
+//Wicket imports
+import org.apache.wicket.markup.html.link.Link;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.model.util.ListModel;
+
+/**
+ *
+ * Toggles both a show/hide link and a sort/unsort link for displaying
+ * PCSDaemonStatus and CrawlerStatus in the PCS OPSUI gui.
+ *
+ * @author mattmann
+ * @version $Revision$
+ *
+ */
+class VisibilityAndSortToggler extends VisibilityToggler {
+
+ private static final long serialVersionUID = 9003502303473741937L;
+
+ /**
+ * @param id
+ */
+ public VisibilityAndSortToggler(String id, String showLinkId,
+ String hideLinkId, String sortLinkId, String unsortLinkId, String moreId,
+ final ListModel model) {
+ super(id, showLinkId, hideLinkId, moreId, model);
+
+ Link<Link> sortLink = null;
+ Link<Link> unsortLink = null;
+
+ sortLink = new Link<Link>(sortLinkId, new Model<Link>(unsortLink)) {
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.apache.wicket.markup.html.link.Link#onClick()
+ */
+ @Override
+ public void onClick() {
+ Vector obj = (Vector) model.getObject();
+ sortByStatus(obj);
+ model.setObject(obj);
+ getModelObject().setVisible(true);
+ setVisible(false);
+ }
+ };
+
+ unsortLink = new Link<Link>(unsortLinkId, new Model<Link>(sortLink)) {
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.apache.wicket.markup.html.link.Link#onClick()
+ */
+ @Override
+ public void onClick() {
+ Vector obj = (Vector) model.getObject();
+ sortByName(obj);
+ model.setObject(obj);
+ getModelObject().setVisible(true);
+ setVisible(false);
+ }
+ };
+
+ unsortLink.setVisible(false);
+ sortLink.setModelObject(unsortLink);
+ unsortLink.setModelObject(sortLink);
+
+ add(sortLink);
+ add(unsortLink);
+
+ }
+
+ private static void sortByStatus(List statusList) {
+ Collections.sort(statusList, new Comparator() {
+
+ public int compare(Object o1, Object o2) {
+ if (o1 instanceof CrawlerStatus) {
+ CrawlerStatus stat1 = (CrawlerStatus) o1;
+ CrawlerStatus stat2 = (CrawlerStatus) o2;
+
+ return stat1.getStatus().compareTo(stat2.getStatus());
+ } else if (o1 instanceof PCSDaemonStatus) {
+ PCSDaemonStatus stat1 = (PCSDaemonStatus) o1;
+ PCSDaemonStatus stat2 = (PCSDaemonStatus) o2;
+
+ return stat1.getStatus().compareTo(stat2.getStatus());
+ } else
+ return 0;
+ }
+
+ });
+ }
+
+ private static void sortByName(List statusList) {
+ Collections.sort(statusList, new Comparator() {
+
+ public int compare(Object o1, Object o2) {
+ if (o1 instanceof CrawlerStatus) {
+ CrawlerStatus stat1 = (CrawlerStatus) o1;
+ CrawlerStatus stat2 = (CrawlerStatus) o2;
+
+ return stat1.getInfo().getCrawlerName()
+ .compareTo(stat2.getInfo().getCrawlerName());
+ } else if (o1 instanceof PCSDaemonStatus) {
+ PCSDaemonStatus stat1 = (PCSDaemonStatus) o1;
+ PCSDaemonStatus stat2 = (PCSDaemonStatus) o2;
+
+ return stat1.getDaemonName().compareTo(stat2.getDaemonName());
+ } else
+ return 0;
+ }
+
+ });
+ }
+
+}
Added:
oodt/trunk/pcs/opsui/src/main/java/org/apache/oodt/pcs/opsui/status/VisibilityToggler.java
URL:
http://svn.apache.org/viewvc/oodt/trunk/pcs/opsui/src/main/java/org/apache/oodt/pcs/opsui/status/VisibilityToggler.java?rev=1198964&view=auto
==============================================================================
---
oodt/trunk/pcs/opsui/src/main/java/org/apache/oodt/pcs/opsui/status/VisibilityToggler.java
(added)
+++
oodt/trunk/pcs/opsui/src/main/java/org/apache/oodt/pcs/opsui/status/VisibilityToggler.java
Mon Nov 7 21:56:11 2011
@@ -0,0 +1,122 @@
+/**
+ * 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.oodt.pcs.opsui.status;
+
+//JDK imports
+import java.util.List;
+import java.util.Vector;
+
+//Wicket imports
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.link.Link;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.model.util.ListModel;
+
+/**
+ *
+ * Toggles a show/hide link for displaying PCSDaemonStatus and CrawlerStatus in
+ * the PCS OPSUI gui.
+ *
+ * @author mattmann
+ * @version $Revision$
+ *
+ */
+public class VisibilityToggler extends WebMarkupContainer {
+
+ private static final long serialVersionUID = -6325486547078308461L;
+
+ /**
+ * @param id
+ */
+ public VisibilityToggler(String id, String showLinkId, String hideLinkId,
+ String moreId, final ListModel model) {
+ super(id, model);
+
+ Link<Link> showLink = null;
+ Link<Link> hideLink = null;
+ final Vector allStatusList = (Vector) ((Vector) model.getObject()).clone();
+
+ // subset the model
+ model.setObject(subsetModelObject(model.getObject()));
+ final WebMarkupContainer moreComponent = new WebMarkupContainer(moreId);
+ add(moreComponent);
+
+ showLink = new Link<Link>(showLinkId, new Model<Link>(hideLink)) {
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.apache.wicket.markup.html.link.Link#onClick()
+ */
+ @Override
+ public void onClick() {
+ Vector obj = (Vector) model.getObject();
+ obj.clear();
+ obj.addAll(allStatusList);
+ model.setObject(obj);
+ moreComponent.setVisible(false);
+ getModelObject().setVisible(true);
+ setVisible(false);
+ }
+ };
+
+ hideLink = new Link<Link>(hideLinkId, new Model<Link>(showLink)) {
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.apache.wicket.markup.html.link.Link#onClick()
+ */
+ @Override
+ public void onClick() {
+ Vector obj = (Vector) model.getObject();
+ obj.clear();
+ obj.addAll(getTopN(allStatusList, 3));
+ model.setObject(obj);
+ getModelObject().setVisible(true);
+ setVisible(false);
+ moreComponent.setVisible(true);
+ }
+ };
+
+ hideLink.setVisible(false);
+ showLink.setModelObject(hideLink);
+ hideLink.setModelObject(showLink);
+
+ add(showLink);
+ add(hideLink);
+ }
+
+ private static List subsetModelObject(Object obj) {
+ List objList = (List) obj;
+ List subsetList = getTopN(objList, 3);
+ return subsetList;
+ }
+
+ private static List getTopN(List statuses, int topN) {
+ List subset = new Vector();
+ if (statuses != null && statuses.size() > 0) {
+ int numGobble = topN <= statuses.size() ? topN : statuses.size();
+ for (int i = 0; i < numGobble; i++) {
+ Object status = statuses.get(i);
+ subset.add(status);
+ }
+ }
+
+ return subset;
+ }
+
+}