diff --git a/xCAT-client-2.0/xCAT-client.spec b/xCAT-client-2.0/xCAT-client.spec index 382ddc131..66390a413 100644 --- a/xCAT-client-2.0/xCAT-client.spec +++ b/xCAT-client-2.0/xCAT-client.spec @@ -70,6 +70,9 @@ ln -sf /usr/bin/xcatclientnnr $RPM_BUILD_ROOT/usr/sbin/makenetworks ln -sf /usr/bin/xcatclientnnr $RPM_BUILD_ROOT/usr/sbin/copycds ln -sf /usr/bin/xcatclientnnr $RPM_BUILD_ROOT/usr/bin/regnotif ln -sf /usr/bin/xcatclientnnr $RPM_BUILD_ROOT/usr/bin/unregnotif +ln -sf /usr/bin/xcatclientnnr $RPM_BUILD_ROOT/usr/bin/startmon +ln -sf /usr/bin/xcatclientnnr $RPM_BUILD_ROOT/usr/bin/stopmon +ln -sf /usr/bin/xcatclientnnr $RPM_BUILD_ROOT/usr/bin/updatemon ln -sf /usr/bin/xcatDBcmds $RPM_BUILD_ROOT/usr/bin/mkdef ln -sf /usr/bin/xcatDBcmds $RPM_BUILD_ROOT/usr/bin/chdef ln -sf /usr/bin/xcatDBcmds $RPM_BUILD_ROOT/usr/bin/lsdef diff --git a/xCAT-server-2.0/usr/lib/xcat/plugins/monctrlcmds.pm b/xCAT-server-2.0/usr/lib/xcat/plugins/monctrlcmds.pm new file mode 100644 index 000000000..c669a22af --- /dev/null +++ b/xCAT-server-2.0/usr/lib/xcat/plugins/monctrlcmds.pm @@ -0,0 +1,286 @@ +#!/usr/bin/env perl +# IBM(c) 2007 EPL license http://www.eclipse.org/legal/epl-v10.html +package xCAT_plugin::monctrlcmds; +use xCAT::NodeRange; +use xCAT::Table; +use xCAT::MsgUtils; +require("/usr/lib/xcat/monitoring/monitorctrl.pm"); + +1; + +#------------------------------------------------------------------------------- +=head1 xCAT_plugin:monctrlcmds +=head2 Package Description + xCAT monitoring control commands plugini module. This modules handles + monitoring related commands. +=cut +#------------------------------------------------------------------------------- + + + +#-------------------------------------------------------------------------------- +=head3 handled_commands + It returns a list of commands handled by this plugin. + Arguments: + none + Returns: + a list of commands. +=cut +#-------------------------------------------------------------------------------- +sub handled_commands { + return { + startmon => "monctrlcmds", + stopmon => "monctrlcmds", + updatemon => "monctrlcmds", + } +} + +#-------------------------------------------------------------------------------- +=head3 process_request + It processes the monitoring control commands. + Arguments: + request -- a hash table which contains the command name. + callback -- a callback pointer to return the response to. + args -- a list of arguments that come with the command. + Returns: + 0 for success. The output is returned through the callback pointer. + 1. for unsuccess. The error messages are returns through the callback pointer. +=cut +#-------------------------------------------------------------------------------- +sub process_request { + use Getopt::Long; + # options can be bundled up like -vV + Getopt::Long::Configure("bundling") ; + $Getopt::Long::ignorecase=0; + + my $request = shift; + my $callback = shift; + my $command = $request->{command}->[0]; + my $args=$request->{arg}; + + if ($command eq "startmon") { + my ($ret, $msg) = startmon($args, $callback); + if ($msg) { + my %rsp=(); + $rsp->{dara}->[0]= $msg; + $callback->($rsp); + } + return $ret; + } + elsif ($command eq "stopmon") { + my ($ret, $msg) = stopmon($args, $callback); + if ($msg) { + my %rsp=(); + $rsp->{data}->[0]= $msg; + $callback->($rsp); + } + return $ret; + } + elsif ($command eq "updatemon") { + xCAT_monitoring::monitorctrl::sendMonSignal(); + } + else { + my %rsp=(); + $rsp->{data}->[0]= "unsupported command: $command."; + $callback->($rsp); + return 1; + } +} + + +#-------------------------------------------------------------------------------- +=head3 startmon + This function starts the given products for monitoring the xCAT cluster. + Arguments: + callback - the pointer to the callback function. + args - The format of the args is: + [-h|--help|-v|--version] or + [product_name[,product_name]...] + where + product_name is the name of the monitoring product short name. + For example: Ganglia. The specified products will be started + for monitoring the xCAT cluster. + Returns: + 0 for success. The output is returned through the callback pointer. + 1. for unsuccess. The error messages are returns through the callback pointer. +=cut +#-------------------------------------------------------------------------------- +sub startmon { + my $args=shift; + my $callback=shift; + my $VERSION; + my $HELP; + + # subroutine to display the usage + sub startmon_usage + { + my %rsp; + $rsp->{data}->[0]= "Usage:"; + $rsp->{data}->[1]= " startmon [product_name[,product_name]...]"; + $rsp->{data}->[2]= " startmon [-h|--help|-v|--version]"; + $rsp->{data}->[3]= " product_name is the name of the monitoring product registered in the monitoring table."; + $callback->($rsp); + } + + @ARGV=@{$args}; + + # parse the options + if(!GetOptions( + 'h|help' => \$::HELP, + 'v|version' => \$::VERSION,)) + { + &startmon_usage; + return; + } + + # display the usage if -h or --help is specified + if ($::HELP) { + &startmon_usage; + return; + } + + # display the version statement if -v or --verison is specified + if ($::VERSION) + { + my %rsp; + $rsp->{data}->[0]= "startmon version 1.0"; + $callback->($rsp); + return; + } + + my @product_names; + if (@ARGV < 1) + { + &startmon_usage; + return; + } + else { + @product_names=split(/,/, $ARGV[0]); + } + + my %ret = xCAT_monitoring::monitorctrl::startMonitoring(@product_names); + + my %rsp; + $rsp->{data}->[0]= "starting @product_names"; + my $i=1; + foreach (keys %ret) { + my $ret_array=$ret{$_}; + $rsp->{data}->[$i++]= "$_: $ret_array->[1]"; + } + + my $nodestatmon=xCAT_monitoring::monitorctrl::nodeStatMonName(); + if ($nodestatmon) { + foreach (@product_names) { + if ($_ eq $nodestatmon) { + my ($code, $msg)=xCAT_monitoring::monitorctrl::startNodeStatusMonitoring($nodestatmon); + $rsp->{data}->[$i++]="node status monitoring with $nodestatmon: $msg"; + } + } + } + + $rsp->{data}->[$i++]="done."; + $callback->($rsp); + + return; +} + +#-------------------------------------------------------------------------------- +=head3 stopmon + This function stops the given products for monitoring the xCAT cluster. + Arguments: + callback - the pointer to the callback function. + args - The format of the args is: + [-h|--help|-v|--version] or + [product_name[,product_name]...] + where + product_name is the name of the monitoring product short name. + For example: Ganglia. The specified products will be stoped + for monitoring the xCAT cluster. + Returns: + 0 for success. The output is returned through the callback pointer. + 1. for unsuccess. The error messages are returns through the callback pointer. +=cut +#-------------------------------------------------------------------------------- +sub stopmon { + my $args=shift; + my $callback=shift; + my $VERSION; + my $HELP; + + # subroutine to display the usage + sub stopmon_usage + { + my %rsp; + $rsp->{data}->[0]= "Usage:"; + $rsp->{data}->[1]= " stopmon [product_name[,product_name]...]"; + $rsp->{data}->[2]= " stopmon [-h|--help|-v|--version]"; + $rsp->{data}->[3]= " product_name is the name of the monitoring product registered in the montoring table."; + $callback->($rsp); + } + + @ARGV=@{$args}; + # parse the options + if(!GetOptions( + 'h|help' => \$::HELP, + 'v|version' => \$::VERSION,)) + { + &stopmon_usage; + return; + } + + # display the usage if -h or --help is specified + if ($::HELP) { + &stopmon_usage; + return; + } + + # display the version statement if -v or --verison is specified + if ($::VERSION) + { + my %rsp; + $rsp->{data}->[0]= "stopmon version 1.0"; + $callback->($rsp); + return; + } + + + my @product_names; + if (@ARGV < 1) + { + &startmon_usage; + return; + } + else { + @product_names=split(/,/, $ARGV[0]); + } + + my %ret = xCAT_monitoring::monitorctrl::stopMonitoring(@product_names); + my %rsp; + $rsp->{data}->[0]= "stopping @product_names"; + my $i=1; + foreach (keys %ret) { + my $ret_array=$ret{$_}; + $rsp->{data}->[$i++]= "$_: $ret_array->[1]"; + } + + my $nodestatmon=xCAT_monitoring::monitorctrl::nodeStatMonName(); + if ($nodestatmon) { + foreach (@product_names) { + if ($_ eq $nodestatmon) { + my ($code, $msg)=xCAT_monitoring::monitorctrl::stopNodeStatusMonitoring($nodestatmon); + $rsp->{data}->[$i++]="node status monitoring with $nodestatmon: $msg"; + } + } + } + $rsp->{data}->[$i++]="done."; + $callback->($rsp); + + return; +} + + + + + + +