#!/usr/bin/perl
# ------------------------------------------------------
#
# GroupWise SNMP Monitor
# Paul Liberman
#
# Free software - do whatever you want with it.
#
# Purpose: Use snmp to monitor your GroupWise system
#
# Requires: NetSNMP - should be installed by default in most Linux distros and Mac OS X
#
# This will poll your GroupWise servers once every 30 seconds. Can be adjusted.
#
# ---------------------------------------------------------------------------

use strict;


# You must change these to your servers
# ----------------------------------------------------------------------------
my $mailserver = "mail1.mydomain.org"; # Host name of sever to monitor CPU
my $gwiaserver = "mail2.mydomain.org"; # Host name of your GWIA server
my $mtaserver  = "mail1.mydomain.org"; # Host name of your MTA server 
my $wacserver  = "mail3.mydomain.org"; # Host name of your WebAccess server

my $data;

while(1) {

    # Note that any of these can be cloned to monitor more systems
    # -----------------------------------------------------------------------
    
    # Processor - This is for a dual processor box
    #           - If you only one processor comment the second set 
    # ---------
    
    $data = `snmpget -c public -v1 $mailserver .1.3.6.1.2.1.25.3.3.1.2.1`;
    my $cpu1 = $1 if $data =~ /INTEGER: (\d+)/;
    $data = `snmpget -c public -v1 $mailserver .1.3.6.1.2.1.25.3.3.1.2.2`;
    my $cpu2 = $1 if $data =~ /INTEGER: (\d+)/;


    # GWIA
    # ------
    
    $data = `snmpget -c public -v1 $gwiaserver  1.3.6.1.4.1.23.2.70.1.50.1`;
    my $sendthrds = $1 if $data =~ /Counter32: (\d+)/;
    
    $data = `snmpget -c public -v1 $gwiaserver  1.3.6.1.4.1.23.2.70.1.51.1`;
    my $rcvthrds = $1 if $data =~ /Counter32: (\d+)/;
    
    $data = `snmpget -c public -v1 $gwiaserver  1.3.6.1.4.1.23.2.70.1.62.1`;
    my $sndque = $1 if $data =~ /Counter32: (\d+)/;
    
    $data = `snmpget -c public -v1 $gwiaserver  1.3.6.1.4.1.23.2.70.1.63.1`;
    my $rcvque = $1 if $data =~ /Counter32: (\d+)/;
    
    $data = `snmpget -c public -v1 $gwiaserver  1.3.6.1.4.1.23.2.70.1.66.1`;
    my $pop = $1 if $data =~ /Counter32: (\d+)/;
    
    $data = `snmpget -c public -v1 $gwiaserver  1.3.6.1.4.1.23.2.70.1.84.1`;
    my $imap = $1 if $data =~ /Counter32: (\d+)/;
    
    
    # MTA
    # ----
    $data = `snmpget -c public -v1 $mtaserver  1.3.6.1.4.1.23.2.37.1.1.1.6.1`;
    my $closed = $1 if $data =~ /Gauge32: (\d+)/;
    
    $data = `snmpget -c public -v1 $mtaserver  1.3.6.1.4.1.23.2.37.1.1.1.34.1`;
    my $poque = $1 if $data =~ /Counter32: (\d+)/;
    
    $data = `snmpget -c public -v1 $mtaserver  1.3.6.1.4.1.23.2.37.1.1.1.38.1`;
    my $interque = $1 if $data =~ /Counter32: (\d+)/;
    
    $data = `snmpget -c public -v1 $mtaserver  1.3.6.1.4.1.23.2.37.1.1.1.40.1`;
    my $admque = $1 if $data =~ /Counter32: (\d+)/;
    
    $data = `snmpget -c public -v1 $mtaserver  1.3.6.1.4.1.23.2.37.1.1.1.48.1`;
    my $rtrque = $1 if $data =~ /Counter32: (\d+)/;

    # Webaccess

    $data = `snmpget -c public -v1 $wacserver 1.3.6.1.4.1.23.2.77.1.1.1.6.1`;
    my $waque = $1 if $data =~ /Counter32: (\d+)/;

    $data = `snmpget -c public -v1 $wacserver 1.3.6.1.4.1.23.2.77.1.1.1.8.1`;
    my $wauser = $1 if $data =~ /Counter32: (\d+)/;
 
  
    # Print out the data
     
    print "GroupWise Monitor\n";
    print "-----------------------------------\n";
    print "CPU 1:                $cpu1\n";
    print "CPU 2:                $cpu2\n";
    print "\n";
    print "GWIA send threads:    $sendthrds\n";
    print "GWIA receive threads: $rcvthrds\n";
    print "GWIA send queue:      $sndque\n";
    print "GWIA receive queue:   $rcvque\n";
    print "GWIA pop sessions:    $pop\n";
    print "GWIA imap sessons:    $imap\n";
    print "\n";
    print "MTA closed POs:       $closed\n";
    print "MTA PO queues:        $poque\n";
    print "MTA Internet queue:   $interque\n";
    print "MTA admin queue:      $admque\n";
    print "MTA routing queue:    $rtrque\n";
    print "\n";
    print "WebAccess threads:    $waque\n";
    print "WebAccess users:      $wauser\n";
        
    sleep 30; # Adjust this to your preference
}
