index.js 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  1. function mgBytesToSize(bytes) {
  2. var sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];
  3. if (bytes <= 1) {
  4. if (bytes !== 0) {
  5. var bytes = Number(bytes).toFixed(1);
  6. }
  7. return bytes + ' Byte';
  8. }
  9. var i = parseInt(Math.floor(Math.log(bytes) / Math.log(1024)));
  10. var total = bytes / Math.pow(1024, i) ;
  11. if(sizes[i] == 'GB' || sizes[i] == 'TB' ){
  12. return total.toFixed(2)+ ' ' + sizes[i];
  13. }
  14. return Math.round( total, 2) + ' ' + sizes[i];
  15. }
  16. function mgTooltipCpu(tooltipItem, data) {
  17. var used = Number(tooltipItem.yLabel).toFixed(2);
  18. return used + "%";
  19. }
  20. function mgTooltipServerLoad(tooltipItem, data) {
  21. var used = Number(tooltipItem.yLabel).toFixed(2);
  22. return used;
  23. }
  24. function mgTooltipCallbackForMemory(tooltipItem, data) {
  25. return mgBytesToSize(tooltipItem.yLabel) + "/s";
  26. }
  27. function mgTooltipCallbackForNet(tooltipItem, data) {
  28. return mgBytesToSize(tooltipItem.yLabel) + "/s";
  29. }
  30. function mgTooltipCallbackForDisk(tooltipItem, data) {
  31. return mgBytesToSize(tooltipItem.yLabel) + "/s";
  32. }
  33. /*Disk support*/
  34. function pmToggleDiskButton(data) {
  35. let button = $(".pmCreateDiskButton");
  36. if(data.htmlData.createButtonStatus)
  37. {
  38. button.removeClass('hidden');
  39. }
  40. else
  41. {
  42. button.addClass('hidden');
  43. }
  44. }
  45. /*Snapshot support*/
  46. function pmToggleSnapshotButton(data) {
  47. let button = $(".pmCreateSnapshotButton");
  48. if(data.htmlData.createButtonStatus)
  49. {
  50. button.removeClass('hidden');
  51. }
  52. else
  53. {
  54. button.addClass('hidden');
  55. }
  56. }
  57. /*Backup*/
  58. function pmToggleBackupButton(data) {
  59. let button = $(".pmCreateBackupButton");
  60. if(data.htmlData.createButtonStatus)
  61. {
  62. button.removeClass('hidden');
  63. }
  64. else
  65. {
  66. button.addClass('hidden');
  67. }
  68. }
  69. /*Firewall*/
  70. function pmToggleFirewallButton(data) {
  71. let button = $(".pmCreateFirewallButton");
  72. if(data.htmlData.createButtonStatus)
  73. {
  74. button.removeClass('hidden');
  75. }
  76. else
  77. {
  78. button.addClass('hidden');
  79. }
  80. }
  81. function mgLocationReload(data) {
  82. window.location.reload();
  83. }
  84. function mgLocationReloadDelay(data) {
  85. setTimeout(function(){ window.location.reload(); }, 3000);
  86. }
  87. /* VM delete done*/
  88. function pcVmDeltedAjaxDone(data) {
  89. if(data.htmlData.redirectUrl)
  90. {
  91. window.location.href = data.htmlData.redirectUrl;
  92. }
  93. }
  94. /* VM shutdown done*/
  95. function pcVmStoppedAjaxDone(data) {
  96. if(data.htmlData.redirectUrl)
  97. {
  98. window.location.href = data.htmlData.redirectUrl;
  99. }
  100. }
  101. $(document).ready(function () {
  102. //virtual network
  103. var selectizedInstance = $('.pm-virtual-network-content-default .selectized').selectize();
  104. selectizedInstance.each(function(){
  105. this.selectize.destroy();
  106. });
  107. //create
  108. $("#pm-add-new-virtual-network-button").on("click",function (e) {
  109. e.preventDefault();
  110. var content = $('.pm-virtual-network-content-default').clone();
  111. content.removeClass("hidden");
  112. content.removeClass("pm-virtual-network-content-default");
  113. var index = $("#pm-add-new-virtual-network-button").closest('.lu-widget').find('.lu-widget').size();
  114. content.find('select[name="virtualNetwork[id]"]').prop("name","virtualNetwork"+index+"[id]");
  115. content.find('select[name="virtualNetwork[ip]"]').prop("name","virtualNetwork"+index+"[ip]");
  116. $(this).closest('.lu-widget').find('.lu-widget').last().after(content);
  117. $(this).closest('.lu-widget').find('.pm-vn-select').trigger("change");
  118. $(this).closest('.lu-widget').find('.lu-alert').hide();
  119. $(".pm-virtual-network-content-default").parent().find(".lu-alert").hide();
  120. });
  121. //delete
  122. $(".mg-wrapper").delegate(".pm-delete-virtual-network-button","click",function (e) {
  123. e.preventDefault();
  124. $(this).closest('.lu-widget').remove();
  125. if($(".pm-virtual-network-content-default").parent().find(".lu-widget").length <= 1)
  126. {
  127. $(".pm-virtual-network-content-default").parent().find(".lu-alert").show();
  128. }
  129. });
  130. //change
  131. $(".mg-wrapper").delegate(".pm-vn-select","change",function (e) {
  132. var show = '.vn-ip-'+$(this).val();
  133. $(this).closest('.lu-widget__content').find('.pm-vn-ip-select option').hide();
  134. $(this).closest('.lu-widget__content').find(show).show();
  135. var firstOption = $(this).closest('.lu-widget__content').find('.pm-vn-ip-select '+show+':first').val();
  136. $(this).closest('.lu-widget__content').find('.pm-vn-ip-select').val(firstOption);
  137. });
  138. //disk
  139. var selectizedInstance = $('.pm-disk-content-default .selectized').selectize();
  140. selectizedInstance.each(function(){
  141. this.selectize.destroy();
  142. });
  143. //create
  144. $("#pm-add-disk-button").on("click",function (e) {
  145. e.preventDefault();
  146. var content = $('.pm-disk-content-default').clone();
  147. content.removeClass("hidden");
  148. content.removeClass("pm-disk-content-default");
  149. var index = $("#pm-add-disk-button").closest('.lu-widget').find('.lu-widget').size();
  150. content.find('output[for="additionalDiskSize"]').prop("id","outputadditionalDiskSize"+index).prop("for","additionalDiskSize"+index);
  151. content.find('input[name="additionalDiskSize"]').prop("name","additionalDiskSize"+index).attr("oninput","outputadditionalDiskSize"+index+".value=additionalDiskSize"+index+".value");
  152. content.find('select[name="additionalDiskBus"]').prop("name","additionalDiskBus"+index);
  153. content.find('select[name="additionalDiskFormat"]').prop("name","additionalDiskFormat"+index);
  154. content.find('input[name="additionalDiskBackup"]').prop("name","additionalDiskBackup"+index);
  155. content.find('input[name="additionalDiskMp"]').prop("name","additionalDiskMp"+index);
  156. $(this).closest('.lu-widget').find('.lu-widget').last().after(content);
  157. $(".pm-disk-content-default ").parent().find(".lu-alert").hide();
  158. });
  159. //delete
  160. $(".mg-wrapper").delegate(".pm-delete-disk-button","click",function (e) {
  161. e.preventDefault();
  162. $(this).closest('.lu-widget').remove();
  163. if($(".pm-disk-content-default ").parent().find(".lu-widget").length <= 1)
  164. {
  165. $(".pm-disk-content-default ").parent().find(".lu-alert").show();
  166. }
  167. });
  168. //cpuPriority change
  169. $(".mg-wrapper").delegate("#cpuPriority","input",function (e) {
  170. e.preventDefault();
  171. var label = $(this).data("label"+$(this).val());
  172. $("#outputcpuPriority").html(label);
  173. });
  174. });
  175. $(".mg-wrapper").on("change", "select[name='macro']", function () {
  176. var disable = $(this).val()!='0';
  177. if(disable){
  178. $("input[name='sport']").closest(".lu-form-group").addClass("disabled");
  179. $("input[name='dport']").closest(".lu-form-group").addClass("disabled");
  180. $("select[name='proto']").closest(".lu-form-group").addClass("disabled");
  181. }else{
  182. $("input[name='sport']").closest(".lu-form-group").removeClass("disabled");
  183. $("input[name='dport']").closest(".lu-form-group").removeClass("disabled");
  184. $("select[name='proto']").closest(".lu-form-group").removeClass("disabled");
  185. }
  186. });
  187. mgEventHandler.on('ModalLoaded', 'updateButton', function(id, params){
  188. if(id != 'updateButton'){
  189. return;
  190. }
  191. $(".mg-wrapper select[name='macro']").trigger('change');
  192. }, 1000);
  193. function pmToggleCreateJobButton(data) {
  194. let button = $(".pmCreateJobButton");
  195. if(data.htmlData.createJobButtonStatus)
  196. {
  197. button.removeClass('hidden');
  198. }
  199. else
  200. {
  201. button.addClass('hidden');
  202. }
  203. }
  204. //restore rules
  205. var mgFile ={
  206. read: function (fileId){
  207. var input= document.getElementById(fileId);
  208. var file = input.files[0];
  209. if(file.size > 2000){
  210. throw new Error("The File size: "+file.size+" is too large");
  211. }
  212. fileReader = new FileReader();
  213. fileReader.onload = mgFile.pushResult;
  214. fileReader.readAsText(file);
  215. },
  216. pushResult: function(){
  217. $("#pmRulesJson").val(fileReader.result);
  218. }
  219. };
  220. $(".mg-wrapper").on("change", "#pmFirewallRules", function () {
  221. mgFile.read('pmFirewallRules');
  222. });
  223. $(".mg-wrapper").on("click", ".dt-button", function (e) {
  224. if(!$(this).parents('#backupDataTable').length){
  225. return;
  226. }
  227. mgPageControler.vueLoader.refreshingState = ['resourcesContainer'];
  228. mgPageControler.vueLoader.runRefreshActions();
  229. });