monitors:remote_connection_test

Error loading plugin struct
ParseError: syntax error, unexpected 'fn' (T_STRING), expecting :: (T_PAAMAYIM_NEKUDOTAYIM)
More info is available in the error log.

This is an old revision of the document!


Client side connection test

Author Hermann Lang
Compatibility Xymon 4.2
Requirements Perl, Linux
Download None
Last Update 2017-10-10

This program tests network connections from the XYmon client to remote servers.

Client side

Add the script /etc/xymon-client/ext/xymon-remoteconns.pl and make it executable.

Add the clients configuration file /etc/xymon-client/client.d/xymon-remoteconns.cfg

Restart the xymon client

Server side

Show Code ⇲

Hide Code ⇱

 [remote-conns]
        ENVFILE /etc/xymon-client/xymonclient.cfg
        CMD $XYMONCLIENTHOME/ext/xymon-remoteconns.pl
        INTERVAL 5m 

Show Code ⇲

Hide Code ⇱

#!/usr/bin/perl -w
# This program tests network connections from the xymon clinet to a remote servers.
# Update the array @servers with the list of remote servers and ports to test. The format
# for an entry is the "server:port". Example: 
# @servers = qw(192.168.0.1:80 192.168.0.1:8080 192.168.10.5:21);

# Author : H. Lang
# Date : 2017/10/10

#----------------------------------------------------------------------------------------
use strict;
use IO::Socket::INET;

#----------------------------------------------------------------------------------------
my $XYTEST  = "remote-conns";
my @servers = qw(192.168.0.1:80 192.168.0.1:8080 192.168.10.5:21);
my $server_status = "";
my $server;

my $debug = "no";
#my $debug = "yes";

#----------------------------------------------------------------------------------------
my %colours = ( green => 0,
               yellow => 1,
               red => 2
        );
my $colour = 'green';

use constant ERRTABLECELL => q{style="color:white;background-color:red"};
use constant WARNTABLECELL => q{style="color:white;background-color:yellow"};

#----------------------------------------------------------------------------------------
sub setcolour {
        my ($current, $new) = @_;
        return ($colours{$new} > $colours{$current}) ? $new : $current;
}

#----------------------------------------------------------------------------------------
sub connect_test {
  my ($input) = @_;
  my ($server,$port) = (split(/:/,$input));
  my $status = "green";

  if ( my $socket = new IO::Socket::INET ( PeerHost => "$server", PeerPort => "$port", Proto => 'tcp', Timeout => '5') ) {
    shutdown($socket, 1);
    $socket->close();
  }else{
    $status = "red";
  }

  return ($status);
}

#----------------------------------------------------------------------------------------
#               MAIN
#----------------------------------------------------------------------------------------
my $date = localtime();

my $message = "<b><u>Outbound Connection Tests</u></b><br/>\n";
# You cannot use styles because it affect the whole xymon page.
$message   .= "\n<table border=1 cellpadding=5 cellspacing=0 width=100%'>\n";
$message   .= "\n<tr><th width=200>Destination</th><th width=200>Status</th></tr>\n";

foreach $server (@servers) {
   ($server_status) = connect_test($server);
   if ($server_status eq 'red') {
     $colour = setcolour($colour,'red');
     $message .= "<tr><td ".ERRTABLECELL.">$server</td><td ".ERRTABLECELL.">Connection down!</td></tr>\n";
   }else{
     $message .= "<tr><td>$server</td><td>Connection up</td></tr>\n";
   }
}

$message .= "</table>\n";

if ($debug eq "no") {
   exec "$ENV{XYMON}", "$ENV{XYMSRV}", "status $ENV{MACHINE}.$XYTEST $colour $date\n$message\n\n";
} else {
   print "Colour : $colour\n";
   print "Date : $date\n";
   print "status $ENV{MACHINE}.$XYTEST $colour $date\n$message\n\n";
}
  • 2017-10-10
    • Initial release
  • monitors/remote_connection_test.1509548034.txt.gz
  • Last modified: 2017/11/01 14:53
  • by hlang