Re: (OT?) Strange web problem
On Wed, 30 Apr 2008 02:49:00 +0000, I wrote:
[Snip]
Looking at the contents of the Pebble war file I found that the files
that are not loading properly appear to be static file in the war. So,
thinking this must be a problem with Geronimo, I wrote a java
application to hit a set of files on the server a number of times and
report how many times it failed. I made sure to hit the page that I was
having problems with and all the static javascript files and the
cascading style sheets used by the page.
[Snip]
I thought about this a bit and decide readers might want to take a look
themselves, so here we are:
The URL:
http://kt.squeakydolphin.com/pebble
The code I used to test it (something I hacked up today, so be kind):
---------------------------------------------------------
import java.io.BufferedInputStream;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class WebTester {
Set<URL> urls;
Map<URL, Integer> trials;
Map<URL, Integer> success;
Map<URL, Integer> realContentLength;
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws MalformedURLException {
int times = 0;
try {
times = Integer.parseInt(args[0]);
if (times < 0) {
throw new IllegalArgumentException("more than zero tests");
}
}
catch (NumberFormatException e) {
System.out.println("WebTester.jar <number of tests> <url> ...");
}
WebTester tester = new WebTester();
for (int index = 1; index < args.length; index++) {
tester.addURL(args[index]);
}
tester.runTests(times);
tester.printResults();
}
public WebTester() {
urls = new HashSet<URL>();
trials = Collections.synchronizedMap(new HashMap<URL, Integer>());
success = Collections.synchronizedMap(new HashMap<URL, Integer>());
realContentLength = Collections.synchronizedMap(new HashMap<URL, Integer>());
}
public void addURL(String url) throws MalformedURLException {
URL urlObj = new URL(url);
urls.add(urlObj);
trials.put(urlObj, 0);
success.put(urlObj, 0);
}
public void runTests(int numTests) {
List<Thread> threads = new ArrayList<Thread>();
for (;numTests > 0; numTests--) {
for (final URL url : urls) {
Runnable runable = new Runnable() {
public void run() {
trials.put(url, trials.get(url) + 1);
if (runTest(url)) {
success.put(url, success.get(url) + 1);
}
}
};
Thread thread = new Thread(runable);
threads.add(thread);
thread.start();
}
for (Thread thread : threads) {
boolean retry;
do {
try {
retry = false;
thread.join();
}
catch (InterruptedException e) {
retry = true;
}
} while (retry);
}
}
}
private boolean runTest(URL url) {
try {
BufferedInputStream in = new BufferedInputStream(url.openStream());
int size = 0;
while (in.read() != -1) {
size++;
}
if (realContentLength.get(url) == null) {
realContentLength.put(url, size);
} else if (size != realContentLength.get(url)) {
System.out.println(url.toString() + " changed size.");
}
}
catch (IOException e) {
return false;
}
return true;
}
private void printResults() {
for (URL url : urls) {
System.out.print(url.toString());
System.out.print(": " + success.get(url) + "/" + trials.get(url));
if (realContentLength.get(url) != null) {
System.out.print(" " + realContentLength.get(url) + " ");
}
if (trials.get(url) > 0) {
System.out.print(" "
+ success.get(url) / trials.get(url) * 100 + "%");
}
System.out.print("\n");
}
}
}
---------------------------------------------------------------------
--
Kenneth P. Turvey <kt-usenet@squeakydolphin.com>