smart.html 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246
  1. <!DOCTYPE html>
  2. <meta name="apple-mobile-web-app-capable" content="yes" />
  3. <meta name="viewport" content="user-scalable=no, width=device-width, initial-scale=0.6, maximum-scale=0.6" />
  4. <html>
  5. <head>
  6. <meta charset="UTF-8">
  7. <script type='text/javascript' charset='utf-8'>
  8. // Hides mobile browser's address bar when page is done loading.
  9. window.addEventListener('load', function(e) {
  10. setTimeout(function() {
  11. window.scrollTo(0, 1);
  12. }, 1);
  13. }, false);
  14. </script>
  15. <title>ArOZ Onlineβ</title>
  16. <link rel="stylesheet" href="../../../script/tocas/tocas.css">
  17. <script src="../../../script/tocas/tocas.js"></script>
  18. <script src="../../../script/jquery.min.js"></script>
  19. <!--<script src="../../../script/ao_module.js"></script>-->
  20. <style>
  21. </style>
  22. </head>
  23. <body style="background-color: rgba(255, 255, 255,0.9)">
  24. <div class="ts relaxed separated mini compact buttons">
  25. <button onclick="showSMART(this)" class="ts button">Health Info</button>
  26. <button onclick="shortTest(this)" class="ts button">S.M.A.R.T Test</button>
  27. </div>
  28. <div class="ts divider"></div>
  29. <div class="ts bottom attached vertical menu" id="mainmenu">
  30. </div>
  31. <div id="mainmenumsg" style="display:none;">
  32. <p>Location: <span id="location"></span></p>
  33. <p>Temperature: <span id="temperature"></span></p>
  34. <p>Serial Number: <span id="serial_number"></span></p>
  35. <p>Firmware Version: <span id="firmware_version"></span></p>
  36. <p>SMART Support: <span id="smart"></span></p>
  37. </div>
  38. <div>
  39. </div>
  40. <!-- use for displaying dialog , for VDI user , use VDI module instead -->
  41. <div class="ts modals dimmer">
  42. <dialog id="modal" class="ts basic modal" style="background-color: white;color: black!important" open>
  43. <div class="content" id="modaldata">
  44. </div>
  45. <div class="actions">
  46. <div class="ts fluid separated stackable buttons">
  47. <button class="ts info button">Close</button>
  48. </div>
  49. </div>
  50. </div>
  51. <div id="msgbox" class="ts bottom right snackbar">
  52. <div class="content">
  53. Your request is processing now.
  54. </div>
  55. </div>
  56. <br><br>
  57. <script>
  58. ts('.secondary.menu .item').tab();
  59. $("#mainmenu").html("");
  60. var lastSelectedObject = "";
  61. startup();
  62. function startup() {
  63. $.getJSON("../../system/disk/smart/getSMART", function(data) {
  64. $("#mainmenu").html("");
  65. if ($(data).length == 0) {
  66. msg("No harddisk detected.");
  67. MainHTML = "";
  68. MainHTML += "<div class=\"item\">";
  69. MainHTML += "<div class=\"ts comments\">";
  70. MainHTML += "<div class=\"comment\" style=\"cursor:pointer;width:98vw\">";
  71. MainHTML += "<div class=\"avatar\"><i class=\"big caution sign icon\"></i></div>";
  72. MainHTML += "<div class=\"content\">";
  73. MainHTML += "<p class=\"author\">No disk was found on this system</p>";
  74. MainHTML += "<div class=\"text\">Please make sure your disk installed correctly</div>";
  75. MainHTML += "</div>";
  76. MainHTML += "</div>";
  77. MainHTML += "</div>";
  78. MainHTML += "</div>";
  79. $("#mainmenu").append(MainHTML);
  80. }
  81. $.each(data, function(index, value) {
  82. if (value["SMART"]["smartctl"]["messages"] !== null) {
  83. if (value["SMART"]["smartctl"]["messages"][0]["severity"] == "error") {
  84. msg(value["SMART"]["smartctl"]["messages"][0]["string"]);
  85. return;
  86. }
  87. }
  88. if (value["SMART"]["user_capacity"] !== null) {
  89. var capacity = disksize(value["SMART"]["user_capacity"]["bytes"]);
  90. } else {
  91. var capacity = "Unknown";
  92. }
  93. if (typeof value["SMART"]["model_name"] !== null) {
  94. var model_name = value["SMART"]["model_name"];
  95. } else {
  96. var model_name = "Unknown";
  97. }
  98. //for extended
  99. var location = "This Host";
  100. if (value["SMART"]["temperature"] !== null) {
  101. var temperatureF = Math.round(1.8 * parseInt(value["SMART"]["temperature"]["current"]) + 32);
  102. var temperature = value["SMART"]["temperature"]["current"] + "°C | " + temperatureF + "°F";
  103. } else {
  104. var temperature = "Unknown";
  105. }
  106. if (value["SMART"]["serial_number"] !== null) {
  107. var serial_number = value["SMART"]["serial_number"];
  108. } else {
  109. var serial_number = "Unknown";
  110. }
  111. if (value["SMART"]["firmware_version"] !== null) {
  112. var firmware_version = value["SMART"]["firmware_version"];
  113. } else {
  114. var firmware_version = "Unknown";
  115. }
  116. if (value["SMART"]["ata_smart_attributes"] !== null) {
  117. var smart = "Yes";
  118. var icon = "info";
  119. $.each(value["SMART"]["ata_smart_attributes"]["table"], function(indexf, valuef) {
  120. if (typeof valuef["when_failed"] !== "undefined") {
  121. if (valuef["when_failed"] !== "") { //probabally FAILING_NOW, but not sure.
  122. icon = "negative";
  123. }
  124. }
  125. });
  126. } else {
  127. var smart = "No";
  128. }
  129. $("#mainmenu").append('<div class="item" ondblclick="showSMART()" onClick="selected(this);" diskid="' + value["Port"] + '" location="' + location + '" temperature="' + temperature + '" serial_number="' + serial_number + '" firmware_version="' + firmware_version + '" smart="' + smart + '"><div class="ts comments"><div class="comment" style="cursor:pointer;"><div class="avatar"><i class="inverted ' + icon + ' circular disk outline icon"></i></div><div class="content"><p class="author">' + value["Port"] + '</p><div class="text">' + model_name + ", " + capacity + '</div></div></div></div></div>');
  130. });
  131. });
  132. }
  133. function showSMART() {
  134. if ($("div[active='true']").length == 0) {
  135. msg("Nothing selected");
  136. } else {
  137. window.history.pushState("", "", "?disk=" + $("div[active='true']").attr("diskid"));
  138. showDialog("table.html?disk=" + $("div[active='true']").attr("diskid"), 300, 300);
  139. }
  140. }
  141. function shortTest() {
  142. if ($("div[active='true']").length == 0) {
  143. msg("Nothing selected");
  144. } else {
  145. window.history.pushState("", "", "?disk=" + $("div[active='true']").attr("diskid"));
  146. showDialog("dotest.html?disk=" + $("div[active='true']").attr("diskid"), 300, 300);
  147. }
  148. }
  149. function selected(object) {
  150. if (lastSelectedObject != "") {
  151. $(lastSelectedObject).css("border-style", "solid");
  152. $(lastSelectedObject).css("border-width", "0px");
  153. $(lastSelectedObject).css("border-color", "#ffffff");
  154. $(lastSelectedObject).css("background-color", "#ffffff");
  155. $(lastSelectedObject).removeAttr("style");
  156. $(lastSelectedObject).removeAttr("active");
  157. $(lastSelectedObject).children("div[class='ts comments']").children("div[class='comment']").children("div[class='avatar']").children("i[name='arrow']").attr("class", "large chevron down icon")
  158. }
  159. $(object).css("border-style", "solid");
  160. $(object).css("border-width", "1px");
  161. $(object).css("border-color", "#5998ff");
  162. $(object).css("background-color", "#e2fdff");
  163. $(object).attr("active", "true");
  164. $(object).attr("active", "true");
  165. $(object).children("div[class='ts comments']").children("div[class='comment']").children("div[class='avatar']").children("i[name='arrow']").attr("class", "large chevron up icon")
  166. $("#mainmenumsg").appendTo(object);
  167. $("#mainmenumsg").show();
  168. $("#location").text($(object).attr("location"));
  169. $("#temperature").text($(object).attr("temperature"));
  170. $("#serial_number").text($(object).attr("serial_number"));
  171. $("#firmware_version").text($(object).attr("firmware_version"));
  172. $("#smart").text($(object).attr("smart"));
  173. lastSelectedObject = object;
  174. }
  175. function msg(content) {
  176. ts('.snackbar').snackbar({
  177. content: content,
  178. actionEmphasis: 'negative',
  179. });
  180. }
  181. function disksize(size) {
  182. if (size >= 1000000000000) {
  183. return Math.floor(size / 1000000000000) + " TB";
  184. } else if (size >= 1000000000) {
  185. return Math.floor(size / 1000000000) + " GB";
  186. } else if (size >= 1000000) {
  187. return Math.floor(size / 1000000) + " MB";
  188. } else if (size >= 1024) {
  189. return Math.floor(size / 1000) + " KB";
  190. } else {
  191. return size + " Bytes";
  192. }
  193. }
  194. function showDialog(href, x, y) {
  195. $("#modaldata").html("");
  196. if (typeof loadViaSystemSetting !== "undefined") {
  197. if (loadViaSystemSetting == true) {
  198. href = "../disk/smart/" + href;
  199. }
  200. }
  201. $("#modaldata").load(href);
  202. ts('#modal').modal({
  203. approve: '.info',
  204. onApprove: function() {
  205. try {
  206. clearInterval(timer);
  207. } catch (err) {}
  208. }
  209. }).modal("show")
  210. }
  211. </script>
  212. </body>
  213. </html>