mirror of
				https://github.com/xcat2/xcat-core.git
				synced 2025-10-31 19:32:31 +00:00 
			
		
		
		
	git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@7241 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);
 | |
|   
 | |
| }
 | |
| 
 |