diff --git a/xCAT-server/lib/xcat/monitoring/samples/mycode.pm b/xCAT-server/lib/xcat/monitoring/samples/mycode.pm index 26f346060..2625f3120 100644 --- a/xCAT-server/lib/xcat/monitoring/samples/mycode.pm +++ b/xCAT-server/lib/xcat/monitoring/samples/mycode.pm @@ -2,26 +2,51 @@ package xCAT_monitoring::mycode; 1; -# This subroutine get called when new nodes are added into the cluster -# or nodes are removed from the cluster. -# +#-------------------------------------------------------------------------------- +=head3 processTableChanges + This subroutine get called when new nodes are added into the cluster + or nodes are removed from the cluster, or a row is modified. + 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 + Comment: + To test, + 1. copy this file to /opt/xcat/lib/perl/xCAT_monitoring directory. + 2. run regnotif /opt/xcat/lib/perl/xCAT_monitoring/mycode.pm nodelist -o a,u,d + 3. Then change the nodelist table (add node, remove node, or change status column). + 4. Watch /var/log/mycode.log for output. +=cut +#------------------------------------------------------------------------------- sub processTableChanges { my $action=shift; if ($action =~ /xCAT_monitoring::mycode/){ $action=shift; } + my $tablename=shift; my $old_data=shift; my $new_data=shift; my @nodenames=(); + open(FILE, ">>/var/log/mycode.log") or dir ("cannot open the file\n"); + ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time); + printf FILE "\n-----------%2d-%02d-%04d %02d:%02d:%02d-----------\n", $mon+1,$mday,$year+1900,$hour,$min,$sec; if ($action eq "a") { #nodes added in the cluster if ($new_data) { push(@nodenames, $new_data->{node}); $noderange=join(',', @nodenames); - open(FILE, ">>/var/log/mycode.log") or dir ("cannot open the file\n"); print (FILE "new nodes in the cluster are: $noderange\n"); - close(FILE); } } elsif ($action eq "d") { #nodes removed from the cluster @@ -39,11 +64,30 @@ sub processTableChanges { if (@nodenames > 0) { $noderange=join(',', @nodenames); - open(FILE, ">>/var/log/mycode.log") or dir ("cannot open the file\n"); print (FILE "nodes leaving the cluster are: $noderange\n"); - close(FILE); + } + } + } else { #update case, assuminmg monitoring nodelist.status + $newstatus; + if ($new_data) { + $newstatus=$new_data->{status}; + } + if ($old_data->[0]) { + $colnames=$old_data->[0]; + my $m; + my $k; + for ($i=0; $i<@$colnames; ++$i) { + if ($colnames->[$i] eq "node") {$m=$i} + if ($colnames->[$i] eq "status") {$k=$i; } + } + + for (my $j=1; $j<@$old_data; ++$j) { + print FILE "node=". $old_data->[$j]->[$m] . " ,"; + print FILE "old_status=". $old_data->[$j]->[$k] . " ,"; + print FILE "new_status=$newstatus\n"; } } } + close(FILE); return 0; }