mirror of
				https://github.com/xcat2/xcat-core.git
				synced 2025-10-30 19:02:27 +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);
 | |
| 
 | |
| }
 | |
| 
 |