Table of Contents

Client side connection test

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

Description

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

Installation

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

Source

xymon-remoteconns.cfg

Show Code ⇲

Hide Code ⇱

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

xymon-remoteconns.pl

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";
}

Known Bugs and Issues

To Do

Credits

Changelog