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

cloudbrainShow.js 12 kB

3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314
  1. export default async function initCloudrainSow() {
  2. function debounce(fn, delay) {
  3. let timer;
  4. return (...args) => {
  5. // 判断定时器是否存在,清除定时器
  6. if (timer) {
  7. clearTimeout(timer);
  8. }
  9. // 重新调用setTimeout
  10. timer = setTimeout(() => {
  11. fn.apply(this, args);
  12. }, delay);
  13. };
  14. }
  15. function logScroll(version_name) {
  16. let container = document.querySelector(`#log${version_name}`);
  17. console.log(container);
  18. let scrollTop = container.scrollTop;
  19. let scrollHeight = container.scrollHeight;
  20. let clientHeight = container.clientHeight;
  21. let scrollLeft = container.scrollLeft;
  22. if (
  23. (parseInt(scrollTop) + clientHeight == scrollHeight ||
  24. parseInt(scrollTop) + clientHeight + 1 == scrollHeight ||
  25. parseInt(scrollTop) + clientHeight - 1 == scrollHeight) &&
  26. scrollLeft === 0
  27. ) {
  28. let end_line = $(`#log${version_name} input[name=end_line]`).val();
  29. $.get(
  30. `/api/v1/repos/${userName}/${repoPath}/modelarts/inference-job/${jobID}/log?version_name=${version_name}&base_line=${end_line}&lines=50&order=desc`,
  31. (data) => {
  32. if (data.Lines == 0) {
  33. $(`.message${version_name} #header`).text("您已翻阅至日志底部");
  34. $(`.message${version_name}`).css("display", "block");
  35. setTimeout(function () {
  36. $(`.message${version_name}`).css("display", "none");
  37. }, 1000);
  38. } else {
  39. if (end_line === data.EndLine) {
  40. return;
  41. } else {
  42. $(`#log${version_name} input[name=end_line]`).val(data.EndLine);
  43. $(`#log${version_name}`).append("<pre>" + data.Content);
  44. }
  45. }
  46. }
  47. ).fail(function (err) {
  48. console.log(err);
  49. });
  50. }
  51. if (scrollTop == 0 && scrollLeft == 0) {
  52. let start_line = $(`#log${version_name} input[name=start_line]`).val();
  53. $.get(
  54. `/api/v1/repos/${userName}/${repoPath}/modelarts/inference-job/${jobID}/log?version_name=${version_name}&base_line=${start_line}&lines=50&order=asc`,
  55. (data) => {
  56. if (data.Lines == 0) {
  57. $(`.message${version_name} #header`).text("您已翻阅至日志顶部");
  58. $(`.message${version_name}`).css("display", "block");
  59. setTimeout(function () {
  60. $(`.message${version_name}`).css("display", "none");
  61. }, 1000);
  62. } else {
  63. $(`#log${version_name} input[name=start_line]`).val(data.StartLine); //如果变动就改变所对应的值
  64. $(`#log${version_name}`).prepend("<pre>" + data.Content);
  65. }
  66. }
  67. ).fail(function (err) {
  68. console.log(err);
  69. });
  70. }
  71. }
  72. const fn = debounce(logScroll, 500);
  73. $(".log-scroll").scroll(function () {
  74. let version_name = $(this).data("version");
  75. fn(version_name);
  76. });
  77. function scrollAnimation(dom, currentY, targetY, currentX) {
  78. let needScrollTop = targetY - currentY;
  79. let _currentY = currentY;
  80. setTimeout(() => {
  81. // 一次调用滑动帧数,每次调用会不一样
  82. //取总距离的十分之一
  83. const dist = Math.ceil(needScrollTop / 10);
  84. _currentY += dist;
  85. //移动一个十分之一
  86. dom.scrollTo(currentX || 0, _currentY, "smooth");
  87. // 如果移动幅度小于十个像素,直接移动,否则递归调用,实现动画效果
  88. if (needScrollTop > 10 || needScrollTop < -10) {
  89. scrollAnimation(dom, _currentY, targetY);
  90. } else {
  91. dom.scrollTo(0, targetY, "smooth");
  92. }
  93. }, 1);
  94. }
  95. $(".log_top").click(function () {
  96. // let logContentDom = document.querySelector('.log')
  97. // if(!logContentDom)
  98. // return
  99. // let version_name = $('.log_top').data('version')
  100. let version_name = $(this).data("version");
  101. let logContentDom = document.querySelector(`#log${version_name}`);
  102. $(`#log_file${version_name}`).siblings("pre").remove();
  103. $.get(
  104. `/api/v1/repos/${userName}/${repoPath}/modelarts/train-job/${jobID}/log?version_name=${version_name}&base_line=&lines=50&order=asc`,
  105. (data) => {
  106. $(`#log${version_name} input[name=end_line]`).val(data.EndLine); //如果变动就改变所对应的值
  107. $(`#log${version_name} input[name=start_line]`).val(data.StartLine);
  108. $(`#log${version_name}`).prepend("<pre>" + data.Content);
  109. $(`.message${version_name} #header`).text("您已翻阅至日志顶部");
  110. $(`.message${version_name}`).css("display", "block");
  111. setTimeout(function () {
  112. $(`.message${version_name}`).css("display", "none");
  113. }, 1000);
  114. scrollAnimation(logContentDom, logContentDom.scrollTop, 0);
  115. }
  116. );
  117. });
  118. $(".log_bottom").click(function (e) {
  119. let version_name = $(this).data("version");
  120. let logContentDom = document.querySelector(`#log${version_name}`);
  121. $(`#log_file${version_name}`).siblings("pre").remove();
  122. $.get(
  123. `/api/v1/repos/${userName}/${repoPath}/modelarts/train-job/${jobID}/log?version_name=${version_name}&base_line=&lines=50&order=desc`,
  124. (data) => {
  125. $(`#log${version_name} input[name=end_line]`).val(data.EndLine); //如果变动就改变所对应的值
  126. $(`#log${version_name} input[name=start_line]`).val(data.StartLine);
  127. $(`#log${version_name}`).append("<pre>" + data.Content);
  128. $.get(
  129. `/api/v1/repos/${userName}/${repoPath}/modelarts/train-job/${jobID}/log?version_name=${version_name}&base_line=${data.EndLine}&lines=50&order=desc`,
  130. (data) => {
  131. if (data.Lines == 0) {
  132. $(`.message${version_name} #header`).text("您已翻阅至日志底部");
  133. $(`.message${version_name}`).css("display", "block");
  134. setTimeout(function () {
  135. $(`.message${version_name}`).css("display", "none");
  136. }, 1000);
  137. } else {
  138. if (end_line === data.EndLine) {
  139. return;
  140. } else {
  141. $(`#log${version_name} input[name=end_line]`).val(data.EndLine);
  142. $(`#log${version_name}`).append("<pre>" + data.Content);
  143. }
  144. }
  145. }
  146. ).fail(function (err) {
  147. console.log(err);
  148. });
  149. scrollAnimation(
  150. logContentDom,
  151. logContentDom.scrollTop + 1,
  152. logContentDom.scrollHeight - logContentDom.clientHeight
  153. );
  154. }
  155. );
  156. });
  157. //
  158. $(".content-pad").on("click", ".load-model-file", function () {
  159. console.log("11111111111");
  160. let version_name = $(this).data("version");
  161. let parents = $(this).data("parents") || "";
  162. let filename = $(this).data("filename") || "";
  163. let init = $(this).data("init") || "";
  164. let path = $(this).data("path");
  165. let url = `/api/v1/repos${path}?version_name=${version_name}&parentDir=${parents}`;
  166. console.log(url);
  167. $.get(url, (data) => {
  168. $(`#dir_list${version_name}`).empty();
  169. renderDir(path, data, version_name);
  170. if (init === "init") {
  171. $(`input[name=model${version_name}]`).val("");
  172. $(`input[name=modelback${version_name}]`).val(version_name);
  173. $(`#file_breadcrumb${version_name}`).empty();
  174. let htmlBread = "";
  175. if (version_name) {
  176. htmlBread += `<div class='active section'>${version_name}</div>`;
  177. } else {
  178. htmlBread += `<div class='active section'>result</div>`;
  179. }
  180. htmlBread += "<div class='divider'> / </div>";
  181. $(`#file_breadcrumb${version_name}`).append(htmlBread);
  182. } else {
  183. renderBrend(path, version_name, parents, filename, init);
  184. }
  185. }).fail(function (err) {
  186. console.log(err, version_name);
  187. });
  188. });
  189. function renderSize(value) {
  190. if (null == value || value == "") {
  191. return "0 Bytes";
  192. }
  193. var unitArr = new Array(
  194. "Bytes",
  195. "KB",
  196. "MB",
  197. "GB",
  198. "TB",
  199. "PB",
  200. "EB",
  201. "ZB",
  202. "YB"
  203. );
  204. var index = 0;
  205. var srcsize = parseFloat(value);
  206. index = Math.floor(Math.log(srcsize) / Math.log(1024));
  207. var size = srcsize / Math.pow(1024, index);
  208. size = size.toFixed(0); //保留的小数位数
  209. return size + unitArr[index];
  210. }
  211. function renderBrend(path, version_name, parents, filename, init) {
  212. if (init == "folder") {
  213. let htmlBrend = "";
  214. let sectionName = $(
  215. `#file_breadcrumb${version_name} .active.section`
  216. ).text();
  217. let parents1 = $(`input[name=model${version_name}]`).val();
  218. let filename1 = $(`input[name=modelback${version_name}]`).val();
  219. if (parents1 === "") {
  220. $(`#file_breadcrumb${version_name} .active.section`).replaceWith(
  221. `<a class='section load-model-file' data-path='${path}' data-version='${version_name}' data-parents='${parents1}' data-filename='' data-init='init'>${sectionName}</a>`
  222. );
  223. } else {
  224. $(`#file_breadcrumb${version_name} .active.section`).replaceWith(
  225. `<a class='section load-model-file' data-path='${path}' data-version='${version_name}' data-parents='${parents1}' data-filename='${filename1}'>${sectionName}</a>`
  226. );
  227. }
  228. htmlBrend += `<div class='active section'>${filename}</div>`;
  229. htmlBrend += "<div class='divider'> / </div>";
  230. $(`#file_breadcrumb${version_name}`).append(htmlBrend);
  231. $(`input[name=model${version_name}]`).val(parents);
  232. $(`input[name=modelback${version_name}]`).val(filename);
  233. } else {
  234. $(`input[name=model${version_name}]`).val(parents);
  235. $(`input[name=modelback${version_name}]`).val(filename);
  236. $(`#file_breadcrumb${version_name} a.section:contains(${filename})`)
  237. .nextAll()
  238. .remove();
  239. $(
  240. `#file_breadcrumb${version_name} a.section:contains(${filename})`
  241. ).replaceWith(`<div class='active section'>${filename}</div>`);
  242. $(
  243. `#file_breadcrumb${version_name} div.section:contains(${filename})`
  244. ).append("<div class='divider'> / </div>");
  245. }
  246. }
  247. function renderDir(path, data, version_name) {
  248. let html = "";
  249. html += "<div class='ui grid' style='margin:0;'>";
  250. html += "<div class='row' style='padding: 0;'>";
  251. html += "<div class='ui sixteen wide column' style='padding:1rem;'>";
  252. html += "<div class='dir list'>";
  253. html += "<table id='repo-files-table' class='ui single line table pad20'>";
  254. html += "<tbody>";
  255. // html += "</tbody>"
  256. for (let i = 0; i < data.Dirs.length; i++) {
  257. let dirs_size = renderSize(data.Dirs[i].Size);
  258. html += "<tr>";
  259. html += "<td class='name six wid'>";
  260. html += "<span class='truncate'>";
  261. html += "<span class='octicon octicon-file-directory'>";
  262. html += "</span>";
  263. if (data.Dirs[i].IsDir) {
  264. html += `<a class='load-model-file' data-path='${path}' data-version='${version_name}' data-parents='${data.Dirs[i].ParenDir}' data-filename='${data.Dirs[i].FileName}' data-init='folder'>`;
  265. html +=
  266. "<span class='fitted'><i class='folder icon' width='16' height='16' aria-hidden='true'></i>" +
  267. data.Dirs[i].FileName +
  268. "</span>";
  269. } else {
  270. if (downlaodFlag) {
  271. html += `<a href="${location.href}/result_download?version_name=${version_name}&file_name=${data.Dirs[i].FileName}&parent_dir=${data.Dirs[i].ParenDir}">`;
  272. } else {
  273. html += `<a class="disabled">`;
  274. }
  275. html +=
  276. "<span class='fitted'><i class='file icon' width='16' height='16' aria-hidden='true'></i>" +
  277. data.Dirs[i].FileName +
  278. "</span>";
  279. }
  280. html += "</a>";
  281. html += "</span>";
  282. html += "</td>";
  283. html += "<td class='message seven wide'>";
  284. if (data.Dirs[i].IsDir) {
  285. html += "<span class='truncate has-emoji'></span>";
  286. } else {
  287. html +=
  288. "<span class='truncate has-emoji'>" + `${dirs_size}` + "</span>";
  289. }
  290. html += "</td>";
  291. html += "<td class='text right age three wide'>";
  292. html +=
  293. "<span class='truncate has-emoji'>" + data.Dirs[i].ModTime + "</span>";
  294. html += "</td>";
  295. html += "</tr>";
  296. }
  297. html += "</tbody>";
  298. html += "</table>";
  299. html += "</div>";
  300. html += "</div>";
  301. html += "</div>";
  302. html += "</div>";
  303. $(`#dir_list${version_name}`).append(html);
  304. }
  305. }