mirror of
				https://github.com/xcat2/xcat-core.git
				synced 2025-11-03 21:02:34 +00:00 
			
		
		
		
	git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@1978 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
		
			
				
	
	
		
			125 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
			
		
		
	
	
			125 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
#!/usr/bin/env perl
 | 
						|
# IBM(c) 2007 EPL license http://www.eclipse.org/legal/epl-v10.html
 | 
						|
package xCAT_monitoring::montbhandler;
 | 
						|
BEGIN
 | 
						|
{
 | 
						|
  $::XCATROOT = $ENV{'XCATROOT'} ? $ENV{'XCATROOT'} : '/opt/xcat';
 | 
						|
}
 | 
						|
use lib "$::XCATROOT/lib/perl";
 | 
						|
 | 
						|
use xCAT::Table;
 | 
						|
use xCAT::MsgUtils;
 | 
						|
use xCAT::Utils;
 | 
						|
use xCAT_plugin::notification;
 | 
						|
use xCAT_monitoring::monitorctrl;
 | 
						|
 | 
						|
1;
 | 
						|
 | 
						|
#-------------------------------------------------------------------------------
 | 
						|
=head1  xCAT_monitoring:montbhandler
 | 
						|
=head2    Package Description
 | 
						|
  xCAT monitoring table handler module. This is a helper module for monitorctrl module
 | 
						|
  becuase the notification infrastructure does not allow a module to register more
 | 
						|
  than one callbacks. This module registers and unregisters notification to watch for 
 | 
						|
  the changes in the monitoring tables. When changes occurrs, it forward the info
 | 
						|
  back to monitorctrl module for handling.
 | 
						|
=cut
 | 
						|
#-------------------------------------------------------------------------------
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
#--------------------------------------------------------------------------------
 | 
						|
=head3    regMonitoringNotif
 | 
						|
      It registers this module in the notification table to watch for changes in 
 | 
						|
      the monitoring table.
 | 
						|
    Arguments:
 | 
						|
        none
 | 
						|
    Returns:
 | 
						|
        0 for successful.
 | 
						|
        non-0 for not successful.
 | 
						|
=cut
 | 
						|
#--------------------------------------------------------------------------------
 | 
						|
sub regMonitoringNotif {
 | 
						|
 | 
						|
  #register for nodelist table changes if not already registered
 | 
						|
  my $tab = xCAT::Table->new('notification');
 | 
						|
  my $regged=0;
 | 
						|
  if ($tab) {
 | 
						|
    (my $ref) = $tab->getAttribs({filename => qw(montbhandler.pm)}, 'tables');
 | 
						|
    if ($ref and $ref->{tables}) {
 | 
						|
       $regged=1;
 | 
						|
    }
 | 
						|
    $tab->close();
 | 
						|
  }
 | 
						|
 | 
						|
  if (!$regged) {
 | 
						|
    xCAT_plugin::notification::regNotification([qw(montbhandler.pm monsetting -o a,u,d)]);
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
#--------------------------------------------------------------------------------
 | 
						|
=head3    unregMonitoringNotif
 | 
						|
      It un-registers this module in the notification table.
 | 
						|
    Arguments:
 | 
						|
        none
 | 
						|
    Returns:
 | 
						|
        0 for successful.
 | 
						|
        non-0 for not successful.
 | 
						|
=cut
 | 
						|
#--------------------------------------------------------------------------------
 | 
						|
sub unregMonitoringNotif {
 | 
						|
  my $tab = xCAT::Table->new('notification');
 | 
						|
  my $regged=0;
 | 
						|
  if ($tab) {
 | 
						|
    (my $ref) = $tab->getAttribs({filename => qw(montbhandler.pm)}, tables);
 | 
						|
    if ($ref and $ref->{tables}) {
 | 
						|
       $regged=1;
 | 
						|
    }
 | 
						|
    $tab->close();
 | 
						|
  }
 | 
						|
 | 
						|
  if ($regged) {
 | 
						|
    xCAT_plugin::notification::unregNotification([qw(montbhandler.pm)]);
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
#--------------------------------------------------------------------------------
 | 
						|
=head3    processTableChanges
 | 
						|
      It is called by the NotifHander module
 | 
						|
      when the monitoring tables get changed.  If a plug-in
 | 
						|
      is added or removed from the monitoring table. this function will start
 | 
						|
      or stop the plug-in for monitoing the xCAT cluster.  
 | 
						|
    Arguments:
 | 
						|
      action - table action. It can be d for rows deleted, a for rows added
 | 
						|
                    or u for rows updated.
 | 
						|
      tablename - string. The name of the DB table whose data has been changed.
 | 
						|
      old_data - an array reference of the old row data that has been changed.
 | 
						|
           The first element is an array reference that contains the column names.
 | 
						|
           The rest of the elelments are also array references each contains
 | 
						|
           attribute values of a row.
 | 
						|
           It is set when the action is u or d.
 | 
						|
      new_data - a hash refernce of new row data; only changed values are present
 | 
						|
           in the hash.  It is keyed by column names.
 | 
						|
           It is set when the action is u or a.
 | 
						|
    Returns:
 | 
						|
        0 for successful.
 | 
						|
        non-0 for not successful.
 | 
						|
=cut
 | 
						|
#--------------------------------------------------------------------------------
 | 
						|
sub processTableChanges {
 | 
						|
  my $action=shift;
 | 
						|
  if ($action =~ /xCAT_plugin::montbhandler/) {
 | 
						|
    $action=shift;
 | 
						|
  }
 | 
						|
  my $tablename=shift;
 | 
						|
  my $old_data=shift;
 | 
						|
  my $new_data=shift;
 | 
						|
 | 
						|
 | 
						|
  xCAT_monitoring::monitorctrl->processMonitoringTableChanges($action, $tablename, $old_data, $new_data);
 | 
						|
  
 | 
						|
}
 | 
						|
 |