blob: 8de54e34b79c67473baacbb866434c180e86646d [file] [log] [blame]
/**
* 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.webcomponents.health;
//JDK imports
import java.util.List;
//OODT imports
import org.apache.oodt.cas.filemgr.metadata.CoreMetKeys;
import org.apache.oodt.cas.filemgr.structs.Product;
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;
import org.apache.oodt.pcs.health.PCSHealthMonitorReport;
import org.apache.oodt.pcs.tools.PCSHealthMonitor;
import org.apache.oodt.pcs.util.FileManagerUtils;
//Wicket imports
import org.apache.wicket.PageParameters;
import org.apache.wicket.ResourceReference;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.image.Image;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.util.ListModel;
/**
*
* A wicket controller for exposing the super awesome power of the
* {@link PCSHealthMonitor}.
*
* @author mattmann
* @version $Revision$
*
*/
public class HealthMonitor extends Panel {
/**
* @param parameters
* @throws InstantiationException
*/
public HealthMonitor(String id, String fmUrlStr, String wmUrlStr,
String rmUrlStr, String crawlerConfFilePath, String statesFilePath,
final Class<? extends WebPage> productBrowser,
final Class<? extends WebPage> instancesPage)
throws InstantiationException {
super(id);
PCSHealthMonitor mon = new PCSHealthMonitor(fmUrlStr, wmUrlStr, rmUrlStr,
crawlerConfFilePath, statesFilePath);
final PCSHealthMonitorReport report = mon.getReport();
add(new Label("report_date", report.getCreateDateIsoFormat()));
add(new Label("fmurl", report.getFmStatus().getUrlStr()));
add(new Label("wmurl", report.getWmStatus().getUrlStr()));
add(new Label("rmurl", report.getRmStatus().getUrlStr()));
add(new Image("fmstatus_icon", getUpOrDownArrowRef(report.getFmStatus()
.getStatus())));
add(new Image("wmstatus_icon", getUpOrDownArrowRef(report.getWmStatus()
.getStatus())));
add(new Image("rmstatus_icon", getUpOrDownArrowRef(report.getRmStatus()
.getStatus())));
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)
*
* @see
* org.apache.wicket.markup.html.list.ListView#populateItem(org.apache
* .wicket.markup.html.list.ListItem)
*/
@Override
protected void populateItem(ListItem<CrawlerStatus> statusItem) {
CrawlerStatus status = statusItem.getModelObject();
String statusString = status.getInfo().getCrawlerName() + " ("
+ status.getCrawlHost() + ":" + status.getInfo().getCrawlerPort()
+ ")";
statusItem.add(new Label("crawler_name_and_url", statusString));
statusItem.add(new Image("crawler_status_icon",
getUpOrDownArrowRef(status.getStatus())));
}
});
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) {
item.add(new Label("batch_stub_url", item.getModelObject().getUrlStr()));
item.add(new Image("batch_stub_status_icon", getUpOrDownArrowRef(item
.getModelObject().getStatus())));
}
});
List<JobHealthStatus> jobHealthStatusList = report.getJobHealthStatus();
add(new ListView<JobHealthStatus>("jobstatus_list", jobHealthStatusList) {
/*
* (non-Javadoc)
*
* @see
* org.apache.wicket.markup.html.list.ListView#populateItem(org.apache
* .wicket.markup.html.list.ListItem)
*/
@Override
protected void populateItem(final ListItem<JobHealthStatus> item) {
item.add(new Label("status_name", item.getModelObject().getStatus()));
Link<String> countLink = new Link<String>("jobstatus_count_link",
new Model<String>(item.getModelObject().getStatus())) {
@Override
public void onClick() {
PageParameters params = new PageParameters();
params.add("pageNum", "1");
params.add("status", getModelObject());
setResponsePage(instancesPage, params);
}
};
countLink.add(new Label("status_num_jobs", String.valueOf(item
.getModelObject().getNumPipelines())));
item.add(countLink);
}
});
List<Product> prodList = report.getLatestProductsIngested();
final FileManagerUtils fm = new FileManagerUtils(fmUrlStr);
add(new ListView<Product>("file_health_list", prodList) {
/*
* (non-Javadoc)
*
* @see
* org.apache.wicket.markup.html.list.ListView#populateItem(org.apache
* .wicket.markup.html.list.ListItem)
*/
@Override
protected void populateItem(ListItem<Product> item) {
final Product product = item.getModelObject();
product.setProductType(fm.safeGetProductTypeById(product
.getProductType().getProductTypeId()));
product.setProductReferences(fm.safeGetProductReferences(product));
final Metadata prodMet = fm.safeGetMetadata(product);
final String filePath = fm.getFilePath(product);
Link link = new Link("view_product_link") {
/*
* (non-Javadoc)
*
* @see org.apache.wicket.markup.html.link.Link#onClick()
*/
@Override
public void onClick() {
PageParameters params = new PageParameters();
params.add("id", product.getProductId());
setResponsePage(productBrowser, params);
}
};
link.add(new Label("file_path", filePath));
item.add(link);
item.add(new Label("file_ingest_datetime", prodMet.getMetadata("CAS."
+ CoreMetKeys.PRODUCT_RECEVIED_TIME)));
}
});
ListModel crawlerHealthListModel = new ListModel(
report.getCrawlerHealthStatus());
add(new VisibilityToggler("crawler_health_toggler",
"crawler_health_showall", "crawler_health_hide", "crawler_health_more",
crawlerHealthListModel));
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())));
}
});
}
private ResourceReference getUpOrDownArrowRef(String status) {
return new ResourceReference(HealthMonitor.class, "icon_arrow_"
+ status.toLowerCase() + ".gif");
}
}