# OK Merethis
[SunFire E4500/E5500]
system.match = ^System Configuration:.*Sun Enterprise E4500/E5500
system.checks = Memory,Leds,Fans,Temperatures,PSU

checks.Memory.description = memory banks status
checks.Memory.begin_match = ^=+ Memory
checks.Memory.end_match = ^=
checks.Memory.data_match = ^\s*(\d+)\s+(\d+)\s+\S+\s+(.*?)\s+(.*?)\s+
checks.Memory.data_labels = Board,Bank,Status,Condition
checks.Memory.ok_condition = "%Condition%" eq "OK"
checks.Memory.output_string = Memory Board '%Board%' on bank '%Bank%' status is '%Condition%'

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 = ^(Brd|-+)
checks.Temperatures.data_match = ^\s*(\S+)\s+(\S+)\s+(\S+)\s+\S+\s+\S+\s+(.*?)$
checks.Temperatures.data_labels = Location,State,Temperature,Trend
checks.Temperatures.ok_condition = "%Trend%" =~ m/^stable|rising|falling$/i
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{2}\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%'

# OK Merethis (v1280)
[Netra-T12]
system.match = ^System Configuration:.*Sun Fire V1280
system.checks = Memory,Fans,Temperatures,Voltages,FRU

checks.Memory.description = memory module
checks.Memory.begin_match = ^Memory Module Groups:
checks.Memory.end_match = ^$
checks.Memory.skip_match = ^(-+|ControllerID)
checks.Memory.data_match = ^(\S+)\s+(\S+)\s+(\S+)\s+(\S+)
checks.Memory.data_labels = ControllerID,GroupID,Labels,Status
checks.Memory.ok_condition = "%Status%" eq "okay"
checks.Memory.output_string = Memory Module '%ControllerID%' '%Labels%' status is '%Status%'

checks.Fans.description = fan status
checks.Fans.begin_match = ^Fan (Status|Speeds):
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%" =~ m/self-regulating|okay/i
checks.Fans.output_string = Fan '%Location%' status is '%Status%'

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+)\s*$
checks.Temperatures.data_labels = Location,Sensor,Status
checks.Temperatures.ok_condition = "%Status%" eq "okay"
checks.Temperatures.output_string = Temperature sensor '%Location%' status is '%Status%'

checks.Voltages.description = voltages sensors
checks.Voltages.begin_match = ^Voltage sensors:
checks.Voltages.end_match = :$
checks.Voltages.skip_match = ^(-+|Location|=+)
checks.Voltages.data_match = ^(\S+)\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%' 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/^okay|online|ok$/i
checks.FRU.output_string = FRU '%Location%' operationnal status is '%Status%'

[SunFire 280R]
system.match = ^System Configuration:.*Sun Fire 280R
system.checks = Leds,Fans,Disks,PSU,IO

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%" =~ m/^OK|NO_FAULT$/
checks.PSU.output_string = Power supply '%Supply%' status is '%Status%'

checks.IO.description = IO cards status
checks.IO.begin_match = ^=+\sIO Cards
checks.IO.end_match = ^=
checks.IO.skip_match = ^(-|Brd)
checks.IO.data_match = ^(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)
checks.IO.data_labels = Brd,Type,ID,Side,Slot,BusFreq,MaxBus,DevFunc,State
checks.IO.ok_condition = "%States%" eq "ok"
checks.IO.output_string = IO Card '%Type%/%ID%/%Side%/%Slot%' state is '%State%'

[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%'

# OK Merethis
[UltraSPARCengine_CP-40]
system.match = ^System Configuration:.*sun4u SPARCengine CP2000
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%'

# OK Merethis
[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 (Status|Speeds):
checks.Fans.end_match = :$
checks.Fans.skip_match = ^Location
checks.Fans.data_match = ^\s*(\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%'

# OK Merethis
[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%'

# Ok Merethis
[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.data_match = ^\s+\[\s*(.*?)\s*\]\s+\[\s*(.*?)\s*\]\s+\[\s*(.*?)\s*\]
checks.Leds.data_labels = Location,Failure,Running
checks.Leds.ok_condition = "%Failure%" ne "ON"
checks.Leds.output_string = System failure led status is '%Failure%'

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%'

# Ok Merethis
[SunFire 480]
system.match = ^System Configuration:.*Sun Fire 480
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.data_match = ^\s+\[\s*(.*?)\s*\]\s+\[\s*(.*?)\s*\]\s+\[\s*(.*?)\s*\]
checks.Leds.data_labels = Location,Failure,Running
checks.Leds.ok_condition = "%Failure%" ne "ON"
checks.Leds.output_string = System failure led status is '%Failure%'

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%'

# OK Merethis
[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%" =~ /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%'

[SPARC T3-4]
system.match = ^System Configuration:.*SPARC T3-4
system.checks = CPU,Fans,Temperatures,Current,Voltages,FRU

checks.CPU.description = Virtual CPUs
checks.CPU.begin_match = ^=+ Virtual CPUs =
checks.CPU.skip_match = ^$
checks.CPU.end_match = ^==+
checks.CPU.data_match = ^\s*(\d+)\s+(\d+)\s+(\S+)\s+(\S+)\s+(\S+)\s*$
checks.CPU.data_labels = CPU,Frequence,Power,Implementation,Status
checks.CPU.ok_condition = "%Status%" eq "on-line"
checks.CPU.output_string = CPU%CPU% status is '%Status%'

checks.Fans.description = fans status
checks.Fans.begin_match = ^Fan sensors:
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 "ok"
checks.Fans.output_string = Fan '%Location%/%Sensor%' status is '%Status%'

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 "ok" )
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 "ok"
checks.Voltages.output_string = Voltage sensor '%Location%/%Sensor%' status is '%Status%'

checks.Current.description = current indicators
checks.Current.begin_match = ^Current indicators:
checks.Current.end_match = :$
checks.Current.skip_match = ^Location
checks.Current.data_match = ^(\S+)\s+(\S+).*?(\S+)$
checks.Current.data_labels = Location,Indicator,Status
checks.Current.ok_condition = "%Status%" eq "ok"
checks.Current.output_string = Current indicator '%Location%/%Indicator%' 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+)\s+(\S+)
checks.FRU.data_labels = Location,Name,Status
checks.FRU.ok_condition = "%Status%" =~ m/enabled/
checks.FRU.output_string = FRU '%Location%/%Name%' 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%'
