[csw-devel] SF.net SVN: opencsw:[662] mirror

dmichelsen at users.sourceforge.net dmichelsen at users.sourceforge.net
Mon May 13 12:05:13 CEST 2013


Revision: 662
          http://sourceforge.net/p/opencsw/code/662
Author:   dmichelsen
Date:     2013-05-13 10:05:11 +0000 (Mon, 13 May 2013)
Log Message:
-----------
Add check_prtdiag for V440

Added Paths:
-----------
    mirror/check_prtdiag
    mirror/check_prtdiag.conf

Added: mirror/check_prtdiag
===================================================================
--- mirror/check_prtdiag	                        (rev 0)
+++ mirror/check_prtdiag	2013-05-13 10:05:11 UTC (rev 662)
@@ -0,0 +1,390 @@
+#!/usr/bin/perl -w
+#
+# File    : check_prtdiag
+# Purpose : prtdiag output parser
+# Author  : Sébastien Phélep (seb at le-seb.org)
+# Date    : 2009/01/14
+#
+
+# Required packages ========================================================= #
+use strict;
+use File::Basename;
+use Getopt::Std;
+
+# Constants ================================================================= #
+my $PROGNAME = basename($0);
+my $CONFFILE = "${PROGNAME}.conf";
+my $VERSION  = "1.12";
+
+# Globals =================================================================== #
+my %conf = ();
+my @diag = ();
+my $syst = undef;
+my $file = undef;
+my @failed = ();
+my @passed = ();
+my %options = ();
+my $verbose = undef;
+my $cfgfile = undef;
+
+# Functions ================================================================= #
+
+# Default handler for --help
+sub HELP_MESSAGE
+{
+	usage(0);
+}
+
+# Default handler for --version
+sub VERSION_MESSAGE
+{
+	usage(0);
+}
+
+# Script usage
+sub usage
+{
+	# Get exit status
+	my $status = shift;
+	my $errmsg = shift;
+
+	# We've been called with an error message.
+	# Print it to STDERR with short usage
+	if( $errmsg )
+	{
+		print STDERR "${PROGNAME}: $errmsg\n\n";
+		print STDERR "Usage: ${PROGNAME} [-hv] [-c <file>] [-f <file>]\n";
+		print STDERR "Try '-h' for help.\n";
+	}
+	else
+	{
+		# Print full usage to STDOUT
+		print STDOUT << "EOF";
+
+${PROGNAME} - ${VERSION}
+Search for SUN hardware errors in prtdiag output.
+
+Usage: ${PROGNAME} [-hv] [-c <file>] [-f <file>]
+
+  -f <file>		: use prtdiag output found in file
+  -c <file>		: specify alternate location for config file
+			 (default location: '$CONFFILE')
+  -h			: this (help) message
+  -v			: verbose output
+EOF
+	}
+
+	# Exit with specified status
+	exit($status);
+}
+
+# Main starts here =========================================================== #
+
+# Use getopts for processing command line options
+usage(3) unless( getopts("f:c:hv",\%options) );
+
+# Need command usage ?
+usage(0) if($options{'h'});
+
+# Initialize values
+$cfgfile = $options{'c'} ? $options{'c'} : $CONFFILE;
+$file = $options{'f'} ? $options{'f'} : undef;
+$verbose = $options{'v'} ? 1 : 0;
+
+# Go English !
+$ENV{'LANG'} = "C";
+
+# Load config file
+unless( open(CONFIG,"<${cfgfile}") )
+{
+	print STDERR "Initialization error - unable to open file '${cfgfile}' : $!\n";
+	exit(3);
+}
+my $section = undef;
+while(<CONFIG>)
+{
+	chomp();
+	
+	# Remove comments
+	s/#.*//;
+	
+	# Ignore blank lines
+	next if( m/^\s*$/ );
+	
+	if( m/^\s*\[\s*(.*?)\s*\]\s*$/ )
+	{
+		$section = $1;
+		next;
+	}
+	elsif( m/^\s*(.*?)\s*=\s*(.*?)\s*$/ )
+	{
+		$conf{$section}->{$1} = $2 if( defined($section) );
+	}
+}
+close(CONFIG);
+
+# Check minimum config
+unless( $file )
+{
+	unless( defined($conf{'commands'}->{'prtdiag'}) )
+	{
+		print STDERR "Initialization error - 'prtdiag' command not defined in file '${CONFFILE}' !\n";
+		exit(3);
+	}
+
+	# Substitute macros
+	foreach my $section ( %conf )
+	{
+		foreach my $param ( keys( %{ $conf{$section} } ) )
+		{
+			# Command substitution
+			if( $conf{$section}->{$param} =~ m/CMD\((.*?)\)/ )
+			{
+				my $command = $1;
+				unless( defined($conf{'commands'}->{$command}) )
+				{
+					print STDERR "Initialization error - '$command' command not defined in file '${CONFFILE}' !\n";
+					exit(3);
+				}
+			
+				my @result = `$conf{'commands'}->{$command} 2>&1`;
+				unless( ($?>>8) == 0 )
+				{
+					print STDERR "Initialization error - Failed Substitution for '$command' : @result !\n";
+					exit(3);
+				}
+			
+				chomp($result[0]);
+				$conf{$section}->{$param} =~ s/CMD\($command\)/$result[0]/;
+			}
+		}
+	}
+}
+
+# Get prtdiag input
+unless( $file )
+{
+	unless( open(DIAG,"$conf{'commands'}->{'prtdiag'}|") )
+	{
+		print STDOUT "Failed to create pipe for command '".$conf{'commands'}->{'prtdiag'}."' : $!\n";
+		exit(3);
+	}
+}
+else
+{
+	unless( open(DIAG,"<$file") )
+	{
+		print STDOUT "Failed to open file '$file' for reading : $!\n";
+		exit(3);
+	}
+}
+while(<DIAG>)
+{
+	chomp();
+	s/^\s*(.*?)\s*$/$1/;
+	push(@diag,$_);
+}
+close(DIAG);
+
+# Look for system type
+unless( defined($syst) )
+{
+	FSYS:
+	foreach my $section ( keys(%conf) )
+	{
+		foreach my $param ( keys(%{ $conf{$section} }) )
+		{
+			next unless( $param eq "system.match" );
+			if( grep(/$conf{$section}->{'system.match'}/, at diag) )
+			{
+				$syst = $section;
+				last FSYS;
+			}
+		}
+	}
+}
+
+# Check for unidentified system type
+unless( defined($syst) )
+{
+	print STDOUT "Unable to identify system type !\n";
+	exit(3);
+}
+print STDERR "Using system type : $syst\n" if( $verbose);
+
+# Further config checks
+unless( defined($conf{$syst}->{'system.checks'}) )
+{
+	print STDOUT "Initialization failed - Missing 'system.checks' entry for section '$syst' in file '$CONFFILE' !\n";
+	exit(3);
+}
+my @checks = split(/\s*,\s*/,$conf{$syst}->{'system.checks'});
+if( scalar(@checks) == 0 )
+{
+	print STDOUT "No check defined in 'system.checks' entry for section '$syst' in file '$CONFFILE' !\n";
+	exit(3);
+}
+foreach my $check ( @checks )
+{
+	foreach my $param ( "description", "begin_match", "end_match", "data_match", "data_labels", "ok_condition", "output_string" )
+	{
+		my $param_name = "checks.$check.$param";
+		unless( defined($conf{$syst}->{$param_name}) )
+		{
+			print STDOUT "Initialization error - Missing '$param_name' entry for section '$syst' in file '$CONFFILE' !\n";
+			exit(3);
+		}
+	}
+}
+
+# Check'em all
+foreach my $check ( @checks )
+{
+	# Get associated data
+	my $description = $conf{$syst}->{"checks.$check.description"};
+	my @labels = split(/\s*,\s*/,$conf{$syst}->{"checks.$check.data_labels"});
+	my $fetch_mode = $conf{$syst}->{"checks.$check.fetch_mode"};
+	my $begin = 0;
+	my $dcount = 0;
+	my $lcount = 0;
+	my %data = ();
+	
+	print STDERR "\nChecking $description:\n" if( $verbose);
+
+	# Parse prtdiag output
+	DIAG: foreach( @diag )
+	{
+		unless( $begin )
+		{
+			# Looking for begin pattern
+			next DIAG unless( m/$conf{$syst}->{"checks.$check.begin_match"}/ );
+			s/$conf{$syst}->{"checks.$check.begin_match"}//;
+			$begin = 1;
+		}
+		else
+		{
+			# Stop parsing if matched end pattern
+			last DIAG if( m/$conf{$syst}->{"checks.$check.end_match"}/ );
+		}
+		
+		# Skip unwanted data
+		if( defined($conf{$syst}->{"checks.$check.skip_match"}) )
+		{
+			next DIAG if( m/$conf{$syst}->{"checks.$check.skip_match"}/ );
+		}
+		
+		# Reinit read values
+		my @values = ();
+		
+		# === Fetching data in linear mode === #
+		if( defined($fetch_mode) and ($fetch_mode eq "linear") )
+		{
+			# Use specified regexp separator, or define a default one
+			my $regexp_separator = $conf{$syst}->{"checks.$check.data_match_regsep"} || '\s*,\s';
+
+			# Extract regular expresssions to be used for data collection
+			my @dmatch = split(/\s*,\s*/,$conf{$syst}->{"checks.$check.data_match"});
+			
+			# Take care of counters
+			if( $lcount >= scalar(@labels) )
+			{
+				$lcount = 0;
+				$dcount = $dcount + scalar(@labels) + 1;
+			}
+			
+			# Get all matching values
+			@values = m/$dmatch[$lcount]/g;
+			
+			# Update our hash
+			for( my $i=0; $i < scalar(@values); $i++ )
+			{
+				$data{($dcount+$i)}->{$labels[$lcount]} = $values[$i];
+			}
+			$lcount++;
+			
+			# Next one
+			next DIAG;
+		}
+		# === Fetching data otherwise (aka tabular mode) === #
+		else
+		{
+			# Next one if this does not match
+			next DIAG unless( @values = m/$conf{$syst}->{"checks.$check.data_match"}/g );
+			
+			# Update our hash
+			for( my $i=0; $i < scalar(@values); $i++ )
+			{
+				# Take care of counters
+				if( $lcount >= scalar(@labels) )
+				{
+					$lcount = 0;
+					$dcount++;
+				}
+				
+				$data{$dcount}->{$labels[$lcount]} = $values[$i];
+				$lcount++;
+			}
+		}
+	}
+	
+	# Check collected data
+	my $errors = 0;
+	my $tests = 0;
+	foreach my $dataset ( keys(%data) )
+	{
+		my $test_result = "";
+		my $ok_condition = $conf{$syst}->{"checks.$check.ok_condition"};
+		my $output_string = $conf{$syst}->{"checks.$check.output_string"};
+
+		# Substitute labels in condition and output string
+		foreach my $label ( keys( %{ $data{$dataset} } ) )
+		{
+			$ok_condition =~ s/%$label%/$data{$dataset}->{$label}/g;
+			$output_string =~ s/%$label%/$data{$dataset}->{$label}/g;
+		}
+		
+		# Test condition
+		if( eval($ok_condition) )
+		{
+			# Test passed
+			$test_result = "INF - $output_string";
+			push(@passed,$output_string);
+		}
+		else
+		{
+			# Test failed
+			$test_result = "ERR - $output_string";
+			push(@failed,$output_string);
+			$errors++;
+			
+		}
+		$tests++;
+		print STDERR " $test_result\n" if( $verbose);
+	}
+	print STDERR "Checked $tests component".( $tests le 1 ? "" : "s").", found ".( $errors == 0 ? "no error" : "$errors errors" ).".\n" if( $verbose );
+}
+
+# Analyze global results
+my $checked = scalar(@passed) + scalar(@failed);
+if( scalar(@failed) > 0 )
+{
+	print STDERR "\n" if( $verbose );
+	print STDOUT "CRITICAL - Checked $checked component".( $checked le 1 ? "" : "s").", found ".scalar(@failed)." errors : ".join(', ', at failed)."|";
+	print STDOUT join(', ', at passed);
+	print STDOUT "\n";
+	exit(2);
+}
+elsif( $checked == 0 )
+{
+	print STDERR "\n" if( $verbose );
+	print STDOUT "WARNING - Found nothing to check !\n";
+	exit(1);
+}
+else
+{
+	print STDERR "\n" if( $verbose );
+	print STDOUT "OK - Successfully checked $checked component".( $checked le 1 ? "" : "s")."|";
+	print STDOUT join(', ', at passed);
+	print STDOUT "\n";
+	exit(0);
+}


Property changes on: mirror/check_prtdiag
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Added: mirror/check_prtdiag.conf
===================================================================
--- mirror/check_prtdiag.conf	                        (rev 0)
+++ mirror/check_prtdiag.conf	2013-05-13 10:05:11 UTC (rev 662)
@@ -0,0 +1,522 @@
+# check_prtdiag.conf
+
+[commands]
+platform = /sbin/uname -i
+prtdiag = /usr/platform/CMD(platform)/sbin/prtdiag -v
+
+[SunFire 280R]
+system.match = ^System Configuration:.*Sun Fire 280R
+system.checks = Leds,Fans,Disks,PSU
+
+checks.Leds.description = system leds status
+checks.Leds.begin_match = ^System LED Status:\s+
+checks.Leds.end_match = ^$
+checks.Leds.fetch_mode = linear
+checks.Leds.data_match = ((?:\S+\s)*\S+),\[\s*(.*?)\s*\]
+checks.Leds.data_labels = Location,Status
+checks.Leds.ok_condition = not( ( "%Location%" =~ m/FAULT/i ) and ("%Status%" eq "ON") )
+checks.Leds.output_string = System LED '%Location%' status is '%Status%'
+
+checks.Fans.description = fans status
+checks.Fans.begin_match = ^Fan Bank :
+checks.Fans.end_match = ^=
+checks.Fans.data_match = ^(\S+)\s+\[\s*(\S+)\s*\]
+checks.Fans.data_labels = Bank,Status
+checks.Fans.ok_condition = "%Status%" eq "NO_FAULT"
+checks.Fans.output_string = Fan '%Bank%' status is '%Status%'
+
+checks.Disks.description = disks status
+checks.Disks.begin_match = ^Disk Status:
+checks.Disks.end_match = ^=
+checks.Disks.data_match = ^(.*?\d+)(?:.*?)\[\s*(\S+)\s*\]\s*$
+checks.Disks.data_labels = Disk,Status
+checks.Disks.ok_condition = "%Status%" eq "NO_FAULT"
+checks.Disks.output_string = Disk '%Disk%' status is '%Status%'
+
+checks.PSU.description = power supplies status
+checks.PSU.begin_match = ^Power Supplies:
+checks.PSU.end_match = ^=
+checks.PSU.data_match = ^(.*?\d+)\s+\[\s*(\S+)\s*\]
+checks.PSU.data_labels = Supply,Status
+checks.PSU.ok_condition = "%Status%" eq "OK"
+checks.PSU.output_string = Power supply '%Supply%' status is '%Status%'
+
+
+[Enterprise 150]
+system.match = ^System Configuration:.*Sun Ultra 1 SBus
+system.checks = Boards
+
+checks.Boards.description = IO cards status
+checks.Boards.begin_match = ^=+\sIO Cards
+checks.Boards.end_match = ^=
+checks.Boards.data_match = ^(No failures found in System|(?:No|Detected) System Faults)
+checks.Boards.data_labels = Diagnosis
+checks.Boards.ok_condition = "%Diagnosis%" =~ m/^(No) /
+checks.Boards.output_string = System diagnosis for IO cards is '%Diagnosis%'
+
+
+[Enterprise 250]
+system.match = ^System Configuration:.*Sun \(TM\) Enterprise 250
+system.checks = Memory,Leds,Disks,Fans,PSU,Boards
+
+checks.Memory.description = memory banks status
+checks.Memory.begin_match = ^=+ Memory
+checks.Memory.end_match = ^=
+checks.Memory.data_match = ^\s*(\d+)\s+\S+\s+(.*?)\s+.*?(\S+)$
+checks.Memory.data_labels = Bank,Socket,Status
+checks.Memory.ok_condition = "%Status%" eq "OK"
+checks.Memory.output_string = Memory unit '%Socket%' on bank '%Bank%' status is '%Status%'
+
+checks.Leds.description = system leds status
+checks.Leds.begin_match = ^System LED Status:\s+
+checks.Leds.end_match = ^$
+checks.Leds.fetch_mode = linear
+checks.Leds.data_match = ((?:\S+\s)*\S+),\[\s*(.*?)\s*\]
+checks.Leds.data_labels = Location,Status
+checks.Leds.ok_condition = not( ( "%Location%" =~ m/ERROR/i ) and ("%Status%" eq "ON") )
+checks.Leds.output_string = System LED '%Location%' status is '%Status%'
+
+checks.Disks.description = disks status
+checks.Disks.begin_match = ^Disk LED Status:
+checks.Disks.end_match = ^=
+checks.Disks.data_match = (DISK\s+\d+):\s+\[\s*(.*?)\s*\]
+checks.Disks.data_labels = Disk,Status
+checks.Disks.ok_condition = "%Status%" =~ m/^(OK|EMPTY)$/
+checks.Disks.output_string = Disk '%Disk%' status is '%Status%'
+
+checks.Fans.description = fans status
+checks.Fans.begin_match = ^Fan Bank :
+checks.Fans.end_match = ^=
+checks.Fans.data_match = ^(\S+)\s+\d+\s+(\S+)
+checks.Fans.data_labels = Bank,Status
+checks.Fans.ok_condition = "%Status%" eq "OK"
+checks.Fans.output_string = Fan '%Bank%' status is '%Status%'
+
+checks.PSU.description = power supplies status
+checks.PSU.begin_match = ^Power Supplies:
+checks.PSU.end_match = ^=
+checks.PSU.data_match = ^\s*(\d+).*?(\S+)$
+checks.PSU.data_labels = Supply,Status
+checks.PSU.ok_condition = "%Status%" eq "OK"
+checks.PSU.output_string = Power supply '%Supply%' status is '%Status%'
+
+checks.Boards.description = IO cards status
+checks.Boards.begin_match = ^=+\sIO Cards
+checks.Boards.end_match = ^=
+checks.Boards.data_match = ^(No failures found in System|(?:No|Detected) System Faults)
+checks.Boards.data_labels = Diagnosis
+checks.Boards.ok_condition = "%Diagnosis%" =~ m/^No /
+checks.Boards.output_string = System diagnosis for IO cards is '%Diagnosis%'
+
+
+[Enterprise 450]
+system.match = ^System Configuration:.*Sun Enterprise 450
+system.checks = Memory,Leds,Disks,Fans,PSU,Boards
+
+checks.Memory.description = memory banks status
+checks.Memory.begin_match = ^=+ Memory
+checks.Memory.end_match = ^=
+checks.Memory.data_match = ^\s*(\d+)\s+\S+\s+(.*?)\s+.*?(\S+)$
+checks.Memory.data_labels = Bank,Socket,Status
+checks.Memory.ok_condition = "%Status%" eq "OK"
+checks.Memory.output_string = Memory unit '%Socket%'  on bank '%Bank%' status is '%Status%'
+
+checks.Leds.description = system leds status
+checks.Leds.begin_match = ^System LED Status:\s+
+checks.Leds.end_match = ^$
+checks.Leds.fetch_mode = linear
+checks.Leds.data_match = ((?:\S+\s)*\S+),\[\s*(.*?)\s*\]
+checks.Leds.data_labels = Location,Status
+checks.Leds.ok_condition = not( ( "%Location%" =~ m/ERROR/i ) and ("%Status%" eq "ON") )
+checks.Leds.output_string = System LED '%Location%' status is '%Status%'
+
+checks.Disks.description = disks status
+checks.Disks.begin_match = ^Disk LED Status:
+checks.Disks.end_match = ^=
+checks.Disks.data_match = (DISK\s+\d+):\s+\[\s*(.*?)\s*\]
+checks.Disks.data_labels = Disk,Status
+checks.Disks.ok_condition = "%Status%" =~ m/^(OK|EMPTY)$/
+checks.Disks.output_string = Disk '%Disk%' status is '%Status%'
+
+checks.Fans.description = fans status
+checks.Fans.begin_match = ^Fans:
+checks.Fans.end_match = ^$
+checks.Fans.data_match = ^(\S+)\s+\d+\s+(\S+)
+checks.Fans.data_labels = Bank,Status
+checks.Fans.ok_condition = "%Status%" eq "OK"
+checks.Fans.output_string = Fan '%Bank%' status is '%Status%'
+
+checks.PSU.description = power supplies status
+checks.PSU.begin_match = ^Power Supplies:
+checks.PSU.end_match = ^=
+checks.PSU.data_match = ^\s*(\d+).*?(\S+)$
+checks.PSU.data_labels = Supply,Status
+checks.PSU.ok_condition = "%Status%" eq "OK"
+checks.PSU.output_string = Power supply '%Supply%' status is '%Status%'
+
+checks.Boards.description = IO cards status
+checks.Boards.begin_match = ^=+\sIO Cards
+checks.Boards.end_match = ^=
+checks.Boards.data_match = ^(No failures found in System|(?:No|Detected) System Faults)
+checks.Boards.data_labels = Diagnosis
+checks.Boards.ok_condition = "%Diagnosis%" =~ m/^No /
+checks.Boards.output_string = System diagnosis for IO cards is '%Diagnosis%'
+
+
+[Enterprise 3000]
+system.match = Sun Enterprise 3000$
+system.checks = Leds,Fans,Temperatures,PSU,Boards
+
+checks.Leds.description = system leds status
+checks.Leds.begin_match = ^System LED Status:
+checks.Leds.end_match = :$
+checks.Leds.data_match = ^\S+\s+(\S+)\s+(\S+)\s+(\S+)
+checks.Leds.data_labels = Power,Failure,Running
+checks.Leds.ok_condition = "%Failure%" ne "ON"
+checks.Leds.output_string = System failure led status is '%Failure%'
+
+checks.Fans.description = fans status
+checks.Fans.begin_match = ^Fans:
+checks.Fans.end_match = ^$
+checks.Fans.skip_match = ^(-+|Unit)
+checks.Fans.data_match = ^(\S+)\s+(\S+)
+checks.Fans.data_labels = Unit,Status
+checks.Fans.ok_condition = "%Status%" eq "OK"
+checks.Fans.output_string = Fan '%Unit%' status is '%Status%'
+
+checks.Temperatures.description = temperature sensors
+checks.Temperatures.begin_match = ^System Temperatures
+checks.Temperatures.end_match = :$
+checks.Temperatures.skip_match = ^Location
+checks.Temperatures.data_match = ^(\S+\s+\d+):\s+(.*?)\s+(\S+)
+checks.Temperatures.data_labels = Location,Temperature,Trend
+checks.Temperatures.ok_condition = ( "%Trend%" eq "stable" )
+checks.Temperatures.output_string = Trend status '%Trend%' for temperature sensor '%Location%' (temp.: %Temperature% deg.)
+
+checks.PSU.description = power supplies status
+checks.PSU.begin_match = ^Power Supplies:
+checks.PSU.end_match = ^$
+checks.PSU.data_match = ^((?:\S+\s)*\S+)\s+(\S+)
+checks.PSU.skip_match = ^(Supply|-+)
+checks.PSU.data_labels = Supply,Status
+checks.PSU.ok_condition = "%Status%" eq "OK"
+checks.PSU.output_string = Power supply '%Supply%' status is '%Status%'
+
+checks.Boards.description = IO cards status
+checks.Boards.begin_match = ^=+(\sIO Cards|Cartes ES)
+checks.Boards.end_match = ^=+\s\S+
+checks.Boards.data_match = ^(No failures found in System|(?:No|Detected) System Faults)
+checks.Boards.data_labels = Diagnosis
+checks.Boards.ok_condition = "%Diagnosis%" =~ m/^No /
+checks.Boards.output_string = System diagnosis for IO cards is '%Diagnosis%'
+
+
+[Ultra 10]
+system.match = ^System Configuration:.*Sun Ultra 5\/10 UPA\/PCI
+system.checks = Boards
+
+checks.Boards.description = IO cards status
+checks.Boards.begin_match = ^=+\sIO Cards
+checks.Boards.end_match = ^=
+checks.Boards.data_match = ^(No failures found in System|(?:No|Detected) System Faults)
+checks.Boards.data_labels = Diagnosis
+checks.Boards.ok_condition = "%Diagnosis%" =~ m/^No /
+checks.Boards.output_string = System diagnosis for IO cards is '%Diagnosis%'
+
+
+[SunFire V120]
+system.match = ^System Configuration:.*Sun Fire V120
+system.checks = Boards
+
+checks.Boards.description = IO cards status
+checks.Boards.begin_match = ^=+\sIO Cards
+checks.Boards.end_match = ^=
+checks.Boards.data_match = ^(No failures found in System|(?:No|Detected) System Faults)
+checks.Boards.data_labels = Diagnosis
+checks.Boards.ok_condition = "%Diagnosis%" =~ m/^No /
+checks.Boards.output_string = System diagnosis for IO cards is '%Diagnosis%'
+
+
+[SunFire V240]
+system.match = ^System Configuration:.*Sun Fire V240
+system.checks = Fans,Leds,Temperatures,Voltages,Current,FRU
+
+checks.Fans.description = fans status
+checks.Fans.begin_match = ^Fan Speeds:
+checks.Fans.end_match = :$
+checks.Fans.data_match = ^(.*?\d+)\s+(\S+)\s+(\S+)
+checks.Fans.data_labels = Location,Sensor,Status
+checks.Fans.ok_condition = "%Status%" eq "okay"
+checks.Fans.output_string = Fan '%Location%/%Sensor%' status is '%Status%'
+
+checks.Leds.description = system leds status
+checks.Leds.begin_match = ^Led State:
+checks.Leds.end_match = :$
+checks.Leds.data_match = ^(\S+)\s+(?:SERVICE)\s+(\S+)
+checks.Leds.data_labels = Location,State
+checks.Leds.ok_condition = "%State%" eq "off"
+checks.Leds.output_string = Service indicator '%Location%' state is '%State%'
+
+checks.Temperatures.description = temperature sensors
+checks.Temperatures.begin_match = ^Temperature sensors:
+checks.Temperatures.end_match = :$
+checks.Temperatures.skip_match = ^Location
+checks.Temperatures.data_match = ^(\S+)\s+(\S+).*?(\S+)$
+checks.Temperatures.data_labels = Location,Sensor,Status
+checks.Temperatures.ok_condition = ( "%Status%" eq "okay" )
+checks.Temperatures.output_string = Temperature sensor '%Location%/%Sensor%' status is '%Status%'
+
+checks.Voltages.description = voltage sensors
+checks.Voltages.begin_match = ^Voltage sensors:
+checks.Voltages.end_match = :$
+checks.Voltages.skip_match = ^Location
+checks.Voltages.data_match = ^(\S+)\s+(\S+).*?(\S+)$
+checks.Voltages.data_labels = Location,Sensor,Status
+checks.Voltages.ok_condition = "%Status%" eq "okay"
+checks.Voltages.output_string = Voltage sensor '%Location%/%Sensor%' status is '%Status%'
+
+checks.Current.description = current sensors
+checks.Current.begin_match = ^Current sensors:
+checks.Current.end_match = ^$
+checks.Current.skip_match = ^Location
+checks.Current.data_match = ^(\S+)\s+(\S+).*?(\S+)$
+checks.Current.data_labels = Location,Sensor,Status
+checks.Current.ok_condition = "%Status%" eq "okay"
+checks.Current.output_string = Current sensor '%Location%/%Sensor%' status is '%Status%'
+
+checks.FRU.description = FRU operational status
+checks.FRU.begin_match = ^Fru Operational Status:
+checks.FRU.end_match = ^$
+checks.FRU.skip_match = ^Location
+checks.FRU.data_match = ^(\S+)\s+(\S+)
+checks.FRU.data_labels = Location,Status
+checks.FRU.ok_condition = "%Status%" =~ m/present|okay/
+checks.FRU.output_string = FRU '%Location%' status is '%Status%'
+
+
+[SunFire V440]
+system.match = ^System Configuration:.*Sun Fire V440
+system.checks = Fans,Leds,Temperatures,Voltages,Current,FRU
+
+checks.Fans.description = fans status
+checks.Fans.begin_match = ^Fan Speeds:
+checks.Fans.end_match = :$
+checks.Fans.data_match = ^(.*?\d+)\s+(\S+)\s+(\S+)
+checks.Fans.data_labels = Location,Sensor,Status
+checks.Fans.ok_condition = "%Status%" eq "okay"
+checks.Fans.output_string = Fan '%Location%/%Sensor%' status is '%Status%'
+
+checks.Leds.description = system leds status
+checks.Leds.begin_match = ^Led State:
+checks.Leds.end_match = :$
+checks.Leds.data_match = ^(\S+)\s+(?:SERVICE)\s+(\S+)
+checks.Leds.data_labels = Location,State
+checks.Leds.ok_condition = "%State%" eq "off"
+checks.Leds.output_string = Service indicator '%Location%' state is '%State%'
+
+checks.Temperatures.description = temperature sensors
+checks.Temperatures.begin_match = ^Temperature sensors:
+checks.Temperatures.end_match = :$
+checks.Temperatures.skip_match = ^Location
+checks.Temperatures.data_match = ^(\S+)\s+(\S+).*?(\S+)$
+checks.Temperatures.data_labels = Location,Sensor,Status
+checks.Temperatures.ok_condition = ( "%Status%" eq "okay" )
+checks.Temperatures.output_string = Temperature sensor '%Location%/%Sensor%' status is '%Status%'
+
+checks.Voltages.description = voltage sensors
+checks.Voltages.begin_match = ^Voltage sensors:
+checks.Voltages.end_match = :$
+checks.Voltages.skip_match = ^Location
+checks.Voltages.data_match = ^(\S+)\s+(\S+).*?(\S+)$
+checks.Voltages.data_labels = Location,Sensor,Status
+checks.Voltages.ok_condition = "%Status%" eq "okay"
+checks.Voltages.output_string = Voltage sensor '%Location%/%Sensor%' status is '%Status%'
+
+checks.Current.description = current sensors
+checks.Current.begin_match = ^Current sensors:
+checks.Current.end_match = ^$
+checks.Current.skip_match = ^Location
+checks.Current.data_match = ^(\S+)\s+(\S+).*?(\S+)$
+checks.Current.data_labels = Location,Sensor,Status
+checks.Current.ok_condition = "%Status%" eq "okay"
+checks.Current.output_string = Current sensor '%Location%/%Sensor%' status is '%Status%'
+
+checks.FRU.description = FRU operational status
+checks.FRU.begin_match = ^Fru Operational Status:
+checks.FRU.end_match = ^$
+checks.FRU.skip_match = ^Location
+checks.FRU.data_match = ^(\S+)\s+(\S+)$
+checks.FRU.data_labels = Location,Status
+checks.FRU.ok_condition = "%Status%" =~ m/present|okay/
+checks.FRU.output_string = FRU '%Location%' status is '%Status%'
+
+
+[SunFire V490]
+system.match = ^System Configuration:.*Sun Fire V490
+system.checks = Temperatures,Leds,Disks,Fans,PSU
+
+checks.Temperatures.description = temperature sensors
+checks.Temperatures.begin_match = ^System Temperatures.*:
+checks.Temperatures.end_match = ^$
+checks.Temperatures.skip_match = ^Device
+checks.Temperatures.data_match = ^(\S+)\s+(\S+)\s+(\S+)$
+checks.Temperatures.data_labels = Sensor,Temperature,Status
+checks.Temperatures.ok_condition = ( "%Status%" eq "OK" )
+checks.Temperatures.output_string = Temperature sensor '%Sensor%' status is '%Status%' (temp.: %Temperature% deg.)
+
+checks.Leds.description = system leds status
+checks.Leds.begin_match = ^System LED Status:
+checks.Leds.end_match = ^=
+checks.Leds.fetch_mode = linear
+checks.Leds.skip_match = ^-+
+checks.Leds.data_match = ((?:\S+\s)*\S+),\[\s*(.*?)\s*\]
+checks.Leds.data_labels = Location,Status
+checks.Leds.ok_condition = not( ( "%Location%" eq "FAULT" ) and ("%Status%" eq "ON") )
+checks.Leds.output_string = System LED '%Location%' status is '%Status%'
+
+checks.Disks.description = disks status
+checks.Disks.begin_match = ^Disk Status:
+checks.Disks.end_match = ^$
+checks.Disks.data_match = ^(.*?\d+)(?:.*?)\[\s*(\S+)\s*\]\s*$
+checks.Disks.data_labels = Disk,Status
+checks.Disks.ok_condition = "%Status%" eq "NO_FAULT"
+checks.Disks.output_string = Disk '%Disk%' status is '%Status%'
+
+checks.Fans.description = fans status
+checks.Fans.begin_match = ^Fan Status:
+checks.Fans.end_match = ^=
+checks.Fans.data_match = ^(\S+)\s+(\S+)\s+(.*?)\s+\[\s*(\S+)\s*\]
+checks.Fans.data_labels = Tray,Fan,Speed,Status
+checks.Fans.ok_condition = "%Status%" eq "NO_FAULT"
+checks.Fans.output_string = Fan '%Tray%/%Fan%' status is '%Status%' (speed: %Speed% rpm)
+
+checks.PSU.description = power supplies status
+checks.PSU.begin_match = ^Power Supplies:
+checks.PSU.end_match = ^=
+checks.PSU.data_match = ^(.*?)\s+\[\s*(\S+)\s*\]
+checks.PSU.data_labels = Supply,Status
+checks.PSU.ok_condition = "%Status%" eq "NO_FAULT"
+checks.PSU.output_string = Power supply '%Supply%' status is '%Status%'
+
+
+[SunFire 880]
+system.match = ^System Configuration:.*Sun Fire 880
+system.checks = Boards,Temperatures,Leds,Disks,Fans,PSU
+
+checks.Boards.description = IO cards status
+checks.Boards.begin_match = ^=+\sIO Cards
+checks.Boards.end_match = ^=
+checks.Boards.data_match = ^(No failures found in System|(?:No|Detected) System Faults)
+checks.Boards.data_labels = Diagnosis
+checks.Boards.ok_condition = "%Diagnosis%" =~ m/^No /
+checks.Boards.output_string = System diagnosis for IO cards is '%Diagnosis%'
+
+checks.Temperatures.description = temperature sensors
+checks.Temperatures.begin_match = ^System Temperatures
+checks.Temperatures.end_match = ^$
+checks.Temperatures.skip_match = ^Device
+checks.Temperatures.data_match = ^(\S+)\s+(.*?)\s+(\S+)
+checks.Temperatures.data_labels = Device,Temperature,Status
+checks.Temperatures.ok_condition = ( "%Status%" eq "OK" )
+checks.Temperatures.output_string = Temperature sensor '%Device%' status is '%Status%' (temp.: %Temperature% deg.)
+
+checks.Leds.description = system leds status
+checks.Leds.begin_match = ^System LED Status:
+checks.Leds.end_match = ^=
+checks.Leds.skip_match = ^$
+checks.Leds.fetch_mode = linear
+checks.Leds.data_match = ((?:\S+\s)*\S+),\[\s*(.*?)\s*\]
+checks.Leds.data_labels = Location,Status
+checks.Leds.ok_condition = not( ( "%Location%" eq "FAULT" ) and ("%Status%" eq "ON") )
+checks.Leds.output_string = System LED '%Location%' status is '%Status%'
+
+checks.Disks.description = disks status
+checks.Disks.begin_match = ^Disk Status:
+checks.Disks.end_match = ^$
+checks.Disks.data_match = ^(.*?\d+)(?:.*?)\[PRESENT\]\s+\[\s*(\S+)\s*\]
+checks.Disks.data_labels = Disk,Fault
+checks.Disks.ok_condition = "%Fault%" eq "OFF"
+checks.Disks.output_string = Fault LED status '%Fault%' for disk '%Disk%'
+
+checks.Fans.description = fans status
+checks.Fans.begin_match = ^Fan Bank :
+checks.Fans.end_match = ^=
+checks.Fans.data_match = ^(\S+)\s+(\d+)\s+\[ENABLED\]\s+(\S+)
+checks.Fans.data_labels = Fan,Speed,Status
+checks.Fans.ok_condition = "%Status%" eq "OK"
+checks.Fans.output_string = Fan '%Fan%' status is '%Status%' (speed: %Speed% rpm)
+
+checks.PSU.description = power supplies status
+checks.PSU.begin_match = ^Power Supplies:
+checks.PSU.end_match = ^=
+checks.PSU.data_match = ^(\S+\d+)\s+(\S+)
+checks.PSU.data_labels = Supply,Status
+checks.PSU.ok_condition = "%Status%" eq "GOOD"
+checks.PSU.output_string = Power supply '%Supply%' status is '%Status%'
+
+
+[SunFire V210]
+system.match = ^System Configuration:.*Sun Fire V210
+system.checks = CPU,Fans,Temperatures,Current,Voltages,Leds,FRU
+
+checks.CPU.description = CPU status
+checks.CPU.begin_match = ^=+ CPUs =
+checks.CPU.end_match = ^$
+checks.CPU.data_match = ^\s*(\d+)\s+(?:.*?)\s+(\S+)\s+(\S+)\s*$
+checks.CPU.data_labels = CPU,Status,Location
+checks.CPU.ok_condition = "%Status%" eq "on-line"
+checks.CPU.output_string = CPU%CPU% ('%Location%') status is '%Status%'
+
+checks.Fans.description = fans status
+checks.Fans.begin_match = ^Fan Status:
+checks.Fans.end_match = :$
+checks.Fans.skip_match = ^Location
+checks.Fans.data_match = ^(\S+)\s+(\S+)\s+(\S+)
+checks.Fans.data_labels = Location,Sensor,Status
+checks.Fans.ok_condition = "%Status%" eq "okay"
+checks.Fans.output_string = Fan '%Location%/%Sensor%' status is '%Status%'
+
+checks.Leds.description = system leds status
+checks.Leds.begin_match = ^Led State:
+checks.Leds.end_match = :$
+checks.Leds.data_match = ^(\S+)\s+(?:SERVICE)\s+(\S+)
+checks.Leds.data_labels = Location,State
+checks.Leds.ok_condition = "%State%" eq "off"
+checks.Leds.output_string = Service indicator '%Location%' state is '%State%'
+
+checks.Temperatures.description = temperature sensors
+checks.Temperatures.begin_match = ^Temperature sensors:
+checks.Temperatures.end_match = :$
+checks.Temperatures.skip_match = ^Location
+checks.Temperatures.data_match = ^(\S+)\s+(\S+).*?(\S+)$
+checks.Temperatures.data_labels = Location,Sensor,Status
+checks.Temperatures.ok_condition = ( "%Status%" eq "okay" )
+checks.Temperatures.output_string = Temperature sensor '%Location%/%Sensor%' status is '%Status%'
+
+checks.Voltages.description = voltage sensors
+checks.Voltages.begin_match = ^Voltage sensors:
+checks.Voltages.end_match = :$
+checks.Voltages.skip_match = ^Location
+checks.Voltages.data_match = ^(\S+)\s+(\S+).*?(\S+)$
+checks.Voltages.data_labels = Location,Sensor,Status
+checks.Voltages.ok_condition = "%Status%" eq "okay"
+checks.Voltages.output_string = Voltage sensor '%Location%/%Sensor%' status is '%Status%'
+
+checks.Current.description = current sensors
+checks.Current.begin_match = ^Current sensors:
+checks.Current.end_match = :$
+checks.Current.skip_match = ^Location
+checks.Current.data_match = ^(\S+)\s+(\S+).*?(\S+)$
+checks.Current.data_labels = Location,Sensor,Status
+checks.Current.ok_condition = "%Status%" eq "okay"
+checks.Current.output_string = Current sensor '%Location%/%Sensor%' status is '%Status%'
+
+checks.FRU.description = FRU operational status
+checks.FRU.begin_match = ^Fru Operational Status:
+checks.FRU.end_match = ^$
+checks.FRU.skip_match = ^Location
+checks.FRU.data_match = ^(\S+)\s+(\S+)
+checks.FRU.data_labels = Location,Status
+checks.FRU.ok_condition = "%Status%" =~ m/present|okay/
+checks.FRU.output_string = FRU '%Location%' status is '%Status%'
+

This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.



More information about the devel mailing list