blob: 1628fa5727d126844f407742d296feb632f6959b [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.cas.crawl.daemon;
//OODT imports
import org.apache.oodt.cas.crawl.structs.exceptions.CrawlException;
//JDK imports
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Vector;
//APACHE imports
import org.apache.xmlrpc.XmlRpcClient;
import org.apache.xmlrpc.XmlRpcException;
/**
* @author mattmann
* @version $Revision$
*
* <p>
* A Controller class for the Crawl Daemons
* </p>.
*/
public class CrawlDaemonController {
/* our xml rpc client */
private XmlRpcClient client = null;
public CrawlDaemonController(String crawlUrlStr)
throws InstantiationException {
try {
client = new XmlRpcClient(new URL(crawlUrlStr));
} catch (MalformedURLException e) {
throw new InstantiationException(e.getMessage());
}
}
public double getAverageCrawlTime() throws CrawlException {
Vector argList = new Vector();
double avgCrawlTime = -1.0d;
try {
avgCrawlTime = ((Double) client.execute(
"crawldaemon.getAverageCrawlTime", argList)).doubleValue();
} catch (XmlRpcException e) {
throw new CrawlException(e.getMessage());
} catch (IOException e) {
throw new CrawlException(e.getMessage());
}
return avgCrawlTime;
}
public int getMilisCrawling() throws CrawlException {
Vector argList = new Vector();
int milisCrawling = -1;
try {
milisCrawling = ((Integer) client.execute(
"crawldaemon.getMilisCrawling", argList)).intValue();
} catch (XmlRpcException e) {
throw new CrawlException(e.getMessage());
} catch (IOException e) {
throw new CrawlException(e.getMessage());
}
return milisCrawling;
}
public int getWaitInterval() throws CrawlException {
Vector argList = new Vector();
int waitInterval = -1;
try {
waitInterval = ((Integer) client.execute(
"crawldaemon.getWaitInterval", argList)).intValue();
} catch (XmlRpcException e) {
throw new CrawlException(e.getMessage());
} catch (IOException e) {
throw new CrawlException(e.getMessage());
}
return waitInterval;
}
public int getNumCrawls() throws CrawlException {
Vector argList = new Vector();
int numCrawls = -1;
try {
numCrawls = ((Integer) client.execute("crawldaemon.getNumCrawls",
argList)).intValue();
} catch (XmlRpcException e) {
throw new CrawlException(e.getMessage());
} catch (IOException e) {
throw new CrawlException(e.getMessage());
}
return numCrawls;
}
public boolean isRunning() throws CrawlException {
Vector argList = new Vector();
boolean running = false;
try {
running = ((Boolean) client.execute("crawldaemon.isRunning",
argList)).booleanValue();
} catch (XmlRpcException e) {
throw new CrawlException(e.getMessage());
} catch (IOException e) {
throw new CrawlException(e.getMessage());
}
return running;
}
public void stop() throws CrawlException {
Vector argList = new Vector();
boolean running = false;
try {
running = ((Boolean) client.execute("crawldaemon.stop", argList))
.booleanValue();
} catch (XmlRpcException e) {
throw new CrawlException(e.getMessage());
} catch (IOException e) {
throw new CrawlException(e.getMessage());
}
if (running) {
throw new CrawlException("Stop attempt failed: crawl daemon: ["
+ this.client.getURL() + "] still running");
}
}
public static void main(String[] args) throws Exception {
String avgCrawlOperation = "--getAverageCrawlTime\n";
String getMilisCrawlOperation = "--getMilisCrawling\n";
String getNumCrawlsOperation = "--getNumCrawls\n";
String getWaitIntervalOperation = "--getWaitInterval\n";
String isRunningOperation = "--isRunning\n";
String stopOperation = "--stop\n";
String usage = "CrawlController --url <url to xml rpc service> --operation [<operation> [params]]\n"
+ "operations:\n"
+ avgCrawlOperation
+ getMilisCrawlOperation
+ getNumCrawlsOperation
+ getWaitIntervalOperation
+ isRunningOperation + stopOperation;
String operation = null, url = null;
for (int i = 0; i < args.length; i++) {
if (args[i].equals("--operation")) {
operation = args[++i];
} else if (args[i].equals("--url")) {
url = args[++i];
}
}
if (operation == null) {
System.err.println(usage);
System.exit(1);
}
// create the controller
CrawlDaemonController controller = new CrawlDaemonController(url);
if (operation.equals("--getAverageCrawlTime")) {
double avgCrawlTime = controller.getAverageCrawlTime();
System.out.println("Average Crawl Time: [" + avgCrawlTime + "]");
} else if (operation.equals("--getMilisCrawling")) {
int crawlTime = controller.getMilisCrawling();
System.out.println("Total Crawl Time: [" + crawlTime
+ "] miliseconds");
} else if (operation.equals("--getNumCrawls")) {
int numCrawls = controller.getNumCrawls();
System.out.println("Num Crawls: [" + numCrawls + "]");
} else if (operation.equals("--getWaitInterval")) {
int waitInterval = controller.getWaitInterval();
System.out.println("Wait Interval: [" + waitInterval + "]");
} else if (operation.equals("--isRunning")) {
boolean running = controller.isRunning();
System.out.println(running ? "Yes" : "No");
} else if (operation.equals("--stop")) {
controller.stop();
System.out.println("Crawl Daemon: [" + controller.client.getURL()
+ "]: shutdown successful");
} else
throw new IllegalArgumentException("Unknown Operation!");
}
}