Index: trunk/Nebulous/bin/neb-stat
===================================================================
--- trunk/Nebulous/bin/neb-stat	(revision 31850)
+++ trunk/Nebulous/bin/neb-stat	(revision 31871)
@@ -16,5 +16,8 @@
 use Pod::Usage qw( pod2usage );
 
-my ($server);
+use Digest::MD5;
+use URI;
+
+my ($validate,$server);
 
 $server = $ENV{'NEB_SERVER'} unless $server;
@@ -22,4 +25,5 @@
 GetOptions(
     'server|s=s'     => \$server,
+    'validate'         => \$validate,
 ) || pod2usage( 2 );
 
@@ -44,16 +48,73 @@
 die "no instances found" unless $instances;   
 
+my $user_copies = $neb->getxattr($key, "user.copies");
+unless(defined($user_copies)) {
+    $user_copies = 1;
+}
+
+my @validation;
+my %md5sum_uniq;
+my $existing_copies = 0;
+if (defined $validate) {
+    my @existance;
+    my @md5sums;
+    my @files = map {URI->new($_)->file if $_} @$instances;
+
+    for (my $i = 0; $i <= $#files; $i++) {
+	if (-e $files[$i]) {
+	    $existance[$i] = 1;
+	    $existing_copies++;
+	    my $fh;
+	    open($fh,$files[$i]);
+	    $md5sums[$i] = Digest::MD5->new->addfile($fh)->hexdigest;
+	    $md5sum_uniq{$md5sums[$i]} = 1;
+	    close($fh);
+	}
+	else {
+	    $existance[$i] = 0;
+	    $md5sums[$i] = 'NON-EXISTANT';
+	    $md5sum_uniq{$md5sums[$i]} = 1;
+	}
+	$validation[$i] = sprintf("% 3d %32s %s",
+				  $existance[$i],
+				  $md5sums[$i],
+				  ${ $instances }[$i]);
+    }
+}
+
 no warnings qw(uninitialized);
-print
-    "object id:             ", @$stat[0], "\n",
-    "key:                   ", @$stat[1], "\n",
-    "read lock:             ", @$stat[2], "\n",
-    "write lock:            ", @$stat[3], "\n",
-    "epoch:                 ", @$stat[4], "\n",
-    "mtime:                 ", @$stat[5], "\n",
-    "available instances:   ", @$stat[6], "\n",
-    "total instances:       ", @$stat[7], "\n",
-    "instance location:\n", " " x 4,
-    join("\n" . " " x 4, @$instances), "\n";
+if (defined $validate) {
+    print
+	"object id:             ", @$stat[0], "\n",
+	"key:                   ", @$stat[1], "\n",
+	"read lock:             ", @$stat[2], "\n",
+	"write lock:            ", @$stat[3], "\n",
+	"epoch:                 ", @$stat[4], "\n",
+	"mtime:                 ", @$stat[5], "\n",
+	"md5sum count:          ", scalar(keys %md5sum_uniq), "\n",
+	"requested instances:   ", $user_copies, "\n",
+	"available instances:   ", @$stat[6], "\n",
+	"existing instances:    ", $existing_copies, "\n",
+	"total instances:       ", @$stat[7], "\n",
+	
+	"instance location:\n", " " x 4,
+	join("\n" . " " x 4, @validation), "\n";
+}
+else {
+    print
+	"object id:             ", @$stat[0], "\n",
+	"key:                   ", @$stat[1], "\n",
+	"read lock:             ", @$stat[2], "\n",
+	"write lock:            ", @$stat[3], "\n",
+	"epoch:                 ", @$stat[4], "\n",
+	"mtime:                 ", @$stat[5], "\n",
+	"available instances:   ", @$stat[6], "\n",
+	"requested instances:   ", $user_copies, "\n",
+	"total instances:       ", @$stat[7], "\n",
+	
+	"instance location:\n", " " x 4,
+	join("\n" . " " x 4, @$instances), "\n";
+}
+
 
 __END__
