mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
-Split 'dictionary.jsp' into two files -> 'dictionary.jsp' and 'dictionary2.jsp' -- this is due to JSP file constraints as the localization object is getting quite long -Per change above, 'dictionary' object is now split into an additonal 'dictionary2' object, which is merged with the main dict object on page load -All new dictionary mappings should be added to 'dictionary2' now. Signed-off-by: Brian Federle <brian.federle@citrix.com>
384 lines
21 KiB
JavaScript
384 lines
21 KiB
JavaScript
// Licensed to the Apache Software Foundation (ASF) under one
|
|
// or more contributor license agreements. See the NOTICE file
|
|
// distributed with this work for additional information
|
|
// regarding copyright ownership. The ASF licenses this file
|
|
// to you under the Apache License, Version 2.0 (the
|
|
// "License"); you may not use this file except in compliance
|
|
// with the License. You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing,
|
|
// software distributed under the License is distributed on an
|
|
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
// KIND, either express or implied. See the License for the
|
|
// specific language governing permissions and limitations
|
|
// under the License.
|
|
|
|
(function($, cloudStack) {
|
|
|
|
cloudStack.uiCustom.healthCheck = function(args) {
|
|
|
|
// Place outer args here as local variables
|
|
// i.e, -- var dataProvider = args.dataProvider
|
|
|
|
return function(args) {
|
|
if (args.context.multiRules == undefined) { //LB rule is not created yet
|
|
cloudStack.dialog.notice({
|
|
message: _l('Health Check can only be configured on a created LB rule')
|
|
});
|
|
return;
|
|
}
|
|
|
|
var formData = args.formData;
|
|
var forms = $.extend(true, {}, args.forms);
|
|
var topFieldForm, bottomFieldForm, $topFieldForm, $bottomFieldForm;
|
|
var topfields = forms.topFields;
|
|
|
|
var $healthCheckDesc = $('<div>Your load balancer will automatically perform health checks on your cloudstack instances and only route traffic to instances that pass the health check </div>').addClass('health-check-description');
|
|
var $healthCheckConfigTitle = $('<div><br><br>Configuration Options :</div>').addClass('health-check-config-title');
|
|
var $healthCheckAdvancedTitle = $('<div><br><br> Advanced Options : </div>').addClass('health-check-advanced-title');
|
|
|
|
var $healthCheckDialog = $('<div>').addClass('health-check');
|
|
$healthCheckDialog.append($healthCheckDesc);
|
|
$healthCheckDialog.append($healthCheckConfigTitle);
|
|
var $loadingOnDialog = $('<div>').addClass('loading-overlay');
|
|
|
|
var policyObj = null;
|
|
var pingpath1 = '/';
|
|
var responsetimeout1 = '2';
|
|
var healthinterval1 = '5';
|
|
var healthythreshold1 = '2';
|
|
var unhealthythreshold1 = '1';
|
|
|
|
$.ajax({
|
|
url: createURL('listLBHealthCheckPolicies'),
|
|
data: {
|
|
lbruleid: args.context.multiRules[0].id
|
|
},
|
|
async: false,
|
|
success: function(json) {
|
|
if (json.listlbhealthcheckpoliciesresponse.healthcheckpolicies[0].healthcheckpolicy[0] != undefined) {
|
|
policyObj = json.listlbhealthcheckpoliciesresponse.healthcheckpolicies[0].healthcheckpolicy[0];
|
|
pingpath1 = policyObj.pingpath; //API bug: API doesn't return it
|
|
responsetimeout1 = policyObj.responsetime;
|
|
healthinterval1 = policyObj.healthcheckinterval;
|
|
healthythreshold1 = policyObj.healthcheckthresshold;
|
|
unhealthythreshold1 = policyObj.unhealthcheckthresshold;
|
|
}
|
|
}
|
|
});
|
|
|
|
topFieldForm = cloudStack.dialog.createForm({
|
|
context: args.context,
|
|
noDialog: true, // Don't render a dialog, just return $formContainer
|
|
form: {
|
|
title: '',
|
|
fields: {
|
|
pingpath: {
|
|
label: 'label.ping.path',
|
|
validation: {
|
|
required: false
|
|
},
|
|
defaultValue: pingpath1
|
|
}
|
|
}
|
|
}
|
|
});
|
|
|
|
$topFieldForm = topFieldForm.$formContainer;
|
|
$topFieldForm.appendTo($healthCheckDialog);
|
|
|
|
$healthCheckDialog.append($healthCheckAdvancedTitle);
|
|
|
|
bottomFieldForm = cloudStack.dialog.createForm({
|
|
context: args.context,
|
|
noDialog: true,
|
|
form: {
|
|
title: '',
|
|
fields: {
|
|
responsetimeout: {
|
|
label: 'label.response.timeout.in.sec',
|
|
validation: {
|
|
required: false
|
|
},
|
|
defaultValue: responsetimeout1
|
|
},
|
|
healthinterval: {
|
|
label: 'label.health.check.interval.in.sec',
|
|
validation: {
|
|
required: false
|
|
},
|
|
defaultValue: healthinterval1
|
|
},
|
|
healthythreshold: {
|
|
label: 'label.healthy.threshold',
|
|
validation: {
|
|
required: false
|
|
},
|
|
defaultValue: healthythreshold1
|
|
},
|
|
unhealthythreshold: {
|
|
label: 'label.unhealthy.threshold',
|
|
validation: {
|
|
required: false
|
|
},
|
|
defaultValue: unhealthythreshold1
|
|
}
|
|
}
|
|
}
|
|
});
|
|
|
|
$bottomFieldForm = bottomFieldForm.$formContainer;
|
|
$bottomFieldForm.appendTo($healthCheckDialog);
|
|
|
|
|
|
var buttons = [{
|
|
text: _l('label.cancel'),
|
|
'class': 'cancel',
|
|
click: function() {
|
|
$healthCheckDialog.dialog('destroy');
|
|
$('.overlay').remove();
|
|
}
|
|
}];
|
|
|
|
if (policyObj == null) { //policy is not created yet
|
|
buttons.push({
|
|
text: _l('Create'),
|
|
'class': 'ok',
|
|
click: function() {
|
|
$loadingOnDialog.appendTo($healthCheckDialog);
|
|
var formData = cloudStack.serializeForm($healthCheckDialog.find('form'));
|
|
var data = {
|
|
lbruleid: args.context.multiRules[0].id,
|
|
pingpath: formData.pingpath,
|
|
responsetimeout: formData.responsetimeout,
|
|
intervaltime: formData.healthinterval,
|
|
healthythreshold: formData.healthythreshold,
|
|
unhealthythreshold: formData.unhealthythreshold
|
|
};
|
|
|
|
$.ajax({
|
|
url: createURL('createLBHealthCheckPolicy'),
|
|
data: data,
|
|
success: function(json) {
|
|
var jobId = json.createlbhealthcheckpolicyresponse.jobid;
|
|
var createLBHealthCheckPolicyIntervalId = setInterval(function() {
|
|
$.ajax({
|
|
url: createURL('queryAsyncJobResult'),
|
|
data: {
|
|
jobid: jobId
|
|
},
|
|
success: function(json) {
|
|
var result = json.queryasyncjobresultresponse;
|
|
if (result.jobstatus == 0) {
|
|
return; //Job has not completed
|
|
} else {
|
|
clearInterval(createLBHealthCheckPolicyIntervalId);
|
|
|
|
if (result.jobstatus == 1) {
|
|
cloudStack.dialog.notice({
|
|
message: _l('Health Check Policy has been created')
|
|
});
|
|
$loadingOnDialog.remove();
|
|
$healthCheckDialog.dialog('destroy');
|
|
$('.overlay').remove();
|
|
} else if (result.jobstatus == 2) {
|
|
cloudStack.dialog.notice({
|
|
message: _s(result.jobresult.errortext)
|
|
});
|
|
$loadingOnDialog.remove();
|
|
$healthCheckDialog.dialog('destroy');
|
|
$('.overlay').remove();
|
|
}
|
|
}
|
|
}
|
|
});
|
|
}, g_queryAsyncJobResultInterval);
|
|
},
|
|
|
|
error: function(json) {
|
|
|
|
cloudStack.dialog.notice({
|
|
message: _s(json.responseText)
|
|
}); //Error message in the API needs to be improved
|
|
$healthCheckDialog.dialog('close');
|
|
$('.overlay').remove();
|
|
}
|
|
|
|
});
|
|
}
|
|
});
|
|
} else { //policy exists already
|
|
buttons.push(
|
|
//Update Button (begin) - call delete API first, then create API
|
|
{
|
|
text: _l('Update'),
|
|
'class': 'ok',
|
|
click: function() {
|
|
$loadingOnDialog.appendTo($healthCheckDialog);
|
|
|
|
$.ajax({
|
|
url: createURL('deleteLBHealthCheckPolicy'),
|
|
data: {
|
|
id: policyObj.id
|
|
},
|
|
success: function(json) {
|
|
var jobId = json.deletelbhealthcheckpolicyresponse.jobid;
|
|
var deleteLBHealthCheckPolicyIntervalId = setInterval(function() {
|
|
$.ajax({
|
|
url: createURL('queryAsyncJobResult'),
|
|
data: {
|
|
jobid: jobId
|
|
},
|
|
success: function(json) {
|
|
var result = json.queryasyncjobresultresponse;
|
|
if (result.jobstatus == 0) {
|
|
return; //Job has not completed
|
|
} else {
|
|
clearInterval(deleteLBHealthCheckPolicyIntervalId);
|
|
|
|
if (result.jobstatus == 1) {
|
|
var formData = cloudStack.serializeForm($healthCheckDialog.find('form'));
|
|
var data = {
|
|
lbruleid: args.context.multiRules[0].id,
|
|
pingpath: formData.pingpath,
|
|
responsetimeout: formData.responsetimeout,
|
|
intervaltime: formData.healthinterval,
|
|
healthythreshold: formData.healthythreshold,
|
|
unhealthythreshold: formData.unhealthythreshold
|
|
};
|
|
|
|
$.ajax({
|
|
url: createURL('createLBHealthCheckPolicy'),
|
|
data: data,
|
|
success: function(json) {
|
|
var jobId = json.createlbhealthcheckpolicyresponse.jobid;
|
|
var createLBHealthCheckPolicyIntervalId = setInterval(function() {
|
|
$.ajax({
|
|
url: createURL('queryAsyncJobResult'),
|
|
data: {
|
|
jobid: jobId
|
|
},
|
|
success: function(json) {
|
|
var result = json.queryasyncjobresultresponse;
|
|
if (result.jobstatus == 0) {
|
|
return; //Job has not completed
|
|
} else {
|
|
clearInterval(createLBHealthCheckPolicyIntervalId);
|
|
|
|
if (result.jobstatus == 1) {
|
|
cloudStack.dialog.notice({
|
|
message: _l('Health Check Policy has been updated')
|
|
});
|
|
$loadingOnDialog.remove();
|
|
$healthCheckDialog.dialog('destroy');
|
|
$('.overlay').remove();
|
|
} else if (result.jobstatus == 2) {
|
|
cloudStack.dialog.notice({
|
|
message: _s(result.jobresult.errortext)
|
|
});
|
|
$loadingOnDialog.remove();
|
|
$healthCheckDialog.dialog('destroy');
|
|
$('.overlay').remove();
|
|
}
|
|
}
|
|
}
|
|
});
|
|
}, g_queryAsyncJobResultInterval);
|
|
}
|
|
});
|
|
} else if (result.jobstatus == 2) {
|
|
cloudStack.dialog.notice({
|
|
message: _s(result.jobresult.errortext)
|
|
});
|
|
$loadingOnDialog.remove();
|
|
$healthCheckDialog.dialog('destroy');
|
|
$('.overlay').remove();
|
|
}
|
|
}
|
|
}
|
|
});
|
|
}, g_queryAsyncJobResultInterval);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
//Update Button (end)
|
|
,
|
|
//Delete Button (begin) - call delete API
|
|
{
|
|
text: _l('Delete'),
|
|
'class': 'delete',
|
|
click: function() {
|
|
$loadingOnDialog.appendTo($healthCheckDialog);
|
|
|
|
$.ajax({
|
|
url: createURL('deleteLBHealthCheckPolicy'),
|
|
data: {
|
|
id: policyObj.id
|
|
},
|
|
success: function(json) {
|
|
var jobId = json.deletelbhealthcheckpolicyresponse.jobid;
|
|
var deleteLBHealthCheckPolicyIntervalId = setInterval(function() {
|
|
$.ajax({
|
|
url: createURL('queryAsyncJobResult'),
|
|
data: {
|
|
jobid: jobId
|
|
},
|
|
success: function(json) {
|
|
var result = json.queryasyncjobresultresponse;
|
|
if (result.jobstatus == 0) {
|
|
return; //Job has not completed
|
|
} else {
|
|
clearInterval(deleteLBHealthCheckPolicyIntervalId);
|
|
|
|
if (result.jobstatus == 1) {
|
|
cloudStack.dialog.notice({
|
|
message: _l('Health Check Policy has been deleted')
|
|
});
|
|
$loadingOnDialog.remove();
|
|
$healthCheckDialog.dialog('destroy');
|
|
$('.overlay').remove();
|
|
} else if (result.jobstatus == 2) {
|
|
cloudStack.dialog.notice({
|
|
message: _s(result.jobresult.errortext)
|
|
});
|
|
$loadingOnDialog.remove();
|
|
$healthCheckDialog.dialog('destroy');
|
|
$('.overlay').remove();
|
|
}
|
|
}
|
|
}
|
|
});
|
|
}, g_queryAsyncJobResultInterval);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
//Delete Button (end)
|
|
);
|
|
}
|
|
|
|
$healthCheckDialog.dialog({
|
|
title: 'Health Check Wizard',
|
|
width: 600,
|
|
height: 600,
|
|
draggable: true,
|
|
closeonEscape: false,
|
|
overflow: 'auto',
|
|
open: function() {
|
|
$("button").each(function() {
|
|
$(this).attr("style", "left: 400px; position: relative; margin-right: 5px; ");
|
|
});
|
|
|
|
$('.ui-dialog .delete').css('left', '140px');
|
|
|
|
},
|
|
buttons: buttons
|
|
}).closest('.ui-dialog').overlay();
|
|
|
|
}
|
|
}
|
|
}(jQuery, cloudStack));
|