gan.html 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. <div id="ganetWindow" class="standardContainer">
  2. <div class="ui basic segment">
  3. <h2>Global Area Network</h2>
  4. <p>Virtual Network Hub that allows all networked devices to communicate as if they all reside in the same physical data center or cloud region</p>
  5. </div>
  6. <div class="gansnetworks">
  7. <div class="ganstats ui basic segment">
  8. <div style="float: right; max-width: 300px; margin-top: 0.4em;">
  9. <h1 class="ui header" style="text-align: right;">
  10. <span class="ganControllerID"></span>
  11. <div class="sub header">Network Controller ID</div>
  12. </h1>
  13. </div>
  14. <div class="ui list">
  15. <div class="item">
  16. <i class="exchange icon"></i>
  17. <div class="content">
  18. <div class="header" style="font-size: 1.2em;" id="ganetCount">0</div>
  19. <div class="description">Networks</div>
  20. </div>
  21. </div>
  22. <div class="item">
  23. <i class="desktop icon"></i>
  24. <div class="content">
  25. <div class="header" style="font-size: 1.2em;" id="ganodeCount">0</div>
  26. <div class="description">Connected Nodes</div>
  27. </div>
  28. </div>
  29. </div>
  30. </div>
  31. <div class="ganlist">
  32. <button class="ui basic orange button" onclick="addGANet();">Create New Network</button>
  33. <div class="ui divider"></div>
  34. <div class="ui icon input" style="margin-bottom: 1em;">
  35. <input type="text" placeholder="Search a Network">
  36. <i class="circular search link icon"></i>
  37. </div>
  38. <div style="width: 100%; overflow-x: auto;">
  39. <table class="ui celled basic unstackable striped table">
  40. <thead>
  41. <tr>
  42. <th>Network ID</th>
  43. <th>Name</th>
  44. <th>Description</th>
  45. <th>Subnet</th>
  46. <th>Nodes</th>
  47. <th>Actions</th>
  48. </tr>
  49. </thead>
  50. <tbody id="GANetList">
  51. <tr>
  52. <td colspan="6"><i class="ui green circle check icon"></i> No Global Area Network Found on this host</td>
  53. </tr>
  54. </tbody>
  55. </table>
  56. </div>
  57. </div>
  58. </div>
  59. </div>
  60. <script>
  61. /*
  62. Network Management Functions
  63. */
  64. function handleAddNetwork(){
  65. let networkName = $("#networkName").val().trim();
  66. if (networkName == ""){
  67. msgbox("Network name cannot be empty", false, 5000);
  68. return;
  69. }
  70. //Add network with default settings
  71. addGANet(networkName, "192.168.196.0/24");
  72. $("#networkName").val("");
  73. }
  74. function initGANetID(){
  75. $.get("/api/gan/network/info", function(data){
  76. if (data.error !== undefined){
  77. msgbox(data.error, false, 5000)
  78. }else{
  79. $(".ganControllerID").text(data);
  80. }
  81. })
  82. }
  83. function addGANet() {
  84. $.ajax({
  85. url: "/api/gan/network/add",
  86. type: "POST",
  87. dataType: "json",
  88. data: {},
  89. success: function(response) {
  90. if (response.error != undefined){
  91. msgbox(response.error, false, 5000);
  92. }else{
  93. msgbox("Network added successfully");
  94. }
  95. console.log("Network added successfully:", response);
  96. listGANet();
  97. },
  98. error: function(xhr, status, error) {
  99. console.log("Error adding network:", error);
  100. }
  101. });
  102. }
  103. function listGANet(){
  104. $.get("/api/gan/network/list", function(data){
  105. $("#GANetList").empty();
  106. if (data.error != undefined){
  107. msgbox(data.error, false, 5000);
  108. }else{
  109. var nodeCount = 0;
  110. data.forEach(function(gan){
  111. $("#GANetList").append(`<tr>
  112. <td>${gan.nwid}</td>
  113. <td>${""}</td>
  114. <td>${""}</td>
  115. <td>${""}</td>
  116. <td>${""}</td>
  117. <td>
  118. <button onclick="openGANetDetails('${gan.nwid}');" class="ui tiny basic icon button" title="Edit Network"><i class="edit icon"></i></button>
  119. <button onclick="removeGANet('${gan.nwid}');" class="ui tiny basic icon button" title="Remove Network"><i class="red remove icon"></i></button>
  120. </td>
  121. </tr>`);
  122. nodeCount += 0;
  123. });
  124. if (data.length == 0){
  125. $("#GANetList").append(`<tr>
  126. <td colspan="6"><i class="ui green circle check icon"></i> No Global Area Network Found on this host</td>
  127. </tr>`);
  128. }
  129. $("#ganodeCount").text(nodeCount);
  130. $("#ganetCount").text(data.length);
  131. }
  132. })
  133. }
  134. //Remove the given GANet
  135. function removeGANet(netid){
  136. if (confirm("Confirm remove Network " + netid + " PERMANENTLY ?"))
  137. $.ajax({
  138. url: "/api/gan/network/remove",
  139. type: "POST",
  140. dataType: "json",
  141. data: {
  142. id: netid,
  143. },
  144. success: function(data){
  145. if (data.error != undefined){
  146. msgbox(data.error, false, 5000);
  147. }else{
  148. msgbox("Net " + netid + " removed");
  149. }
  150. listGANet();
  151. }
  152. });
  153. }
  154. function openGANetDetails(netid){
  155. $("#ganetWindow").load("./components/gandetails.html", function(){
  156. setTimeout(function(){
  157. initGanetDetails(netid);
  158. });
  159. });
  160. }
  161. //Bind event to tab switch
  162. tabSwitchEventBind["gan"] = function(){
  163. //On switch over to this page, load info
  164. listGANet();
  165. initGANetID();
  166. }
  167. </script>