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 17 kB

3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422
  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, repoPath, ID) {
  16. let container = document.querySelector(`#log${version_name}`);
  17. let scrollTop = container.scrollTop;
  18. let scrollHeight = container.scrollHeight;
  19. let clientHeight = container.clientHeight;
  20. let scrollLeft = container.scrollLeft;
  21. if (
  22. (parseInt(scrollTop) + clientHeight == scrollHeight ||
  23. parseInt(scrollTop) + clientHeight + 1 == scrollHeight ||
  24. parseInt(scrollTop) + clientHeight - 1 == scrollHeight) &&
  25. scrollLeft === 0
  26. ) {
  27. let end_line = $(`#log${version_name} input[name=end_line]`).val();
  28. $.get(
  29. `/api/v1/repos/${repoPath}/${ID}/log?version_name=${version_name}&base_line=${end_line}&lines=50&order=desc`,
  30. (data) => {
  31. if (data.Lines == 0) {
  32. $(`.message${version_name} #header`).text("您已翻阅至日志底部");
  33. $(`.message${version_name}`).css("display", "block");
  34. setTimeout(function () {
  35. $(`.message${version_name}`).css("display", "none");
  36. }, 1000);
  37. } else {
  38. console.log("end_line" + end_line + " data.EndLine=" + data.EndLine);
  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/${repoPath}/${ID}/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. console.log("log_com " + `#log${version_name}`);
  64. $(`#log${version_name} input[name=start_line]`).val(data.StartLine); //如果变动就改变所对应的值
  65. $(`#log${version_name}`).prepend("<pre>" + data.Content);
  66. }
  67. }
  68. ).fail(function (err) {
  69. console.log(err);
  70. });
  71. }
  72. }
  73. const fn = debounce(logScroll, 500);
  74. $(".log-scroll").scroll(function () {
  75. let version_name = $(this).data("version");
  76. let ID = $(`#accordion${version_name}`).data("jobid");
  77. let repoPath = $(`#accordion${version_name}`).data("repopath");
  78. fn(version_name, repoPath, ID);
  79. });
  80. function scrollAnimation(dom, currentY, targetY, currentX) {
  81. let needScrollTop = targetY - currentY;
  82. let _currentY = currentY;
  83. setTimeout(() => {
  84. // 一次调用滑动帧数,每次调用会不一样
  85. //取总距离的十分之一
  86. const dist = Math.ceil(needScrollTop / 10);
  87. _currentY += dist;
  88. //移动一个十分之一
  89. dom.scrollTo(currentX || 0, _currentY, "smooth");
  90. // 如果移动幅度小于十个像素,直接移动,否则递归调用,实现动画效果
  91. if (needScrollTop > 10 || needScrollTop < -10) {
  92. scrollAnimation(dom, _currentY, targetY);
  93. } else {
  94. dom.scrollTo(0, targetY, "smooth");
  95. }
  96. }, 1);
  97. }
  98. $(".log_top").click(function () {
  99. // let logContentDom = document.querySelector('.log')
  100. // if(!logContentDom)
  101. // return
  102. // let version_name = $('.log_top').data('version')
  103. let version_name = $(this).data("version");
  104. let logContentDom = document.querySelector(`#log${version_name}`);
  105. let ID = $(`#accordion${version_name}`).data("jobid");
  106. let repoPath = $(`#accordion${version_name}`).data("repopath");
  107. $(`#log_file${version_name}`).siblings("pre").remove();
  108. $(".ui.inverted.active.dimmer").css("display", "block");
  109. $.get(
  110. `/api/v1/repos/${repoPath}/${ID}/log?version_name=${version_name}&base_line=&lines=50&order=asc`,
  111. (data) => {
  112. console.log("log_com_2222 " + `#log${version_name}`);
  113. $(".ui.inverted.active.dimmer").css("display", "none");
  114. $(`#log${version_name} input[name=end_line]`).val(data.EndLine); //如果变动就改变所对应的值
  115. $(`#log${version_name} input[name=start_line]`).val(data.StartLine);
  116. $(`#log${version_name}`).prepend("<pre>" + data.Content);
  117. $(`.message${version_name} #header`).text("您已翻阅至日志顶部");
  118. $(`.message${version_name}`).css("display", "block");
  119. setTimeout(function () {
  120. $(`.message${version_name}`).css("display", "none");
  121. }, 1000);
  122. scrollAnimation(logContentDom, logContentDom.scrollTop, 0);
  123. }
  124. );
  125. });
  126. $(".log_bottom").click(function (e) {
  127. let version_name = $(this).data("version");
  128. let logContentDom = document.querySelector(`#log${version_name}`);
  129. let ID = $(`#accordion${version_name}`).data("jobid");
  130. let repoPath = $(`#accordion${version_name}`).data("repopath");
  131. $(`#log_file${version_name}`).siblings("pre").remove();
  132. let end_line = $(`#log${version_name} input[name=end_line]`).val();
  133. $(".ui.inverted.active.dimmer").css("display", "block");
  134. $.get(
  135. `/api/v1/repos/${repoPath}/${ID}/log?version_name=${version_name}&base_line=&lines=50&order=desc`,
  136. (data) => {
  137. $(".ui.inverted.active.dimmer").css("display", "none");
  138. if (!data.CanLogDownload) {
  139. $(`#${version_name}-log-down`)
  140. .removeClass("ti-download-file")
  141. .addClass("disabled");
  142. }
  143. console.log("log_com 44 " + `#log${version_name}`);
  144. $(`#log${version_name} input[name=end_line]`).val(data.EndLine); //如果变动就改变所对应的值
  145. $(`#log${version_name} input[name=start_line]`).val(data.StartLine);
  146. $(`#log${version_name}`).append("<pre>" + data.Content);
  147. $.get(
  148. `/api/v1/repos/${repoPath}/${ID}/log?version_name=${version_name}&base_line=${data.EndLine}&lines=50&order=desc`,
  149. (data) => {
  150. $(".ui.inverted.active.dimmer").css("display", "none");
  151. if (data.Lines == 0) {
  152. $(`.message${version_name} #header`).text("您已翻阅至日志底部");
  153. $(`.message${version_name}`).css("display", "block");
  154. setTimeout(function () {
  155. $(`.message${version_name}`).css("display", "none");
  156. }, 1000);
  157. } else {
  158. console.log("end_line 33 " + end_line + " data.EndLine=" + data.EndLine);
  159. if (end_line === data.EndLine || end_line === "") {
  160. return;
  161. } else {
  162. $(`#log${version_name} input[name=end_line]`).val(data.EndLine);
  163. $(`#log${version_name}`).append("<pre>" + data.Content);
  164. }
  165. }
  166. }
  167. ).fail(function (err) {
  168. console.log(err);
  169. });
  170. scrollAnimation(
  171. logContentDom,
  172. logContentDom.scrollTop + 1,
  173. logContentDom.scrollHeight - logContentDom.clientHeight
  174. );
  175. }
  176. );
  177. });
  178. function loadLog(version_name) {
  179. document.getElementById("mask").style.display = "block";
  180. $.get(
  181. `/api/v1/repos/${userName}/${repoPath}/grampus/train-job/${jobID}/log?version_name=${version_name}&lines=50&order=asc`,
  182. (data) => {
  183. $("input[name=end_line]").val(data.EndLine);
  184. $("input[name=start_line]").val(data.StartLine);
  185. $(`#log_file${version_name}`).text(data.Content);
  186. document.getElementById("mask").style.display = "none";
  187. }
  188. ).fail(function (err) {
  189. document.getElementById("mask").style.display = "none";
  190. console.log(err);
  191. });
  192. }
  193. $(".refresh-status").click(function (e) {
  194. let version_name = $(this).data("version");
  195. let ID = $(`#accordion${version_name}`).data("jobid");
  196. let repoPath = $(`#accordion${version_name}`).data("repopath");
  197. refreshStatusShow(version_name, ID, repoPath);
  198. $(`.log-info-${version_name} .log_bottom`).trigger("click");
  199. e.stopPropagation();
  200. });
  201. $(".stop-show-version").click(function (e) {
  202. const ID = this.dataset.jobid;
  203. const repoPath = this.dataset.repopath;
  204. const version_name = this.dataset.version;
  205. const url = `/api/v1/repos/${repoPath}/${ID}/stop_version`;
  206. $.post(url, { version_name: version_name }, (data) => {
  207. if (data.StatusOK === 0) {
  208. $(`#${version_name}-stop`).removeClass("blue");
  209. $(`#${version_name}-stop`).addClass("disabled");
  210. refreshStatusShow(version_name, ID, repoPath);
  211. }
  212. }).fail(function (err) {
  213. console.log(err);
  214. });
  215. e.stopPropagation();
  216. });
  217. function refreshStatusShow(version_name, ID, repoPath) {
  218. $.get(
  219. `/api/v1/repos/${repoPath}/${ID}?version_name=${version_name}`,
  220. (data) => {
  221. //accroding下的状态
  222. $(`#${version_name}-status-span span`).text(data.JobStatus);
  223. //accroding下的状态图标
  224. $(`#${version_name}-status-span i`).attr("class", data.JobStatus);
  225. //accroding下的运行时长
  226. $(`#${version_name}-duration-span`).text(data.JobDuration);
  227. //配置信息详情页的状态
  228. $(`#${version_name}-status`).text(data.JobStatus);
  229. //配置信息详情页的状态
  230. $(`#${version_name}-duration`).text(data.JobDuration);
  231. }
  232. ).fail(function (err) {
  233. console.log(err);
  234. });
  235. }
  236. //
  237. $(".content-pad").on("click", ".load-model-file", function () {
  238. let downloadFlag = $(this).data("download-flag") || "";
  239. let gpuFlag = $(this).data("gpu-flag") || "";
  240. let version_name = $(this).data("version");
  241. let parents = $(this).data("parents");
  242. let filename = $(this).data("filename");
  243. let init = $(this).data("init") || "";
  244. let path = $(this).data("path");
  245. let url = `/api/v1/repos${path}?version_name=${version_name}&parentDir=${parents}`;
  246. $.get(url, (data) => {
  247. $(`#dir_list${version_name}`).empty();
  248. if (data.Dirs) {
  249. renderDir(path, data, version_name, downloadFlag, gpuFlag);
  250. }
  251. if (init === "init") {
  252. $(`input[name=model${version_name}]`).val("");
  253. $(`input[name=modelback${version_name}]`).val(version_name);
  254. $(`#file_breadcrumb${version_name}`).empty();
  255. let htmlBread = "";
  256. if (version_name) {
  257. htmlBread += `<div class='active section'>${version_name}</div>`;
  258. } else {
  259. htmlBread += `<div class='active section'>result</div>`;
  260. }
  261. htmlBread += "<div class='divider'> / </div>";
  262. $(`#file_breadcrumb${version_name}`).append(htmlBread);
  263. } else {
  264. renderBrend(
  265. path,
  266. version_name,
  267. parents,
  268. filename,
  269. init,
  270. downloadFlag,
  271. gpuFlag
  272. );
  273. }
  274. }).fail(function (err) {
  275. console.log(err, version_name);
  276. });
  277. });
  278. function renderSize(value) {
  279. if (null == value || value == "") {
  280. return "0 Bytes";
  281. }
  282. var unitArr = new Array(
  283. "Bytes",
  284. "KB",
  285. "MB",
  286. "GB",
  287. "TB",
  288. "PB",
  289. "EB",
  290. "ZB",
  291. "YB"
  292. );
  293. var index = 0;
  294. var srcsize = parseFloat(value);
  295. index = Math.floor(Math.log(srcsize) / Math.log(1024));
  296. var size = srcsize / Math.pow(1024, index);
  297. size = size.toFixed(0); //保留的小数位数
  298. return size + unitArr[index];
  299. }
  300. function renderBrend(
  301. path,
  302. version_name,
  303. parents,
  304. filename,
  305. init,
  306. downloadFlag,
  307. gpuFlag
  308. ) {
  309. if (init == "folder") {
  310. let htmlBrend = "";
  311. let sectionName = $(
  312. `#file_breadcrumb${version_name} .active.section`
  313. ).text();
  314. let parents1 = $(`input[name=model${version_name}]`).val();
  315. let filename1 = $(`input[name=modelback${version_name}]`).val();
  316. if (parents1 === "") {
  317. $(`#file_breadcrumb${version_name} .active.section`).replaceWith(
  318. `<a class='section load-model-file' data-download-flag='${downloadFlag}' data-gpu-flag='${gpuFlag}' data-path='${path}' data-version='${version_name}' data-parents='${parents1}' data-filename='' data-init='init'>${sectionName}</a>`
  319. );
  320. } else {
  321. $(`#file_breadcrumb${version_name} .active.section`).replaceWith(
  322. `<a class='section load-model-file' data-download-flag='${downloadFlag}' data-gpu-flag='${gpuFlag}' data-path='${path}' data-version='${version_name}' data-parents='${parents1}' data-filename='${filename1}'>${sectionName}</a>`
  323. );
  324. }
  325. htmlBrend += `<div class='active section'>${filename}</div>`;
  326. htmlBrend += "<div class='divider'> / </div>";
  327. $(`#file_breadcrumb${version_name}`).append(htmlBrend);
  328. $(`input[name=model${version_name}]`).val(parents);
  329. $(`input[name=modelback${version_name}]`).val(filename);
  330. } else {
  331. $(`input[name=model${version_name}]`).val(parents);
  332. $(`input[name=modelback${version_name}]`).val(filename);
  333. let selectEle = $(`#file_breadcrumb${version_name} a.section`).filter(
  334. (index, item) => {
  335. return item.text == filename;
  336. }
  337. );
  338. selectEle.nextAll().remove();
  339. selectEle.after("<div class='divider'> / </div>");
  340. selectEle.replaceWith(`<div class='active section'>${filename}</div>`);
  341. }
  342. }
  343. function renderDir(path, data, version_name, downloadFlag, gpuFlag) {
  344. let html = "";
  345. html += "<div class='ui grid' style='margin:0;'>";
  346. html += "<div class='row' style='padding: 0;'>";
  347. html += "<div class='ui sixteen wide column' style='padding:1rem;'>";
  348. html += "<div class='dir list'>";
  349. html += "<table id='repo-files-table' class='ui single line table pad20'>";
  350. html += "<tbody>";
  351. // html += "</tbody>"
  352. for (let i = 0; i < data.Dirs.length; i++) {
  353. let dirs_size = renderSize(data.Dirs[i].Size);
  354. html += "<tr>";
  355. html += "<td class='name six wid'>";
  356. html += "<span class='truncate'>";
  357. html += "<span class='octicon octicon-file-directory'>";
  358. html += "</span>";
  359. if (data.Dirs[i].IsDir) {
  360. html += `<a class='load-model-file' data-download-flag='${downloadFlag}' data-gpu-flag='${gpuFlag}' data-path='${path}' data-version='${version_name}' data-parents='${data.Dirs[i].ParenDir}' data-filename='${data.Dirs[i].FileName}' data-init='folder'>`;
  361. html +=
  362. "<span class='fitted'><i class='folder icon' width='16' height='16' aria-hidden='true'></i>" +
  363. data.Dirs[i].FileName +
  364. "</span>";
  365. } else {
  366. if (downloadFlag) {
  367. if (gpuFlag) {
  368. if (path.includes("model_list")) {
  369. html += `<a href="${location.href}/download_model?version_name=${version_name}&fileName=${data.Dirs[i].FileName}&parentDir=${data.Dirs[i].ParenDir}&jobName=${data.task.JobName}">`;
  370. } else {
  371. html += `<a href="${location.href}/result_download?version_name=${version_name}&fileName=${data.Dirs[i].FileName}&parentDir=${data.Dirs[i].ParenDir}&jobName=${data.task.JobName}">`;
  372. }
  373. } else {
  374. if (path.includes("model_list")) {
  375. html += `<a href="${location.href}/model_download?version_name=${version_name}&file_name=${data.Dirs[i].FileName}&parent_dir=${data.Dirs[i].ParenDir}">`;
  376. } else {
  377. html += `<a href="${location.href}/result_download?version_name=${version_name}&file_name=${data.Dirs[i].FileName}&parent_dir=${data.Dirs[i].ParenDir}">`;
  378. }
  379. }
  380. } else {
  381. html += `<a class="disabled">`;
  382. }
  383. html +=
  384. "<span class='fitted'><i class='file icon' width='16' height='16' aria-hidden='true'></i>" +
  385. data.Dirs[i].FileName +
  386. "</span>";
  387. }
  388. html += "</a>";
  389. html += "</span>";
  390. html += "</td>";
  391. html += "<td class='message seven wide'>";
  392. if (data.Dirs[i].IsDir) {
  393. html += "<span class='truncate has-emoji'></span>";
  394. } else {
  395. html +=
  396. "<span class='truncate has-emoji'>" + `${dirs_size}` + "</span>";
  397. }
  398. html += "</td>";
  399. html += "<td class='text right age three wide'>";
  400. html +=
  401. "<span class='truncate has-emoji'>" + data.Dirs[i].ModTime + "</span>";
  402. html += "</td>";
  403. html += "</tr>";
  404. }
  405. html += "</tbody>";
  406. html += "</table>";
  407. html += "</div>";
  408. html += "</div>";
  409. html += "</div>";
  410. html += "</div>";
  411. $(`#dir_list${version_name}`).append(html);
  412. }
  413. }