I run this on my Linux server, its Perl, so it is pretty generic.
#!/usr/bin/perl
# This script extracts some NAS properties from the status page
require "/home/d/diplomcy/data/common.pl.cfg";
@LANip = ("192.168.1.40","192.168.1.41"); # IP address of the NAS server(s)
push(@LANip,"192.168.1.42");
$aPort = "81"; # Port value for the admin page
$bPort = "80"; # Backup (default) port to try if the primary is unreachable
# flags: 0=off 1=on
$logger = 1; # Log status to syslog
$debug = 0; # Detailed output
if ("$ARGV[0]" eq "debug") { $debug = 1; print "Debug mode enabled\n"; }
$version = "$0";
$version =~ s/(.*\/)//ig;
use LWP::UserAgent;
foreach $LANip(@LANip) {
$capacity = "";
$ncap = 0;
$freespace = "";
$nfree = 0;
$percent = "";
$temperature = "";
$sync = "";
$uptime = "";
$uPort = $aPort;
&get_nas_info;
if (($freespace>0) && ($capacity>0)) { $percent = int(($freespace/$capacity)*100); }
$logtext=$version.": NAS ".$LANip.":".$uPort;
if (length($capacity)>0) { $logtext.=" Size:".$capacity."GB"; } else { $logtext.=" Size:unknown"; }
if ($freespace>0) { $logtext.=" Free:".$freespace."GB"; }
if (($freespace>0) && ($percent>0)) { $logtext.=" [$percent%]"; }
if (length($temperature)>0) { $logtext.=" Temp:".$temperature; }
if (length($sync)>0) { $logtext.=" Sync:".$sync; $uptime = ""; }
if (length($uptime)>0) { $logtext.=" Up:".$uptime; }
if ("$ARGV[0]" eq "status") { `/usr/bin/logger "$logtext"`; }
print $date_exp." ".$logtext."\n";
}
exit;
sub get_nas_info {
$ua = LWP::UserAgent->new(timeout=>15);
$url = "http://".$LANip.":".$uPort."/web/status/device_status.asp";
$req = HTTP::Request->new(GET => $url);
$result = $ua->request($req);
unless ($result->is_success) {
# print "Could not connect to port ".$aPort.", trying ".$bPort."\n";
$uPort = $bPort;
$url = "http://".$LANip.":".$uPort."/web/status/device_status.asp";
$req = HTTP::Request->new(GET => $url);
$result = $ua->request($req);
unless ($result->is_success) {
$text = "Can't get to $url -- ".$result->status_line;
if ($logger eq 1) { `/usr/bin/logger "$version: $text"`; }
die "$text";
}
}
$text = $result->as_string;
@responses = split /(\r|\n)/, $text;
foreach $response(@responses) {
chomp($response);
$response =~ s/\s\s/ /ig;
if (($debug eq 1) && (length($response)>1)) { print "-> ".$response."\n"; }
#-> var temper="109:43";
if ($response =~ m/temper="/) {
# $response =~ s/.*temper="//ig; # Strip leading text
# $response =~ s/";/°C\)/ig; # Insert Celsius indicator
# $response =~ s/:/°F\(/ig; # Insert Farenheit indicator
$response =~ s/.*://ig; # Strip leading text
$response =~ s/";/°C/ig; # Insert Celsius indicator
$temperature = $response;
}
#-> <tr><td class="labelCell2">Total Hard Drive Capacity:</td><td><strong> 983453 MB</strong></td></tr>
if ($response =~ m/Total Hard Drive Capacity:/) {
if (($debug gt 0) && (length($response)>1)) { print "Capacity-> ".$response."\n"; }
$response =~ s/.*\ //ig; # Strip leading text
$response =~ s/ MB.*//ig; # Strip trailing text
$response = int($response/1024);
$response = int(($response*1000)/1024);
$response = int(($response*1000)/1024);
$ncap = $ncap + $response;
if (($debug gt 0) && (length($response)>1)) { print "Capacity-> ".$response."\n"; }
# $response =~ s/(\d{1,3}?)(?=(\d{3})+$)/$1,/g;
$capacity = sprintf("%04d",$ncap);
}
#-> <tr><td class="labelCell2">Unused Space:</td><td><strong> 707784 MB</strong></td></tr></table><hr>
if ($response =~ m/Unused Space:/) {
$response =~ s/.*\ //ig;
$response =~ s/ MB.*//ig;
$response = int($response/1024);
$response = int(($response*1000)/1024);
$response = int(($response*1000)/1024);
$nfree = $nfree + $response;
# $response =~ s/(\d{1,3}?)(?=(\d{3})+$)/$1,/g;
$freespace = sprintf("%04d",$nfree);
}
#->Sync Time Remaining: Completed
if ($response =~ m/Sync Time Remaining:/) {
$response =~ s/.*\ //ig;
$response =~ s/\<.*//ig;
$response =~ s/ / /ig;
if (not $response =~ m/Completed/) {
$sync = $response;
}
}
#->System Up Time: 0 day 0 hour 1 minutes
if ($response =~ m/ minute/) {
$response =~ s/.*\ //ig;
$response =~ s/\<.*//ig;
$response =~ s/ / /ig;
$response =~ s/^0 day /0 days /ig;
$response =~ s/ 0 hour / 0 hours /ig;
$response =~ s/ 0 minute/ 0 minutes/ig;
$response =~ s/^1 days/1 day/ig;
$response =~ s/ 1 hours/ 1 hour/ig;
$response =~ s/ 1 minutes/ 1 minute/ig;
$uptime = $response;
}
}
}
# eof
I run it every hour and it produces output like this Sat, 18 Jun 2011 11:00:03 EDT check_nas.pl: NAS 192.168.1.40:81 Size:0915GB Free:0504GB [55%] Temp:36°C Up:87 days 21 hours 21 minutes
Sat, 18 Jun 2011 11:00:03 EDT check_nas.pl: NAS 192.168.1.41:81 Size:2748GB Free:2608GB [94%] Temp:34°C Up:87 days 21 hours 21 minutes
Sat, 18 Jun 2011 11:00:03 EDT check_nas.pl: NAS 192.168.1.42:81 Size:3662GB Free:1781GB [48%] Temp:33°C Up:5 days 1 hour 48 minutes
Sat, 18 Jun 2011 12:00:03 EDT check_nas.pl: NAS 192.168.1.40:81 Size:0915GB Free:0504GB [55%] Temp:36°C Up:87 days 22 hours 21 minutes
Sat, 18 Jun 2011 12:00:03 EDT check_nas.pl: NAS 192.168.1.41:81 Size:2748GB Free:2608GB [94%] Temp:34°C Up:87 days 22 hours 21 minutes
Sat, 18 Jun 2011 12:00:03 EDT check_nas.pl: NAS 192.168.1.42:81 Size:3662GB Free:1781GB [48%] Temp:34°C Up:5 days 2 hours 48 minutes