mirror of
				https://github.com/xcat2/xcat-core.git
				synced 2025-11-03 21:02:34 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			134 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
			
		
		
	
	
			134 lines
		
	
	
		
			4.1 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);
 | 
						|
 | 
						|
}
 | 
						|
 |