Advertisement
Guest User

Untitled

a guest
Sep 6th, 2011
217
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 2.82 KB | None | 0 0
  1. #!/usr/bin/perl
  2. #  
  3. #   for this to work place this file in: /usr/share/snmp/exim_queue_monitor.pl
  4. #   insert the following line in /usr/share/snmp/snmpd.conf
  5. #   perl do "/usr/share/snmp/exim_queue_monitor.pl
  6. #
  7. use strict;
  8. use warnings;
  9.  
  10. # Global Vars:
  11. our $agent;
  12.  
  13. # Private vars
  14. my $root_oid = '.1.3.6.1.4.1.9999';
  15. my $running;
  16. # set to 1 to get debugging information
  17. my $debugging = 0;
  18. # since we're embedded, set this to 0
  19. my $subagent = 0;
  20.  
  21.  
  22. BEGIN {
  23.     print STDERR "starting exim_queue_monitor.pl\n";
  24. }
  25.  
  26. use NetSNMP::OID     (':all');
  27. use NetSNMP::agent     (':all');
  28. use NetSNMP::ASN     (':all');
  29.  
  30. print STDERR "exim_queue_monitor.pl loaded ok\n";
  31.  
  32. # where we are going to hook onto
  33. my $reg_oid = new NetSNMP::OID($root_oid);
  34. print STDERR "registering at ",$reg_oid,"\n" if $debugging;
  35.  
  36. # we register ourselves with the master agent we're embedded in.  
  37. $agent->register('exim_queue_monitor', $reg_oid, \&exim_queue_monitor, );
  38.  
  39. # processes system command and updates request obj.
  40. sub process_exim_mail_queue {
  41.     my $request = shift;
  42.     my $queue_len = `exim -bpc`;
  43.     chomp $queue_len;
  44.     print STDERR "   -> queue length = $queue_len\n" if $debugging;
  45.     $request->setValue(ASN_INTEGER, $queue_len);
  46. }
  47.  
  48. sub process_postfix_mail_queue {
  49.     my $request = shift;
  50.     my $queue_len = `find /var/spool/postfix/deferred/ /var/spool/postfix/active/ /var/spool/postfix/maildrop/ | wc -l`;
  51.     chomp $queue_len;
  52.     print STDERR "   -> queue length = $queue_len\n" if $debugging;
  53.     $request->setValue(ASN_INTEGER, $queue_len);
  54. }
  55.  
  56. # define a handler for incoming SNMP requests for our part of the OID tree.  
  57. sub exim_queue_monitor {
  58.     my ($handler, $registration_info, $request_info, $requests) = @_;
  59.     my $request;
  60.    
  61.     #debug messages    
  62.     do {
  63.         print STDERR "refs: ",join(", ", ref($handler), ref($registration_info),
  64.                    ref($request_info), ref($requests)),"\n";
  65.         print STDERR "processing a request of type " . $request_info->getMode() . "\n";
  66.     }
  67.     if $debugging;
  68.  
  69.     for($request = $requests; $request; $request = $request->next()) {
  70.         my $oid = $request->getOID();
  71.         print STDERR "  processing request of $oid\n" if $debugging;
  72.  
  73.         my $mode = $request_info->getMode;
  74.         # if SNMP monitor request mode is GET or GETNEXT
  75.         if ( $mode == MODE_GET or $mode == MODE_GETNEXT ) {
  76.             # queue request for exim
  77.             if ($oid == new NetSNMP::OID($root_oid . ".1.2.1")) {
  78.                process_exim_mail_queue $request;
  79.             }
  80.             # queue request for postfix
  81.             elsif ($oid == new NetSNMP::OID($root_oid . ".1.2.2")) {
  82.                process_postfix_mail_queue $request;
  83.             }
  84.         }
  85.     }# end for loop
  86.  
  87.     print STDERR "  finished processing\n" if $debugging;
  88. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement