$().ready(function(){
$("#board_info_file").change(function () {
var fileObj = $(this)[0].files[0];
if (typeof (fileObj) == "undefined" || fileObj.size <= 0) {
alert("Upload error.");
return;
}
var file_name = $(this).val();
var formFile = new FormData();
formFile.append("name", file_name);
formFile.append("file", fileObj);
$.ajax({
url: "../upload_board_info",
data: formFile,
type: "Post",
dataType: "json",
cache: false,
processData: false,
contentType: false,
success: function (result) {
console.log(result);
if (result.status == 'success') {
if (result.info != 'updated') {
alert('Upload successfully.\nA new board type: '+result.info+' created.');
} else {
alert('Upload successfully.');
}
} else {
alert(result.status);
}
window.location = 'http://'+ window.location.host+"/scenario";
},
error: function(e){
console.log(e.status);
console.log(e.responseText);
alert(e.status+'\n'+e.responseText);
}
})
});
$("#scenario_file").change(function () {
var fileObj = $(this)[0].files[0];
if (typeof (fileObj) == "undefined" || fileObj.size <= 0) {
alert("Upload error.");
return;
}
var file_name = $(this).val();
var formFile = new FormData();
formFile.append("name", file_name);
formFile.append("file", fileObj);
$.ajax({
url: "../upload_scenario",
data: formFile,
type: "Post",
dataType: "json",
cache: false,
processData: false,
contentType: false,
success: function (result) {
console.log(result);
status = result.status;
if (status!='success') {
alert(status);
return;
}
error_list = result.error_list;
file_name = result.file_name;
rename = result.rename
if(result.rename==true) {
alert('Scenario setting existed, import successfully with a new name: '+file_name);
} else {
alert('Scenario setting import successfully with name: '+file_name);
}
window.location = 'http://'
+ window.location.host+"/scenario/" + file_name;
},
error: function(e){
console.log(e.status);
console.log(e.responseText);
alert(e.status+'\n'+e.responseText);
}
})
});
$("#launch_file").change(function () {
var fileObj = $(this)[0].files[0];
if (typeof (fileObj) == "undefined" || fileObj.size <= 0) {
alert("Upload error.");
return;
}
var file_name = $(this).val();
var formFile = new FormData();
formFile.append("name", file_name);
formFile.append("file", fileObj);
$.ajax({
url: "../upload_launch",
data: formFile,
type: "Post",
dataType: "json",
cache: false,
processData: false,
contentType: false,
success: function (result) {
console.log(result);
status = result.status;
if (status!='success') {
alert(status);
return;
}
error_list = result.error_list;
file_name = result.file_name;
rename = result.rename
if(result.rename==true) {
alert('Launch setting existed, import successfully with a new name: '+file_name);
} else {
alert('Launch setting import successfully with name: '+file_name);
}
window.location = 'http://'
+ window.location.host+"/launch/" + file_name;
},
error: function(e){
console.log(e.status);
console.log(e.responseText);
alert(e.status+'\n'+e.responseText);
}
})
});
$("select#board_info").change(function(){
data = {board_info: $(this).val()};
$.ajax({
type : "POST",
contentType: "application/json;charset=UTF-8",
url : "../select_board",
data : JSON.stringify(data),
success : function(result) {
console.log(result);
window.location = 'http://'+ window.location.host+"/scenario";
},
error : function(e){
console.log(e.status);
console.log(e.responseText);
}
});
});
$("input").on('blur',function(){
$(this).parents(".form-group").removeClass("has-error");
$(this).parents(".form-group").children("p").text("");
});
$("select").on('changed.bs.select',function(){
$(this).parents(".form-group").removeClass("has-error");
$(this).parents(".form-group").children("p").text("");
})
$('#save_board').on('click', function() {
save_board();
});
$('#save_scenario').on('click', function() {
var name = $(this).data('id');
if(name=="generate_config_src") {
save_scenario(name);
}
else {
save_scenario();
}
});
$('#remove_scenario').on('click', function() {
old_scenario_name = $("#old_scenario_name").text();
var board_info = $("select#board_info").val();
if (board_info==null || board_info=='') {
alert("Please select one board info before this operation.");
return;
}
scenario_config = {
old_setting_name: $("#old_scenario_name").text(),
new_setting_name: $("#new_scenario_name").val()
}
$.ajax({
type : "POST",
contentType: "application/json;charset=UTF-8",
url : "../remove_setting",
data : JSON.stringify(scenario_config),
success : function(result) {
console.log(result);
status = result.status
info = result.info
if (status == 'success') {
alert('Remove current scenario setting from acrn-config app successfully.');
window.location = window.location = 'http://'
+ window.location.host+"/scenario";
} else {
alert('Remove current scenario setting from acrn-config app failed:\n'+info);
}
},
error : function(e){
console.log(e.status);
console.log(e.responseText);
alert(e.status+'\n'+e.responseText);
}
});
});
$('#save_launch').on('click', function() {
var name = $(this).data('id');
if(name=="generate_launch_script") {
save_launch(name);
}
else {
save_launch();
}
});
$('#remove_launch').on('click', function() {
old_launch_name = $("#old_launch_name").text();
var board_info = $("select#board_info").val();
if (board_info==null || board_info=='') {
alert("Please select one board before this operation.");
return;
}
launch_config = {
old_setting_name: $("#old_launch_name").text(),
new_setting_name: $("#new_launch_name").val(),
}
$.ajax({
type : "POST",
contentType: "application/json;charset=UTF-8",
url : "../remove_setting",
data : JSON.stringify(launch_config),
success : function(result) {
console.log(result);
status = result.status
info = result.info
if (status == 'success') {
alert('Remove current launch setting from acrn-config app successfully.');
window.location = window.location = 'http://'
+ window.location.host+"/launch";
} else {
alert('Remove current launch setting from acrn-config app failed:\n'+info);
}
},
error : function(e){
console.log(e.status);
console.log(e.responseText);
alert(e.status+'\n'+e.responseText);
}
});
});
$('#export_scenario_xml').on('click', function() {
var dataId = $(this).data('id');
$("#save_scenario").data('id', dataId);
$('#src_path_row').addClass('hidden');
});
$('#generate_config_src').on('click', function() {
var dataId = $(this).data('id');
$("#save_scenario").data('id', dataId);
$('#src_path_row').removeClass('hidden');
});
$('#export_launch_xml').on('click', function() {
var dataId = $(this).data('id');
$("#save_launch").data('id', dataId);
$('#src_path_row').addClass('hidden');
});
$('#generate_launch_script').on('click', function() {
var dataId = $(this).data('id');
$("#save_launch").data('id', dataId);
$('#src_path_row').removeClass('hidden');
});
$('a.create_menu').on('click', function() {
var type = $(this).data('id');
$("#createModalLabel").text("Create a new " + type + " setting");
var date = new Date();
$("#create_name").val(date.getTime());
$("#create_btn").data('id', type);
});
$('#create_btn').on('click', function() {
var type = $(this).data('id');
var create_name = $("#create_name").val();
create_setting(type, create_name, create_name, 'create');
});
$(document).on('change', "select#load_scenario_name", function() {
$('input#load_scenario_name2').val(this.value);
});
$(document).on('change', "select#load_launch_name", function() {
$('input#load_launch_name2').val(this.value);
});
$('#load_scenario_btn').on('click', function() {
var type = $(this).data('id');
var default_load_name = $("#load_scenario_name").val();
var load_name = $("#load_scenario_name2").val();
create_setting(type, default_load_name, load_name, 'load')
});
$('#load_launch_btn').on('click', function() {
var type = $(this).data('id');
var default_load_name = $("#load_launch_name").val();
var load_name = $("#load_launch_name2").val();
create_setting(type, default_load_name, load_name, 'load')
});
$(document).on('click', "#add_vm", function() {
var curr_vm_id = $(this).data('id');
$("#add_vm_submit").data('id', curr_vm_id);
});
$(document).on('click', "#add_vm_submit", function() {
var curr_vm_id = $(this).data('id');
save_scenario('add_vm:'+curr_vm_id)
});
$(document).on('click', "#remove_vm", function() {
var remove_confirm_message = 'Do you want to delete this VM?'
if(confirm(remove_confirm_message)) {
var curr_vm_id = $(this).data('id');
save_scenario('remove_vm:'+curr_vm_id)
}
});
$(document).on('click', "#add_launch_vm", function() {
var curr_vm_id = $(this).data('id');
$("#add_launch_submit").data('id', curr_vm_id);
});
$(document).on('click', "#add_launch_submit", function() {
var curr_vm_id = $(this).data('id');
save_launch('add_vm:'+curr_vm_id);
});
$('#add_launch_script').on('click', function() {
var curr_vm_id = $(this).data('id');
$("#add_launch_submit").data('id', curr_vm_id);
});
$(document).on('click', "#remove_launch_vm", function() {
var remove_confirm_message = 'Do you want to delete this VM?'
if(confirm(remove_confirm_message)) {
var curr_vm_id = $(this).data('id');
save_launch('remove_vm:'+curr_vm_id)
}
});
$(document).on('change', "select#scenario_name", function() {
data = {scenario_name: $(this).val(),
launch_name: $('text#old_launch_name').text()};
$.ajax({
type : "POST",
contentType: "application/json;charset=UTF-8",
url : "../get_post_launch_vms",
data : JSON.stringify(data),
success : function(result) {
console.log(result);
vm_list = result.vm_list
$('select#add_launch_type').empty().selectpicker('refresh');
for(i in vm_list) {
var option = vm_list[i][1]+' ( ID : '+vm_list[i][0]+' )'
$('select#add_launch_type').append(
'').selectpicker('refresh');
}
},
error : function(e){
console.log(e.status);
console.log(e.responseText);
}
});
});
$("select[ID$='vuart:id=1,base']").change(function(){
var id = $(this).attr('id');
var value = $(this).val();
show_com_target(id, value);
});
$("select[ID$='vuart:id=1,base']").each(function(index, item) {
var id = $(item).attr('id');
var value = $(item).val();
show_com_target(id, value);
});
$(document).on('change', "select[ID*='communication_vuart'][ID$='base']", function() {
var id = $(this).attr('id');
var value = $(this).val();
show_com_target(id, value);
});
$("select[ID*='communication_vuart'][ID$='base']").each(function(index, item) {
var id = $(item).attr('id');
var value = $(item).val();
show_com_target(id, value);
});
$(document).on('change', "select[ID$='vuart:id=0,base']", function() {
var id = $(this).attr('id');
var value = $(this).val();
if(value == 'COM1_BASE') {
id = id.replace('legacy_vuart', 'console_vuart');
id = escape_str(id);
$('#'+id).val('INVALID_PCI_BASE').trigger('change');
} else if(value == 'PCI_VUART') {
id = id.replace('console_vuart', 'legacy_vuart');
id = escape_str(id);
$('#'+id).val('INVALID_COM_BASE').trigger('change');
}
});
$(document).on('change', "select[ID$='vuart:id=1,base']", function() {
var id = $(this).attr('id');
var value = $(this).val();
if(value == 'COM2_BASE') {
id = id.replace('legacy_vuart', 'communication_vuart');
id = escape_str(id);
$('#'+id).val('INVALID_PCI_BASE').trigger('change');
} else if(value == 'PCI_VUART') {
id = id.replace('communication_vuart', 'legacy_vuart');
id = escape_str(id);
$('#'+id).val('INVALID_COM_BASE').trigger('change');
}
});
$(document).on('change', "select[ID^='uos'][ID$='vuart0']", function() {
var id = $(this).attr('id');
var value = $(this).val();
if(value == 'Enable') {
id = id.replace('vuart0', 'console_vuart');
id = escape_str(id);
$('#'+id).val('Disable').trigger('change');
}
});
$(document).on('change', "select[ID^='uos'][ID$='console_vuart']", function() {
var id = $(this).attr('id');
var value = $(this).val();
if(value == 'Enable') {
id = id.replace('console_vuart', 'vuart0');
id = escape_str(id);
$('#'+id).val('Disable').trigger('change');
}
});
$("select[ID$='FEATURES,RDT,CDP_ENABLED']").change(function(){
var id = $(this).attr('id');
var value = $(this).val();
update_vcpu_clos_option(id, value);
update_rdt_clos_mask(id, value);
});
$("select[ID$='FEATURES,RDT,CDP_ENABLED']").each(function(index, item) {
var id = $(this).attr('id');
var value = $(item).val();
update_vcpu_clos_option(id, value);
update_rdt_clos_mask(id, value);
});
$(document).on('click', "button:contains('+')", function() {
if($(this).text() != '+')
return;
var curr_item_id = $(this).attr('id');
var curr_id = curr_item_id.substr(curr_item_id.lastIndexOf('_')+1);
var config_item = $(this).parent().parent();
var config_item_added = config_item.clone();
var config_vm = config_item.parent();
var vcpu_index_list = [];
var vuart_index_list = [];
config_vm.children().each(function(){
if($(this).find("button:contains('+')").size() > 0) {
var btn_add_vm_id = $(this).find("button:contains('+')").attr('id');
if(btn_add_vm_id.indexOf('add_communication_vuart')>=0) {
vuart_index_list.push(parseInt(btn_add_vm_id.substr(btn_add_vm_id.lastIndexOf('_')+1)));
} else {
vcpu_index_list.push(parseInt(btn_add_vm_id.substr(btn_add_vm_id.lastIndexOf('_')+1)));
}
}
});
var id_added = -1;
if(curr_item_id.indexOf('add_communication_vuart')>=0) {
for (i=1; i<100; i++) {
if (!vuart_index_list.includes(i)) {
id_added = i;
break
}
}
} else {
for (i=0; i<100; i++) {
if (!vcpu_index_list.includes(i)) {
id_added = i;
break
}
}
}
var id_pre_added = curr_item_id.substr(0, curr_item_id.lastIndexOf('_'));
config_item_added.find("button:contains('+')").attr('id', id_pre_added+'_'+id_added);
config_item_added.find("button:contains('-')").attr('id', id_pre_added.replace('add_', 'remove_')+'_'+id_added);
var curr_err_id = config_item_added.find("p").attr('id');
config_item_added.find("p").attr('id', curr_err_id.replace(','+curr_id+'_', ','+id_added+'_'));
config_item_added.find("button:contains('-')").prop("disabled", false);
config_item_added.find('.bootstrap-select').replaceWith(function() { return $('select', this); });
config_item_added.find('.selectpicker').val('default').selectpicker('deselectAll');;
config_item_added.find('.selectpicker').selectpicker('render');
if(curr_item_id.indexOf('add_communication_vuart')>=0) {
var config_item_target_vm = config_item.next().clone();
var config_item_target_vuart = config_item.next().next().clone();
var curr_vuart_id = parseInt(curr_id);
config_item_added.find("label:first").text(config_item_added.find("label:first").html().replace(curr_vuart_id, id_added));
var orig_id_list = ['base_label1', 'base_label2', 'base', 'base_err',
'target_vm_id_label1', 'target_vm_id_label2', 'target_vm_id_config', 'target_vm_id', 'target_vm_id_err',
'target_uart_id_label1', 'target_uart_id_label2', 'target_uart_id_config', 'target_uart_id', 'target_uart_id_err']
for(var i = 0, len = 4; i < len; i++){
var orig_base_item = config_item_added.find('[id$='+orig_id_list[i]+']')
orig_base_item.attr('id', orig_base_item.attr('id').replace(curr_vuart_id+','+orig_id_list[i], id_added+','+orig_id_list[i]))
}
for(var i = 4, len = 9; i < len; i++){
var orig_target_vm_item = config_item_target_vm.find('[id$='+orig_id_list[i]+']')
orig_target_vm_item.attr('id', orig_target_vm_item.attr('id').replace(curr_vuart_id+','+orig_id_list[i], id_added+','+orig_id_list[i]))
}
for(var i = 9, len = orig_id_list.length; i < len; i++){
var orig_target_vuart_item = config_item_target_vuart.find('[id$='+orig_id_list[i]+']')
orig_target_vuart_item.attr('id', orig_target_vuart_item.attr('id').replace(curr_vuart_id+','+orig_id_list[i], id_added+','+orig_id_list[i]))
}
config_item_added.insertAfter(config_item.next().next());
config_item_target_vm.insertAfter(config_item_added);
config_item_target_vuart.insertAfter(config_item_target_vm);
} else {
config_item_added.find("label:first").text("");
config_item_added.insertAfter(config_item);
}
if(curr_item_id.indexOf('add_vcpu')>=0) {
var config_vm = config_item.parent();
var curr_vcpu_index = vcpu_index_list.indexOf(parseInt(curr_id))
var vcpu_clos_item = config_vm.find("label:contains('vcpu_clos')").first().parent();
while(curr_vcpu_index > 0) {
vcpu_clos_item = vcpu_clos_item.next();
curr_vcpu_index -= 1;
}
var vcpu_clos_item_added = vcpu_clos_item.clone();
vcpu_clos_item_added.find("label:first").text("");
vcpu_clos_item_added.find('.bootstrap-select').replaceWith(function() { return $('select', this); });
vcpu_clos_item_added.find('.selectpicker').val('default').selectpicker('deselectAll');;
vcpu_clos_item_added.find('.selectpicker').selectpicker('render');
vcpu_clos_item_added.insertAfter(vcpu_clos_item);
}
});
$(document).on('click', "button:contains('-')", function() {
if($(this).text() != '-')
return;
var config_item = $(this).parent().parent();
var curr_item_id = $(this).attr('id');
if(curr_item_id.indexOf('remove_vcpu')>=0) {
var config_vm = config_item.parent();
var vcpu_index_list = [];
config_vm.children().each(function(){
if($(this).find("button:contains('+')").size() > 0) {
var btn_del_vm_id = $(this).find("button:contains('+')").attr('id');
vcpu_index_list.push(parseInt(btn_del_vm_id.substr(btn_del_vm_id.lastIndexOf('_')+1)));
}
});
var curr_item_id = $(this).attr('id');
var curr_id = parseInt(curr_item_id.substr(curr_item_id.lastIndexOf('_')+1));
curr_vcpu_index = vcpu_index_list.indexOf(curr_id);
var vcpu_clos_item = config_vm.find("label:contains('vcpu_clos')").first().parent();
while(curr_vcpu_index > 0) {
vcpu_clos_item = vcpu_clos_item.next();
curr_vcpu_index -= 1;
}
vcpu_clos_item.remove();
}
else if(curr_item_id.indexOf('remove_communication_vuart')>=0) {
config_item.next().next().remove();
config_item.next().remove();
}
config_item.remove();
});
$('#remove_vm_kata').on('click', function() {
if(confirm("Do you want to remove the VM?")) {
save_scenario("remove_vm_kata");
}
});
$('#add_vm_kata').on('click', function() {
if(confirm("Do you want to add the Kata VM based on generic config?")) {
save_scenario("add_vm_kata");
}
});
})
$(window).load(function () {
$("select#scenario_name").change();
});
function escape_str(str) {
var jquerySpecialChars = ["~", "`", "@", "#", "%", "&", "=", "'", "\"",
":", ";", "<", ">", ",", "/"];
for (var i = 0; i < jquerySpecialChars.length; i++) {
str = str.replace(new RegExp(jquerySpecialChars[i],
"g"), "\\" + jquerySpecialChars[i]);
}
return str;
}
function show_com_target(id, value) {
if(id==null || id=='undefined') {
return
}
var id2 = id.replace('base', 'target_vm_id');
var id3 = id.replace('base', 'target_uart_id');
id2 = escape_str(id2);
id3 = escape_str(id3);
if (value == 'INVALID_COM_BASE') {
$('#'+id2+'_label1').hide();
$('#'+id2+'_label2').hide();
$('#'+id2+'_config').hide();
$('#'+id2+'_err').hide();
}
else if(value == 'INVALID_PCI_BASE') {
$('#'+id2+'_label1').hide();
$('#'+id2+'_label2').hide();
$('#'+id2+'_config').hide();
$('#'+id2+'_err').hide();
$('#'+id3+'_label1').hide();
$('#'+id3+'_label2').hide();
$('#'+id3+'_config').hide();
$('#'+id3+'_err').hide();
}
else if(value == 'PCI_VUART') {
$('#'+id2+'_label1').show();
$('#'+id2+'_label2').show();
$('#'+id2+'_config').show();
$('#'+id2+'_err').show();
$('#'+id3+'_label1').show();
$('#'+id3+'_label2').show();
$('#'+id3+'_config').show();
$('#'+id3+'_err').show();
}
else {
$('#'+id2+'_label1').show();
$('#'+id2+'_label2').show();
$('#'+id2+'_config').show();
$('#'+id2+'_err').show();
}
}
function update_vcpu_clos_option(id, value) {
if(value == 'y') {
$("select[ID$='clos,vcpu_clos']").each(function(){
len = $(this).find('option').length;
option = $(this).find('option').first();
for(i=0; i(len-1)/2){
option.attr('disabled','disabled');
}
option = option.next();
}
$(this).selectpicker('render');
});
} else {
$("select[ID$='clos,vcpu_clos']").each(function(){
len = $(this).find('option').length;
option = $(this).find('option').first();
for(i=0; i(len-1)/2){
option.removeAttr('disabled');
}
option = option.next();
}
$(this).selectpicker('render');
});
}
}
function update_rdt_clos_mask(id, value) {
$.ajax({
type : "POST",
contentType: "application/json;charset=UTF-8",
url : "../get_num_of_rdt_res_entries",
data : JSON.stringify({'cdp_enabled': value}),
success : function(result) {
console.log(result);
num_clos_mask = result.num_clos_mask;
num_mba_delay = result.num_mba_delay;
clos_mask_entries = [null];
index = 0;
$("input[ID$='hv,FEATURES,RDT,CLOS_MASK']").each(function(){
index += 1;
if(index<=num_clos_mask) {
clos_mask_entries[0] = $(this).parent().parent();
}
if(index>num_clos_mask) {
clos_mask_entries.push($(this).parent().parent());
}
});
if(index<=num_clos_mask) {
last_clos_mask_entry = clos_mask_entries[0];
for(i=0; i0; i--) {
clos_mask_entries[i].remove();
}
}
mba_delay_entries = [null];
index = 0;
$("input[ID$='hv,FEATURES,RDT,MBA_DELAY']").each(function(){
index += 1;
if(index<=num_mba_delay) {
mba_delay_entries[0] = $(this).parent().parent();
}
if(index>num_mba_delay) {
mba_delay_entries.push($(this).parent().parent());
}
});
if(index<=num_mba_delay) {
last_mba_delay_entry = mba_delay_entries[0];
for(i=0; i0; i--) {
mba_delay_entries[i].remove();
}
}
},
error : function(e){
console.log(e.status);
console.log(e.responseText);
alert(e.responseText);
}
});
}
function create_setting(type, default_name, name, mode){
var board_info = $("text#board_type").text();
if (board_info==null || board_info=='') {
alert("Please select one board info before this operation.");
return;
}
create_config = {
board_info: board_info,
type: type,
default_name: default_name,
create_name: name,
mode: mode
}
$.ajax({
type : "POST",
contentType: "application/json;charset=UTF-8",
url : "../check_setting_exist",
data : JSON.stringify(create_config),
success : function(result) {
exist = result.exist
create_flag = true
if(exist == "yes") {
overwirte_confirm_message = 'Setting name: ' + create_config['create_name'] + ' existed in ' +
'acrn-hypervisor/misc/config_tools/data/'+board_info+'/user_defined/.\n'+
'Do you want to overwrite it?\nClick OK to overwrite it; click Cancel to rename it.'
if(!confirm(overwirte_confirm_message)) {
create_flag = false
}
}
if(create_flag == true) {
$.ajax({
type : "POST",
contentType: "application/json;charset=UTF-8",
url : "../create_setting",
data : JSON.stringify(create_config),
success : function(result) {
console.log(result);
status = result.status
setting = result.setting
error_list = result.error_list
if (status == 'success' && (JSON.stringify(error_list)=='{}' || JSON.stringify(error_list)=='null')) {
alert('create a new setting successfully.');
} else {
alert('create a new setting failed. \nError list:\n'+JSON.stringify(error_list));
}
var href = window.location.href
if(href.endsWith("/scenario") || href.endsWith("/launch")) {
window.location = type + "/" + setting;
} else {
window.location = "../" + type + "/" + setting;
}
},
error : function(e){
$("#create_modal").modal("hide");
$("#load_scenario_modal").modal("hide");
$("#load_launch_modal").modal("hide");
console.log(e.status);
console.log(e.responseText);
alert(e.status+'\n'+e.responseText);
}
});
}
},
error : function(e){
console.log(e.status);
console.log(e.responseText);
alert(e.status+'\n'+e.responseText);
}
});
}
function save_scenario(generator=null){
var board_info = $("text#board_type").text();
if (board_info==null || board_info=='') {
alert("Please select one board info before this operation.");
return;
}
scenario_config = {
old_scenario_name: $("#old_scenario_name").text(),
generator: generator
}
if(generator!=null && generator.indexOf('add_vm:')==0) {
scenario_config['new_scenario_name'] = $("#new_scenario_name2").val()
} else if(generator!=null && generator.indexOf('remove_vm:')==0) {
scenario_config['new_scenario_name'] = $("#old_scenario_name").text()
} else {
scenario_config['new_scenario_name'] = $("#new_scenario_name").val()
}
$("input").each(function(){
var id = $(this).attr('id');
var value = $(this).val();
if(id.indexOf('CLOS_MASK')>=0 || id.indexOf('MBA_DELAY')>=0 || id.indexOf('IVSHMEM_REGION')>=0) {
if(id in scenario_config) {
scenario_config[id].push(value);
} else {
scenario_config[id] = [value];
}
} else if(id!='new_scenario_name' && id!='new_scenario_name2' && id!='board_info_file' && id!='board_info_upload'
&& id!='scenario_file' && id!='create_name' && id!='load_scenario_name2' && id!='load_launch_name2'
&& id!='src_path') {
scenario_config[id] = value;
}
})
$("textarea").each(function(){
var id = $(this).attr('id');
var value = $(this).val();
scenario_config[id] = value;
})
$("select").each(function(){
var id = $(this).attr('id');
var value = $(this).val();
if(id.indexOf('pcpu_id')>=0 || id.indexOf('pci_dev')>=0 || id.indexOf('vcpu_clos')>=0) {
if(id in scenario_config) {
scenario_config[id].push(value);
} else {
scenario_config[id] = [value];
}
} else if(id!='board_info' && id!='load_scenario_name' && id!='load_launch_name') {
scenario_config[id] = value;
}
})
$.ajax({
type : "POST",
contentType: "application/json;charset=UTF-8",
url : "../check_setting_exist",
data : JSON.stringify(scenario_config),
success : function(result) {
exist = result.exist
create_flag = true
if(exist == "yes") {
overwirte_confirm_message = 'Setting name: ' + scenario_config['create_name'] + ' existed in ' +
'acrn-hypervisor/misc/config_tools/data/'+board_info+'/user_defined/.\n'+
'Do you want to overwrite it?\nClick OK to overwrite it; click Cancel to rename it.'
if(!confirm(overwirte_confirm_message)) {
create_flag = false
}
}
if(create_flag == true) {
$.ajax({
type : "POST",
contentType: "application/json;charset=UTF-8",
url : "../save_scenario",
data : JSON.stringify(scenario_config),
success : function(result) {
error_list = result.error_list;
status = result.status;
var no_err = true;
$.each(error_list, function(index,item){
no_err = false;
index = escape_str(index)
$("#"+index+"_err").parents(".form-group").addClass("has-error");
$("#"+index+"_err").text(item);
})
if(no_err == true && status == 'success') {
file_name = result.file_name;
validate_message = 'Scenario setting saved successfully with name: '
+file_name+'\ninto acrn-hypervisor/misc/config_tools/data/'+board_info+'/user_defined/.'
if(result.rename==true) {
validate_message = 'Scenario setting existed, saved successfully with a new name: '
+file_name+'\ninto acrn-hypervisor/misc/config_tools/data/'+board_info+'/user_defined/.';
}
if(generator=="generate_config_src") {
var src_path = $("input#src_path").val();
generate_flag = true;
if(src_path == null || src_path == '') {
overwirte_confirm_message = 'The Source Path for configuration files is not set.\n' +
'Do you want to generate them into the default path: acrn-hypervisor/build/hypervisor/configs/board/ and acrn-hypervisor/build/hypervisor/configs/scenarios/,\n'+
'and overwrite the old ones?\nClick OK to overwrite them; click Cancel to edit the Source Path.'
if(!confirm(overwirte_confirm_message)) {
generate_flag = false
}
}
if(generate_flag) {
generator_config = {
type: generator,
board_info: $("select#board_info").val(),
board_setting: "board_setting",
scenario_setting: file_name,
src_path: src_path,
}
$.ajax({
type : "POST",
contentType: "application/json;charset=UTF-8",
url : "../generate_src",
data : JSON.stringify(generator_config),
success : function(result) {
console.log(result);
status = result.status
error_list = result.error_list
if (status == 'success' && (JSON.stringify(error_list)=='{}' || JSON.stringify(error_list)=='null')) {
if(src_path==null || src_path=='') {
alert(generator+' successfully into acrn-hypervisor/build/hypervisor/configs/board/ and acrn-hypervisor/build/hypervisor/configs/scenarios/ ');
} else {
alert(generator+' successfully into '+src_path);
}
} else {
alert(generator+' failed. \nError list:\n'+JSON.stringify(error_list));
}
window.location = "./" + file_name;
},
error : function(e){
console.log(e.status);
console.log(e.responseText);
alert(e.status+'\n'+e.responseText);
}
});
}
} else {
alert(validate_message);
window.location = "./" + file_name;
}
}
else {
$("#save_modal").modal("hide");
alert(JSON.stringify(error_list));
}
},
error : function(e){
$("#save_modal").modal("hide");
console.log(e.status);
console.log(e.responseText);
alert(e.status+'\n'+e.responseText);
}
});
}
},
error : function(e){
console.log(e.status);
console.log(e.responseText);
alert(e.status+'\n'+e.responseText);
}
});
}
function save_launch(generator=null) {
var board_info = $("text#board_type").text();
var scenario_name = $("select#scenario_name").val();
if (board_info==null || board_info=='' || scenario_name==null || scenario_name=='') {
alert("Please select one board and scenario before this operation.");
return;
}
launch_config = {
old_launch_name: $("#old_launch_name").text(),
scenario_name: scenario_name,
generator: generator
}
if(generator!=null && generator.indexOf('add_vm:')==0) {
launch_config['new_launch_name'] = $("#new_launch_name2").val()
} else if(generator!=null && generator.indexOf('remove_vm:')==0) {
launch_config['new_launch_name'] = $("#old_launch_name").text()
} else {
launch_config['new_launch_name'] = $("#new_launch_name").val()
}
$("input").each(function(){
var id = $(this).attr('id');
var value = $(this).val();
if(id.indexOf('virtio_devices,network')>=0 || id.indexOf('virtio_devices,block')>=0
|| id.indexOf('virtio_devices,input')>=0) {
if(id in launch_config) {
launch_config[id].push(value);
} else {
launch_config[id] = [value];
}
} else if(id!='new_launch_name' && id!='new_launch_name2' && id!='board_info_file' && id!='board_info_upload'
&& id!="launch_file" && id!='create_name' && id!='load_scenario_name2' && id!='load_launch_name2'
&& id!='src_path') {
launch_config[id] = value;
}
})
$("select").each(function(){
var id = $(this).attr('id');
var value = $(this).val();
if(id.indexOf('pcpu_id')>=0 || id.indexOf('shm_region')>=0
|| id.indexOf('communication_vuart')>=0 || id.indexOf('pci_dev')>=0) {
if(id in launch_config) {
launch_config[id].push(value);
} else {
launch_config[id] = [value];
}
} else if(id!='board_info' && id!='load_scenario_name' && id!='load_launch_name') {
launch_config[id] = value;
}
})
$("textarea").each(function(){
var id = $(this).attr('id');
var value = $(this).val();
launch_config[id] = value;
})
$.ajax({
type : "POST",
contentType: "application/json;charset=UTF-8",
url : "../check_setting_exist",
data : JSON.stringify(launch_config),
success : function(result) {
exist = result.exist
create_flag = true
if(exist == "yes") {
overwirte_confirm_message = 'Setting name: ' + launch_config['create_name'] + ' existed in ' +
'acrn-hypervisor/misc/config_tools/data/'+board_info+'/user_defined/.\n'+
'Do you want to overwrite it?\nClick OK to overwrite it; click Cancel to rename it.'
if(!confirm(overwirte_confirm_message)) {
create_flag = false
}
}
if(create_flag == true) {
$.ajax({
type : "POST",
contentType: "application/json;charset=UTF-8",
url : "../save_launch",
data : JSON.stringify(launch_config),
success : function(result) {
console.log(result);
error_list = result.error_list;
status = result.status;
var no_err = true;
$.each(error_list, function(index,item){
no_err = false;
index = escape_str(index);
$("#"+index).parents(".form-group").addClass("has-error");
$("#"+index+"_err").text(item);
})
if(no_err == true && status == 'success') {
file_name = result.file_name;
validate_message = 'Launch setting saved successfully with name: '
+file_name+'\nto acrn-hypervisor/misc/config_tools/data/'+board_info+'/user_defined/.'
if(result.rename==true) {
validate_message = 'Launch setting existed, saved successfully with a new name: '
+file_name+'\nto acrn-hypervisor/misc/config_tools/data/'+board_info+'/user_defined/.';
}
if(generator == 'generate_launch_script') {
var src_path = $("input#src_path").val();
generate_flag = true;
if(src_path == null || src_path == '') {
overwirte_confirm_message = 'The Source Path for launch scripts is not set.\n' +
'Do you want to generate them into the default path: misc/config_tools/data/'+board_info+'/output/,\n'+
'and overwrite the old ones?\nClick OK to overwrite them; click Cancel to edit the Source Path.'
if(!confirm(overwirte_confirm_message)) {
generate_flag = false
}
}
if(generate_flag) {
generator_config = {
type: generator,
board_info: $("select#board_info").val(),
board_setting: "board_setting",
scenario_setting: $("select#scenario_name").val(),
launch_setting: file_name,
src_path: src_path,
}
$.ajax({
type : "POST",
contentType: "application/json;charset=UTF-8",
url : "../generate_src",
data : JSON.stringify(generator_config),
success : function(result) {
console.log(result);
status = result.status
error_list = result.error_list
if (status == 'success' && (JSON.stringify(error_list)=='{}' || JSON.stringify(error_list)=='null')) {
if(src_path==null || src_path==='') {
alert(generator+' successfully into '+
'acrn-hypervisor/misc/config_tools/data/'+board_info+'/output/.');
} else {
alert(generator+' successfully into '+src_path);
}
} else {
alert(generator+' failed. \nError list:\n'+JSON.stringify(error_list));
}
window.location = "./" + file_name;
},
error : function(e){
console.log(e.status);
console.log(e.responseText);
alert(e.status+'\n'+e.responseText);
}
});
}
} else {
alert(validate_message);
window.location = "./" + file_name;
}
}
else {
$("#save_modal").modal("hide");
alert(JSON.stringify(error_list));
}
},
error : function(e){
$("#save_modal").modal("hide");
console.log(e.status);
console.log(e.responseText);
alert(e.status+'\n'+e.responseText);
}
});
}
},
error : function(e){
console.log(e.status);
console.log(e.responseText);
alert(e.status+'\n'+e.responseText);
}
});
}