You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

272 lines
7.5 KiB

  1. // Gets data from provided url and updates DOM element.
  2. function generate_os_data(url, element) {
  3. $.get(url, function(data) {
  4. $(element).text(data);
  5. }, "json");
  6. }
  7. // If dataTable with provided ID exists, destroy it.
  8. function destroy_dataTable(table_id) {
  9. var table = $("#" + table_id);
  10. var ex = document.getElementById(table_id);
  11. if ($.fn.DataTable.fnIsDataTable(ex)) {
  12. table.hide().dataTable().fnClearTable();
  13. table.dataTable().fnDestroy();
  14. }
  15. }
  16. //DataTables
  17. //Sort file size data.
  18. jQuery.extend(jQuery.fn.dataTableExt.oSort, {
  19. "file-size-pre": function(a) {
  20. var x = a.substring(0, a.length - 1);
  21. var x_unit = (a.substring(a.length - 1, a.length) === "M" ?
  22. 1000 : (a.substring(a.length - 1, a.length) === "G" ?
  23. 1000000 : 1));
  24. return parseInt(x * x_unit, 10);
  25. },
  26. "file-size-asc": function(a, b) {
  27. return ((a < b) ? -1 : ((a > b) ? 1 : 0));
  28. },
  29. "file-size-desc": function(a, b) {
  30. return ((a < b) ? 1 : ((a > b) ? -1 : 0));
  31. }
  32. });
  33. //DataTables
  34. //Sort numeric data which has a percent sign with it.
  35. jQuery.extend(jQuery.fn.dataTableExt.oSort, {
  36. "percent-pre": function(a) {
  37. var x = (a === "-") ? 0 : a.replace(/%/, "");
  38. return parseFloat(x);
  39. },
  40. "percent-asc": function(a, b) {
  41. return ((a < b) ? -1 : ((a > b) ? 1 : 0));
  42. },
  43. "percent-desc": function(a, b) {
  44. return ((a < b) ? 1 : ((a > b) ? -1 : 0));
  45. }
  46. });
  47. /*******************************
  48. Data Call Functions
  49. *******************************/
  50. var dashboard = {};
  51. dashboard.getPs = function() {
  52. $.get("sh/ps.php", function(data) {
  53. destroy_dataTable("ps_dashboard");
  54. $("#filter-ps").val("").off("keyup");
  55. var psTable = $("#ps_dashboard").dataTable({
  56. aaData: data,
  57. aoColumns: [
  58. { sTitle: "USER" },
  59. { sTitle: "PID" },
  60. { sTitle: "%CPU" },
  61. { sTitle: "%MEM" },
  62. { sTitle: "VSZ" },
  63. { sTitle: "RSS" },
  64. { sTitle: "TTY" },
  65. { sTitle: "STAT" },
  66. { sTitle: "START" },
  67. { sTitle: "TIME" },
  68. { sTitle: "COMMAND" }
  69. ],
  70. bPaginate: true,
  71. sPaginationType: "full_numbers",
  72. bFilter: true,
  73. sDom: "lrtip",
  74. bAutoWidth: false,
  75. bInfo: false
  76. }).fadeIn();
  77. $("#filter-ps").on("keyup", function() {
  78. psTable.fnFilter(this.value);
  79. });
  80. }, "json");
  81. }
  82. dashboard.getUsers = function() {
  83. $.get("sh/users.php", function(data) {
  84. destroy_dataTable("users_dashboard");
  85. $("#users_dashboard").dataTable({
  86. aaData: data,
  87. aoColumns: [
  88. { sTitle: "Type" },
  89. { sTitle: "User" },
  90. { sTitle: "Home" }
  91. ],
  92. aaSorting: [[0, "desc"]],
  93. iDisplayLength: 5,
  94. bPaginate: true,
  95. sPaginationType: "full_numbers",
  96. bFilter: false,
  97. bAutoWidth: false,
  98. bInfo: false
  99. }).fadeIn();
  100. }, "json");
  101. $("select[name='users_dashboard_length']").val("5");
  102. }
  103. dashboard.getOnline = function() {
  104. $.get("sh/online.php", function(data) {
  105. destroy_dataTable("online_dashboard");
  106. $("#online_dashboard").dataTable({
  107. aaData: data,
  108. aoColumns: [
  109. { sTitle: "Who" },
  110. { sTitle: "From" },
  111. { sTitle: "Login At" },
  112. { sTitle: "Idle" }
  113. ],
  114. aaSorting: [[0, "desc"]],
  115. iDisplayLength: 5,
  116. bPaginate: true,
  117. sPaginationType: "full_numbers",
  118. bFilter: false,
  119. bAutoWidth: false,
  120. bInfo: false
  121. }).fadeIn();
  122. }, "json");
  123. $("select[name='online_dashboard_length']").val("5");
  124. }
  125. dashboard.getRam = function() {
  126. $.get("sh/mem.php", function(data) {
  127. var ram_total = data[1];
  128. var ram_used = parseInt((data[2] / ram_total) * 100, 10);
  129. var ram_free = parseInt((data[3] / ram_total) * 100, 10);
  130. $("#ram-total").text(ram_total);
  131. $("#ram-used").text(data[2]);
  132. $("#ram-free").text(data[3]);
  133. $("#ram-free-per").text(ram_free);
  134. $("#ram-used-per").text(ram_used);
  135. }, "json");
  136. }
  137. dashboard.getDf = function() {
  138. $.get('/disk/{{ get_disk }}', function(data) {
  139. var table = $("#df_dashboard");
  140. var ex = document.getElementById("df_dashboard");
  141. if ($.fn.DataTable.fnIsDataTable(ex)) {
  142. table.hide().dataTable().fnClearTable();
  143. table.dataTable().fnDestroy();
  144. }
  145. table.dataTable({
  146. aaData: data,
  147. aoColumns: [
  148. { sTitle: "Filesystem" },
  149. { sTitle: "Size", sType: "file-size" },
  150. { sTitle: "Used", sType: "file-size" },
  151. { sTitle: "Avail", sType: "file-size" },
  152. { sTitle: "Use%", sType: "percent" },
  153. { sTitle: "Mounted" }
  154. ],
  155. bPaginate: false,
  156. bFilter: false,
  157. bAutoWidth: true,
  158. bInfo: false
  159. }).fadeIn();
  160. }, "json");
  161. }
  162. dashboard.getWhereIs = function() {
  163. $.get("sh/whereis.php", function(data) {
  164. var table = $("#whereis_dashboard");
  165. var ex = document.getElementById("whereis_dashboard");
  166. if ($.fn.DataTable.fnIsDataTable(ex)) {
  167. table.hide().dataTable().fnClearTable();
  168. table.dataTable().fnDestroy();
  169. }
  170. table.dataTable({
  171. aaData: data,
  172. aoColumns: [
  173. { sTitle: "Software" },
  174. { sTitle: "Installation" }
  175. ],
  176. bPaginate: false,
  177. bFilter: false,
  178. aaSorting: [[1, "desc"]],
  179. bAutoWidth: false,
  180. bInfo: false
  181. }).fadeIn();
  182. }, "json");
  183. }
  184. dashboard.getOs = function() {
  185. generate_os_data("sh/issue.php", "#os-info");
  186. generate_os_data("sh/hostname.php", "#os-hostname");
  187. generate_os_data("sh/uptime.php", "#os-uptime");
  188. }
  189. dashboard.getIp = function() {
  190. $.get("sh/ip.php", function(data) {
  191. destroy_dataTable("ip_dashboard");
  192. $("#ip_dashboard").dataTable({
  193. aaData: data,
  194. aoColumns: [
  195. { sTitle: "Interface" },
  196. { sTitle: "IP" }
  197. ],
  198. bPaginate: false,
  199. bFilter: false,
  200. bAutoWidth: true,
  201. bInfo: false
  202. }).fadeIn();
  203. }, "json");
  204. }
  205. dashboard.getIspeed = function() {
  206. var rate = $("#ispeed-rate");
  207. // 0 = MB
  208. // 1 = KB
  209. var AS = 1;
  210. $.get("sh/speed.php?as=" + AS, function(data) {
  211. rate.text(data);
  212. });
  213. var lead = rate.next(".lead");
  214. lead.text(AS ? "KB/s" : "MB/s");
  215. }
  216. // Function that calls all the other functions which refresh
  217. // each individual widget.
  218. dashboard.getAll = function() {
  219. dashboard.getRam();
  220. dashboard.getPs();
  221. dashboard.getDf();
  222. dashboard.getOs();
  223. dashboard.getUsers();
  224. dashboard.getOnline();
  225. dashboard.getWhereIs();
  226. dashboard.getIp();
  227. dashboard.getIspeed();
  228. }
  229. dashboard.fnMap = {
  230. all: dashboard.getAll,
  231. ram: dashboard.getRam,
  232. ps: dashboard.getPs,
  233. df: dashboard.getDf,
  234. os: dashboard.getOs,
  235. users: dashboard.getUsers,
  236. online: dashboard.getOnline,
  237. whereis: dashboard.getWhereIs,
  238. ip: dashboard.getIp,
  239. ispeed: dashboard.getIspeed,
  240. };