#!/usr/bin/perl -w use strict; use Device::SerialPort; use Mail::Sendmail; my $port = new Device::SerialPort("/dev/ats-watch"); $port->baudrate(38400); $port->parity("none"); $port->databits(8); $port->stopbits(1); $port->handshake("none"); $port->read_const_time(500); $port->read_char_time(5); $port->write_settings; $port->lookclear; $port->write("s"); my %mail = ( To => 'logs@helsinki.at', From => 'noreply@helsinki.at', ); while(1) { my ($count, $line) = $port->read(100); if($count > 0) { if($line =~ /Status: (\w+), Input (\w) is selected \(A: (\w+), B: (\w+)\)/) { my $state = $1; if($3 ne 'Online' && $4 ne 'Online') { $state = 'critical'; } elsif($3 ne 'Online' || $4 ne 'Online') { $state = 'degraded'; } $mail{Subject} = "[ATS-Watch] PDU0 state $state"; $mail{Message} = "Current State: $1\n" . "Current Input: $2\n" . "Input A: $3\n" . "Input B: $4\n"; } else { $mail{Subject} = '[ATS-Watch] PDU0 state unknown'; $mail{Message} = $line; } sendmail( %mail ) or print $Mail::Sendmail::error . "\n"; } }