a227c6eb35
git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@493 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 monitoring -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);
|
|
|
|
}
|
|
|