incorporated XCATCFG and hierachy in xcatmon.pm to support node liveness status monitoring

git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@785 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
This commit is contained in:
linggao 2008-03-14 17:18:42 +00:00
parent 50a4e0a813
commit 41e5425d8c
3 changed files with 34 additions and 16 deletions

View File

@ -899,7 +899,8 @@ sub getPluginSettings {
Returns:
A hash reference keyed by the monitoring server nodes and each value is a ref to
an array of [nodes, nodetype, status] arrays monitored by the server. So the format is:
{monserver1=>[['node1', 'osi', 'active'], ['node2', 'switch', 'booting']...], ...}
{monserver1=>[['node1', 'osi', 'active'], ['node2', 'switch', 'booting']...], ...}
If there is no service node for a node, the key will be "noservicenode".
=cut
#--------------------------------------------------------------------------------
sub getMonHierarchy {
@ -913,20 +914,19 @@ sub getMonHierarchy {
#get monserver for each node. use "monserver" attribute from noderes table, if not
#defined, use "servicenode". otherwise, use loca lhost.
my @hostinfo=xCAT::Utils->determinehostname();
my $host=pop(@hostinfo);
if (defined(@tmp1) && (@tmp1 > 0)) {
foreach(@tmp1) {
my $node=$_->{node};
my $status=$_->{status};
my $nodetype=$_->{nodetype};
my $monserver=$host;
my $monserver;
my $tmp2=$table2->getNodeAttribs($node, ['monserver', 'servicenode']);
if (defined($tmp2) && ($tmp2)) {
if ($tmp2->{monserver}) { $monserver=$tmp2->{monserver}; }
elsif ($tmp2->{servicenode}) { $monserver=$tmp2->{servicenode}; }
}
#print "node=$node, monserver=$monserver\n";
if (!$monserver) { $monserver="noservicenode"; }
if (exists($ret->{$monserver})) {
my $pa=$ret->{$monserver};
push(@$pa, [$node, $nodetype, $status]);

View File

@ -9,7 +9,7 @@ use lib "$::XCATROOT/lib/perl";
use xCAT::Utils;
use xCAT::GlobalDef;
use xCAT_monitoring::monitorctrl;
use Sys::Hostname;
1;
@ -115,7 +115,7 @@ sub startNodeStatusMon {
if ($reading>0) { $value=$reading;}
#create the cron job, it will run the command every 3 minutes.
my $newentry="*/$value * * * * XCATROOT=$::XCATROOT $cmd";
my $newentry="*/$value * * * * XCATROOT=$::XCATROOT PATH=$ENV{'PATH'} XCATCFG='$ENV{'XCATCFG'}' $cmd";
my ($code, $msg)=xCAT::Utils::add_cron_job($newentry);
if ($code==0) { return (0, "started"); }
else { return ($code, $msg); }
@ -203,11 +203,29 @@ sub getMonNodesStatus {
my @unknown_nodes=();
my $monservers=xCAT_monitoring::monitorctrl->getMonHierarchy();
my $host=hostname();
my $monnodes=$monservers->{$host};
if (($monnodes) && (@$monnodes >0)) {
foreach(@$monnodes) {
my $isSV=xCAT::Utils->isServiceNode();
#on a service node or on ms, get the nodes that has local host as the server node
my $monnodes;
my @hostinfo=xCAT::Utils->determinehostname();
my %iphash=();
foreach(@hostinfo) {$iphash{$_}=1;}
foreach my $host (@hostinfo) {
$monnodes=$monservers->{$host};
if (($monnodes) && (@$monnodes >0)) { last;}
}
foreach(@$monnodes) {
my $node=$_->[0];
my $status=$_->[2];
if ($status eq $::STATUS_ACTIVE) { push(@active_nodes, $node);}
elsif ($status eq $::STATUS_INACTIVE) { push(@inactive_nodes, $node);}
else { push(@unknown_nodes, $node);}
}
#on ms, add the ones that has no service nodes
if (!$isSV) {
my $monnodes_ms=$monservers->{'noservicenode'};
foreach(@$monnodes_ms) {
my $node=$_->[0];
my $status=$_->[2];
if ($status eq $::STATUS_ACTIVE) { push(@active_nodes, $node);}

View File

@ -246,11 +246,11 @@ sub startmon {
}
else {
#update the monsetting table
if ($settings) {
if ($settings) {
my $table1=xCAT::Table->new("monsetting", -create => 1,-autocommit => 1);
my %key_col1 = (name=>$pname);
#parse the settings. Setting format: key="value",key="value"....
while ($settings =~ s/^\[([^\[\]\=]*)=([^\[\]]*)\](,)*//) {
while ($settings =~ s/^\[([^\[\]\=]*)=([^\[\]]*)\](,)*//) {
$key_col1{key}=$1;
$setting_hash{value}=$2;
$table1->setAttribs(\%key_col1, \%setting_hash);
@ -278,7 +278,7 @@ sub startmon {
%iphash=();
foreach(@hostinfo) {$iphash{$_}=1;}
foreach (@mon_servers) {
if (! $iphash{$_}) { #if it is not this node, meaning it is ms
if (! $iphash{$_} && ($_ ne "noservicenode")) { #if it is not this node, meaning it is ms
my %rsp2;
$rsp2->{data}->[0]="sending request to $_...";
$callback->($rsp2);
@ -419,7 +419,7 @@ sub stopmon {
%iphash=();
foreach(@hostinfo) {$iphash{$_}=1;}
foreach (@mon_servers) {
if (! $iphash{$_}) { #if it is not this node, meaning it is ms
if (! $iphash{$_} && ($_ ne "noservicenode")) { #if it is not this node, meaning it is ms
my %rsp2;
$rsp2->{data}->[0]="sending request to $_...";
$callback->($rsp2);