diff --git a/xCAT-UI/js/monitor/gangliamon.js b/xCAT-UI/js/monitor/gangliamon.js
new file mode 100644
index 000000000..734743287
--- /dev/null
+++ b/xCAT-UI/js/monitor/gangliamon.js
@@ -0,0 +1,116 @@
+function loadGangliaMon(){
+ var gangMonTab = $('#gangliamon');
+ var gangMonStatus = createStatusBar('gangMonStatus');
+ gangMonTab.append(gangMonStatus);
+
+ gangMonTab.append("
");
+ $('#gangMonConfig').hide();
+ addCfgButton();
+
+ gangMonTab.append("");
+ $('#gangLink').hide();
+ addGangLink();
+
+ $.ajax( {
+ url : 'lib/systemcmd.php',
+ dataType : 'json',
+ data : {
+ cmd : 'rpm -q rrdtool ganglia-gmetad ganglia-gmond ganglia-web'
+ },
+
+ success : gangRpmCheck
+ });
+}
+
+function addCfgButton(){
+ var startButton = createButton('Start');
+ $('#gangMonConfig').append(startButton);
+ startButton.bind('click', function(){
+ $.ajax({
+ url : 'lib/cmd.php',
+ dataType : 'json',
+ data : {
+ cmd : 'webrun',
+ tgt : '',
+ args : 'gangliaStart',
+ msg : ''
+ },
+
+ success : function(data){
+ $('#rmcMonStatus').empty().append(data.rsp[0]);
+ $('#gangLink').show();
+ }
+ });
+ });
+ $('#gangMonConfig').append(startButton);
+
+ var stopButton = createButton('Stop');
+ $('#gangMonConfig').append(startButton);
+ stopButton.bind('click', function(){
+ $.ajax({
+ url : 'lib/cmd.php',
+ dataType : 'json',
+ data : {
+ cmd : 'rmcstop',
+ tgt : '',
+ args : 'gangliamon,-r',
+ msg : ''
+ },
+
+ success : function(data){
+ $('#rmcMonStatus').empty().append(data.rsp[0]);
+ $('#gangLink').hide();
+ }
+ });
+ });
+ $('#gangMonConfig').append(stopButton);
+}
+
+function addGangLink(){
+ $('#gangLink').append('The Ganglia is running now.
');
+ $('#gangLink').append('please click here to open the Ganglia\'s main page');
+ $('#gangLink a').click(function(){
+ window.open('../ganglia/');
+ });
+}
+function gangRpmCheck(data){
+ var rpmStatus = data.rsp.split(/\n/);
+ var stopFlag = false;
+ var showString = "";
+ var tempArray = ["rrdtool", "ganglia-gmetad", "ganglia-gmond", "ganglia-web"];
+
+ for (var temp in rpmStatus){
+ if(-1 != rpmStatus[temp].indexOf("not")){
+ stopFlag = true;
+ showString += "Please install " + tempArray[temp] + ".
";
+ }
+ }
+
+ if (stopFlag){
+ showString += "References: xCAT2-Monitoring.pdf.
";
+ $('#gangMonStatus').empty().append(showString);
+ return;
+ }
+
+ $('#gangMonConfig').show();
+
+ $.ajax({
+ url : 'lib/cmd.php',
+ dataType : 'json',
+ data : {
+ cmd : 'monls',
+ tgt : '',
+ args : 'gangliamon',
+ msg : ''
+ },
+
+ success : function(data){
+ if (-1 != data.rsp[0].indexOf("not-monitored")){
+ $('#gangMonStatus').empty().append("Please start the Ganglia Monitoring first.");
+ return;
+ }
+
+ $('#gangLink').show();
+ }
+ });
+}
\ No newline at end of file
diff --git a/xCAT-UI/js/monitor/monitor.js b/xCAT-UI/js/monitor/monitor.js
index 8b7186001..ee0a5e403 100644
--- a/xCAT-UI/js/monitor/monitor.js
+++ b/xCAT-UI/js/monitor/monitor.js
@@ -70,7 +70,8 @@ function loadMonitorPage() {
"subsystem is our recommended software for monitoring xCAT clusters. It's is part " +
"of the IBM's Reliable Scalable Cluster Technology (RSCT) that provides a comprehensive " +
"clustering environment for AIX and LINUX.";
- items += "Ganglia Monitor : ";
+ items += "Ganglia Monitor : Ganglia is a scalable distributed " +
+ "monitoring system for high-performance computing systems such as clusters and Grids.";
items += "PCP Monitor : ";
monitorList.append(items);
@@ -175,7 +176,8 @@ function loadMonitorTab(monitorName){
loadRmcMon();
break;
case 'gangliamon':
- loadUnfinish(monitorName, tab);
+ tab.add(monitorName, 'Ganglia Monitor', '', true);
+ loadGangliaMon();
break;
case 'pcpmon':
loadUnfinish(monitorName, tab);
@@ -189,5 +191,5 @@ function loadUnfinish(monitorName, tab){
var unfinishPage = $('');
unfinishPage.append(createInfoBar('under construction.'));
- tab.add(monitorName, 'unfinish', unfinishPage, '', true);
+ tab.add(monitorName, 'unfinish', unfinishPage, true);
}
\ No newline at end of file
diff --git a/xCAT-UI/js/ui.js b/xCAT-UI/js/ui.js
index 3cb6bc6a1..6a79983f2 100644
--- a/xCAT-UI/js/ui.js
+++ b/xCAT-UI/js/ui.js
@@ -446,7 +446,7 @@ function initPage() {
} else if (page == 'monitor.php') {
includeJs("js/monitor/xcatmon.js");
includeJs("js/monitor/rmcmon.js");
-
+ includeJs("js/monitor/gangliamon.js");
headers.eq(3).css('background-color', '#A9D0F5');
loadMonitorPage();
} else {
diff --git a/xCAT-server/lib/xcat/plugins/web.pm b/xCAT-server/lib/xcat/plugins/web.pm
index 29e356a46..6c289a148 100644
--- a/xCAT-server/lib/xcat/plugins/web.pm
+++ b/xCAT-server/lib/xcat/plugins/web.pm
@@ -52,6 +52,7 @@ sub process_request
'unlock' => \&web_unlock,
'rmcstart' => \&web_rmcmonStart,
'rmcshow' => \&web_rmcmonShow,
+ 'gangliaStart' => \&web_gangliamonStart,
#'xdsh' => \&web_xdsh,
#THIS list needs to be updated
@@ -433,7 +434,7 @@ sub web_rmcmonStart{
$callback->({info=>'RMC Monitoring is running now.'});
return;
}
- }
+ }
$retData .= "RMC is not running, start it now.\n";
@@ -631,4 +632,43 @@ sub web_rmcmonShow(){
#push the last attribute name and values.
push(@{$retHash->{node}}, {name=>$attrName, data=>join(',', @attrValue)});
$callback->($retHash);
+}
+
+sub web_gangliamonStart(){
+ my ( $request, $callback, $sub_req ) = @_;
+ my $table;
+ my $retInfo;
+ my $output;
+
+ #check the running status
+ $table = xCAT::Table->new('monitoring');
+ my $gangWorkingStatus = $table->getAttribs({name => 'gangliamon'}, 'disable');
+ $table.close();
+
+ #the rmc monitoring is running so return directly
+ if($gangWorkingStatus){
+ if ($gangWorkingStatus->{disable} =~ /0|No|no|NO|N|n/){
+ $callback->({info=>'Ganglia Monitoring is running now.'});
+ return;
+ }
+ }
+
+ #run configure commands
+ $output = xCAT::Utils->runcmd('monadd gangliamon', -1, 1);
+ foreach($output){
+ $retInfo .= ($_ . "\n");
+ }
+
+ $output = xCAT::Utils->runcmd('moncfg gangliamon -r', -1, 1);
+ foreach($output){
+ $retInfo .= ($_ . "\n");
+ }
+
+ $output = xCAT::Utils->runcmd('monstart gangliamon -r', -1, 1);
+ foreach($output){
+ $retInfo .= ($_ . "\n");
+ }
+
+ $callback->({info=>$retInfo});
+ return;
}
\ No newline at end of file