pgupgrade.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. function doAPIRequestWithCallback (mod, func, handler) {
  2. 'use strict';
  3. var oReq = new XMLHttpRequest();
  4. oReq.addEventListener("load", handler);
  5. oReq.open("GET", `api.cgi?module=${mod}&function=${func}`);
  6. oReq.send();
  7. return false;
  8. }
  9. function versionHandler () {
  10. 'use strict';
  11. let obj = JSON.parse(this.responseText);
  12. if(obj.result === 1) {
  13. // Construct version warning/display
  14. let pgVersion = obj.data.installed_version.major + '.' + obj.data.installed_version.minor;
  15. let elem = document.getElementById('psqlVersion');
  16. let html = `<strong>${pgVersion}</strong>`;
  17. if( parseFloat(pgVersion) < parseFloat(obj.data.minimum_supported_version) ) {
  18. elem.classList.add('callout', 'callout-danger');
  19. html += " -- You are using a version of PostgreSQL Server that is no longer supported! Immediate upgrade recommended.";
  20. }
  21. elem.innerHTML = html;
  22. // Now let's build the table
  23. let rows = '';
  24. for ( var version of Object.keys(obj.data.available_versions).sort(function(a,b) { return parseFloat(b) - parseFloat(a) }) ) {
  25. rows +=
  26. `<tr id="pgVersionRow-${version}">
  27. <td>
  28. <input type="radio" name="selectedVersion" value="${version}" onclick="document.getElementById('submit').disabled = false;"></input>
  29. ${version}
  30. </td>
  31. <td><ul>`;
  32. obj.data.available_versions[version].features.forEach(function(feature) {
  33. rows += `<li>${feature}</li>`;
  34. });
  35. rows += `</ul></td>
  36. <td>
  37. ${new Date(obj.data.available_versions[version].release * 1000).toLocaleString(undefined, { year: 'numeric', month: 'long', day: 'numeric' })}
  38. </td>
  39. <td>
  40. ${new Date(obj.data.available_versions[version].EOL * 1000).toLocaleString(undefined, { year: 'numeric', month: 'long', day: 'numeric' })}
  41. </td>
  42. </tr>`;
  43. }
  44. document.getElementById('loadingCell').remove();
  45. document.querySelector('#upgradeForm > table > tbody').innerHTML = rows;
  46. } else {
  47. console.log(obj.error);
  48. }
  49. }
  50. function doInstallScroller () {
  51. 'use strict';
  52. let obj = JSON.parse(this.responseText);
  53. let upgradeWell = document.getElementById('upgradeWell');
  54. let submitBtn = document.getElementById('submit');
  55. if(obj.result === 1) {
  56. if(obj.data.exit_code !== 0) {
  57. upgradeWell.textContent += obj.data.last_yum_command + " reported nonzero exit code (" + obj.data.exit_code + "):\n[STDOUT] " + obj.data.stdout + "\n[STDERR] " + obj.data.stderr;
  58. submitBtn.textContent = 'Re-Try';
  59. submitBtn.disabled = false;
  60. return false;
  61. }
  62. if(obj.data.already_installed) {
  63. upgradeWell.textContent += obj.data.last_yum_command + " reports the community repository is already installed: " + obj.data.stdout;
  64. } else {
  65. upgradeWell.textContent += obj.data.last_yum_command + "\n" + obj.data.stdout;
  66. }
  67. // Ok, now kick off actual install TODO use WebSocket?
  68. upgradeWell.textContent += "\nNow proceeding with install of PostgreSQL " + window.selectedVersion + "...\n";
  69. } else {
  70. upgradeWell.textContent += "Installlation of community repositories failed:" + obj.reason;
  71. submitBtn.textContent = 'Re-Try';
  72. submitBtn.disabled = false;
  73. }
  74. return false;
  75. }
  76. window.doUpgrade = function () {
  77. 'use strict';
  78. let form = new FormData(upgradeForm);
  79. window.selectedVersion = form.get('selectedVersion');
  80. document.getElementById('upgradeTitle').textContent = "Install Progress for PostgreSQL " + window.selectedVersion;
  81. let submitBtn = document.getElementById('submit');
  82. submitBtn.disabled = true;
  83. submitBtn.innerHTML = '<span class="fa fa-spin fa-spinner"></span>';
  84. document.getElementById('upgradeDiv').innerHTML = '<pre id="upgradeWell" class="well">Ensuring that the PostgreSQL Community repository is installed...\n</pre>';
  85. doAPIRequestWithCallback('Postgres', 'enable_community_repositories', doInstallScroller );
  86. return false;
  87. }
  88. // Now kickoff the page load post bits
  89. document.getElementById('submit').disabled = true;
  90. doAPIRequestWithCallback('Postgres', 'get_postgresql_versions', versionHandler);