diskspace.html 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>Disk Space</title>
  5. <meta charset="UTF-8">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0 user-scalable=no">
  7. <link rel="stylesheet" href="../../../script/semantic/semantic.min.css">
  8. <script type="text/javascript" src="../../../script/jquery.min.js"></script>
  9. <script type="text/javascript" src="../../../script/semantic/semantic.min.js"></script>
  10. <style>
  11. #diskInfo{
  12. padding-left:22px;
  13. }
  14. .usedSpace{
  15. margin-top: -0.8em;
  16. }
  17. </style>
  18. </head>
  19. <body>
  20. <button class="ui small button" onclick="toggleTmpfs();">Toggle tmpfs</button>
  21. <div id="diskInfo" class="ui feed">
  22. </div>
  23. <script>
  24. initDiskInfo();
  25. function initDiskInfo(){
  26. $("#diskInfo").html("");
  27. $.get("../../system/disk/space/list",function(data){
  28. if (data.error !== undefined){
  29. alert(data.error);
  30. }else{
  31. for (var i = 0; i < data.length; i++){
  32. var thisDev = data[i];
  33. var usedPercentage = parseInt(thisDev.Used / thisDev.Volume * 100);
  34. var color = "blue";
  35. if (usedPercentage >= 90){
  36. color = "red";
  37. }
  38. if (thisDev.Used == 0 && thisDev.Volume == 0){
  39. color = "black";
  40. usedPercentage = 100;
  41. }
  42. var tmpfs = "";
  43. var style = "";
  44. if (thisDev.Device == "tmpfs"){
  45. tmpfs = "tmpfs";
  46. style = "display:none;";
  47. }
  48. //Check if it is RAID partitions
  49. let deviceName = thisDev.Device.split("/").pop();
  50. let diskIcon = "disk.svg";
  51. if (deviceName.substr(0, 2) == "md"){
  52. //It is RAID device
  53. color = "teal";
  54. diskIcon = "raid.svg";
  55. }
  56. $("#diskInfo").append(`<div class="event ${tmpfs}" style="${style}">
  57. <div class="label">
  58. <img src="../disk/space/img/${diskIcon}">
  59. </div>
  60. <div class="content">
  61. <div class="summary">
  62. ${thisDev.MountPoint}
  63. <div class="date">
  64. (${thisDev.Device})
  65. </div>
  66. </div>
  67. <div class="extra text" style="width:100% !important;">
  68. <div class="ui small ${color} active progress">
  69. <div class="bar" style="width:${usedPercentage}%;">
  70. <div class="progress">${usedPercentage}%</div>
  71. </div>
  72. <div class="label">Free: ${bytesToSize(thisDev.Available)} / Total: ${bytesToSize(thisDev.Volume)}</div>
  73. </div>
  74. </div>
  75. </div>
  76. </div>`);
  77. }
  78. }
  79. })
  80. }
  81. function bytesToSize(bytes) {
  82. var sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];
  83. if (bytes == 0) return '0 Byte';
  84. var i = parseInt(Math.floor(Math.log(bytes) / Math.log(1024)));
  85. return (bytes / Math.pow(1024, i)).toFixed(1) + ' ' + sizes[i];
  86. }
  87. function toggleTmpfs(){
  88. $(".tmpfs").slideToggle();
  89. }
  90. </script>
  91. </body>
  92. </html>