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

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818
  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, max = "", lines = 60) {
  16. let container = document.querySelector(`#log${max}${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${max}]`).val();
  28. $(`#log${max}${version_name} .ui.inverted.active.dimmer`).css({
  29. "background-color": "#fff",
  30. display: "block",
  31. });
  32. $.get(
  33. `/api/v1/repos/${repoPath}/${ID}/log?version_name=${version_name}&base_line=${end_line}&lines=${lines}&order=desc`,
  34. (data) => {
  35. $(`#log${max}${version_name} .ui.inverted.active.dimmer`).css(
  36. "display",
  37. "none"
  38. );
  39. if (data.Lines == 0) {
  40. if (max) {
  41. $("body").toast({
  42. class: "info",
  43. message: `您已翻阅至日志底部,请稍后再试!`,
  44. });
  45. } else {
  46. $(`.message${version_name} #header`).text("您已翻阅至日志底部");
  47. $(`.message${version_name}`).css("display", "block");
  48. setTimeout(function () {
  49. $(`.message${version_name}`).css("display", "none");
  50. }, 1000);
  51. }
  52. } else {
  53. if (end_line === data.EndLine) {
  54. return;
  55. } else {
  56. $(`#log${version_name} input[name=end_line${max}]`).val(
  57. data.EndLine
  58. );
  59. $(`#log${max}${version_name}`).append("<pre>" + data.Content);
  60. }
  61. }
  62. }
  63. ).fail(function (err) {
  64. $(`#log${max}${version_name} .ui.inverted.active.dimmer`).css(
  65. "display",
  66. "none"
  67. );
  68. console.log(err);
  69. });
  70. }
  71. if (scrollTop == 0 && scrollLeft == 0) {
  72. let start_line = $(
  73. `#log${version_name} input[name=start_line${max}]`
  74. ).val();
  75. $(`#log${max}${version_name} .ui.inverted.active.dimmer`).css({
  76. "background-color": "#fff",
  77. display: "block",
  78. });
  79. $.get(
  80. `/api/v1/repos/${repoPath}/${ID}/log?version_name=${version_name}&base_line=${start_line}&lines=${lines}&order=asc`,
  81. (data) => {
  82. $(`#log${max}${version_name} .ui.inverted.active.dimmer`).css(
  83. "display",
  84. "none"
  85. );
  86. if (data.Lines == 0) {
  87. if (max) {
  88. $("body").toast({
  89. class: "info",
  90. message: `您已翻阅至日志顶部,请稍后再试!`,
  91. });
  92. } else {
  93. $(`.message${version_name} #header`).text("您已翻阅至日志顶部");
  94. $(`.message${version_name}`).css("display", "block");
  95. setTimeout(function () {
  96. $(`.message${version_name}`).css("display", "none");
  97. }, 1000);
  98. }
  99. } else {
  100. $(`#log${version_name} input[name=start_line${max}]`).val(
  101. data.StartLine
  102. ); //如果变动就改变所对应的值
  103. $(`#log${max}${version_name}`).prepend("<pre>" + data.Content);
  104. }
  105. }
  106. ).fail(function (err) {
  107. $(`#log${max}${version_name} .ui.inverted.active.dimmer`).css(
  108. "display",
  109. "none"
  110. );
  111. console.log(err);
  112. });
  113. }
  114. }
  115. const fn = debounce(logScroll, 500);
  116. $(".log-scroll").scroll(function () {
  117. let version_name = $(this).data("version");
  118. let ID = $(`#accordion${version_name}`).data("jobid");
  119. let repoPath = $(`#accordion${version_name}`).data("repopath");
  120. fn(version_name, repoPath, ID);
  121. });
  122. function scrollAnimation(dom, currentY, targetY, currentX) {
  123. let needScrollTop = targetY - currentY;
  124. let _currentY = currentY;
  125. setTimeout(() => {
  126. // 一次调用滑动帧数,每次调用会不一样
  127. //取总距离的十分之一
  128. const dist = Math.ceil(needScrollTop / 10);
  129. _currentY += dist;
  130. //移动一个十分之一
  131. dom.scrollTo(currentX || 0, _currentY, "smooth");
  132. // 如果移动幅度小于十个像素,直接移动,否则递归调用,实现动画效果
  133. if (needScrollTop > 10 || needScrollTop < -10) {
  134. scrollAnimation(dom, _currentY, targetY);
  135. } else {
  136. dom.scrollTo(0, targetY, "smooth");
  137. }
  138. }, 1);
  139. }
  140. function logTop(e) {
  141. let max = e.currentTarget.getAttribute("data-max") || "";
  142. let lines = !!max ? 100 : 60;
  143. let version_name = $(this).data("version");
  144. let logContentDom = document.querySelector(`#log${max}${version_name}`);
  145. let ID = $(`#accordion${version_name}`).data("jobid");
  146. let repoPath = $(`#accordion${version_name}`).data("repopath");
  147. $(`#log_file${max}${version_name}`).siblings("pre").remove();
  148. $(`#log${max}${version_name} .ui.inverted.active.dimmer`).css({
  149. "background-color": "#fff",
  150. display: "block",
  151. });
  152. $.get(
  153. `/api/v1/repos/${repoPath}/${ID}/log?version_name=${version_name}&base_line=&lines=${lines}&order=asc`,
  154. (data) => {
  155. $(`#log${max}${version_name} .ui.inverted.active.dimmer`).css(
  156. "display",
  157. "none"
  158. );
  159. $(`#log${version_name} input[name=end_line${max}]`).val(data.EndLine); //如果变动就改变所对应的值
  160. $(`#log${version_name} input[name=start_line${max}]`).val(
  161. data.StartLine
  162. );
  163. $(`#log${max}${version_name}`).prepend("<pre>" + data.Content);
  164. if (data.Lines == 0) {
  165. if (max) {
  166. $("body").toast({
  167. class: "info",
  168. message: `您已翻阅至日志顶部,请稍后再试!`,
  169. });
  170. } else {
  171. $(`.message${version_name} #header`).text("您已翻阅至日志顶部");
  172. $(`.message${version_name}`).css("display", "block");
  173. setTimeout(function () {
  174. $(`.message${version_name}`).css("display", "none");
  175. }, 1000);
  176. }
  177. }
  178. scrollAnimation(logContentDom, logContentDom.scrollTop, 0);
  179. }
  180. ).fail((err) => {
  181. $(`#log${max}${version_name} .ui.inverted.active.dimmer`).css(
  182. "display",
  183. "none"
  184. );
  185. throw err;
  186. });
  187. }
  188. function logBottom(e) {
  189. let max = e.currentTarget.getAttribute("data-max") || "";
  190. let lines = !!max ? 100 : 60;
  191. let version_name = $(this).data("version");
  192. let logContentDom = document.querySelector(`#log${max}${version_name}`);
  193. let ID = $(`#accordion${version_name}`).data("jobid");
  194. let repoPath = $(`#accordion${version_name}`).data("repopath");
  195. $(`#log_file${max}${version_name}`).siblings("pre").remove();
  196. let end_line = $(`#log${version_name} input[name=end_line${max}]`).val();
  197. $(`#log${max}${version_name} .ui.inverted.active.dimmer`).css({
  198. "background-color": "#fff",
  199. display: "block",
  200. });
  201. $.get(
  202. `/api/v1/repos/${repoPath}/${ID}/log?version_name=${version_name}&base_line=&lines=${lines}&order=desc`,
  203. (data) => {
  204. $(`#log${max}${version_name} .ui.inverted.active.dimmer`).css(
  205. "display",
  206. "none"
  207. );
  208. if (!data.CanLogDownload) {
  209. $(`#${version_name}-log-down`)
  210. .removeClass("ti-download-file")
  211. .addClass("disabled");
  212. } else {
  213. $(`#${version_name}-log-down`)
  214. .addClass("ti-download-file")
  215. .removeClass("disabled");
  216. }
  217. $(`#log${version_name} input[name=end_line${max}]`).val(data.EndLine); //如果变动就改变所对应的值
  218. if ($(this)[0].hasAttribute("data-tab")) {
  219. $(`#log${version_name} input[name=end_line-max]`).val(data.EndLine);
  220. $(`#log${version_name} input[name=start_line-max]`).val(
  221. data.StartLine
  222. );
  223. $(`#log${version_name} input[name=start_line-max-copy]`).val(
  224. data.StartLine
  225. );
  226. }
  227. $(`#log${version_name} input[name=start_line${max}]`).val(
  228. data.StartLine
  229. );
  230. $(`#log${max}${version_name}`).append("<pre>" + data.Content);
  231. $.get(
  232. `/api/v1/repos/${repoPath}/${ID}/log?version_name=${version_name}&base_line=${data.EndLine}&lines=${lines}&order=desc`,
  233. (data) => {
  234. $(`#log${max}${version_name} .ui.inverted.active.dimmer`).css(
  235. "display",
  236. "none"
  237. );
  238. if (data.Lines == 0) {
  239. if (max) {
  240. $("body").toast({
  241. class: "info",
  242. message: `您已翻阅至日志底部,请稍后再试!`,
  243. });
  244. } else {
  245. $(`.message${version_name} #header`).text("您已翻阅至日志底部");
  246. $(`.message${version_name}`).css("display", "block");
  247. setTimeout(function () {
  248. $(`.message${version_name}`).css("display", "none");
  249. }, 1000);
  250. }
  251. } else {
  252. if (end_line === data.EndLine || end_line === "") {
  253. return;
  254. } else {
  255. $(`#log${version_name} input[name=end_line${max}]`).val(
  256. data.EndLine
  257. );
  258. if ($(this)[0].hasAttribute("data-tab")) {
  259. $(`#log${version_name} input[name=end_line-max]`).val(
  260. data.EndLine
  261. );
  262. }
  263. $(`#log${max}${version_name}`).append("<pre>" + data.Content);
  264. }
  265. }
  266. }
  267. ).fail(function (err) {
  268. $(`#log${max}${version_name} .ui.inverted.active.dimmer`).css(
  269. "display",
  270. "none"
  271. );
  272. console.log(err);
  273. });
  274. let test = $(`#log_file${version_name}`).nextAll();
  275. $(`#log${version_name} input[name=init_log]`).val(test[0].innerHTML);
  276. scrollAnimation(
  277. logContentDom,
  278. logContentDom.scrollTop + 1,
  279. logContentDom.scrollHeight - logContentDom.clientHeight - 10
  280. );
  281. }
  282. ).fail((err) => {
  283. $(`#log${version_name} .ui.inverted.active.dimmer`).css(
  284. "display",
  285. "none"
  286. );
  287. throw err;
  288. });
  289. }
  290. $(".log_top").click(logTop);
  291. $(".log_bottom").click(logBottom);
  292. // $(".log-scroll-max").scroll();
  293. $(".full-log-dialog").click(function () {
  294. let version_name = $(this).data("version");
  295. let log_type = $(this).data("log-type") || "";
  296. let logContentDom = document.querySelector(`#log-max${version_name}`);
  297. $(`.ui.modal.max-full-log${version_name}`)
  298. .modal({
  299. closable: false,
  300. onShow: function () {
  301. $(".ui.dimmer.modals").css({
  302. "background-color": "rgb(136, 136, 136,0.7)",
  303. });
  304. $(".log-scroll-max .ui.inverted.active.dimmer").css(
  305. "display",
  306. "none"
  307. );
  308. $(".file-info #log-file-title").text(
  309. $(".full-log-dialog").data("log")
  310. );
  311. $(".file-info #log-file-exit").text(
  312. $(".full-log-dialog").data("exit")
  313. );
  314. },
  315. onVisible: function () {
  316. $(`#log-max${version_name}`).append(
  317. "<pre>" + $(`#log${version_name} input[name=init_log]`).val()
  318. );
  319. scrollAnimation(
  320. logContentDom,
  321. logContentDom.scrollTop + 1,
  322. logContentDom.scrollHeight - logContentDom.clientHeight
  323. );
  324. if (log_type !== "c2Net") {
  325. $(".log-scroll-max").bind("scroll", function () {
  326. let version_name = $(this).data("version");
  327. let ID = $(`#accordion${version_name}`).data("jobid");
  328. let repoPath = $(`#accordion${version_name}`).data("repopath");
  329. fn(version_name, repoPath, ID, "-max", 100);
  330. });
  331. }
  332. $(".log_bottom-max").bind("click", logBottom);
  333. $(".log_top-max").bind("click", logTop);
  334. },
  335. onHide: function () {
  336. let startLine = $(
  337. `#log${version_name} input[name=start_line-max-copy]`
  338. ).val();
  339. $(`#log_file-max${version_name}`).siblings("pre").remove();
  340. $(`#log${version_name} input[name=start_line-max]`).val(startLine);
  341. $(".log-scroll-max").unbind("scroll");
  342. $(".log_bottom-max").unbind("click");
  343. $(".log_top-max").unbind("click");
  344. },
  345. })
  346. .modal("show");
  347. });
  348. function loadLog(version_name) {
  349. document.getElementById("mask").style.display = "block";
  350. $.get(
  351. `/api/v1/repos/${userName}/${repoPath}/grampus/train-job/${jobID}/log?version_name=${version_name}&lines=50&order=asc`,
  352. (data) => {
  353. $("input[name=end_line]").val(data.EndLine);
  354. $("input[name=start_line]").val(data.StartLine);
  355. $(`#log_file${version_name}`).text(data.Content);
  356. document.getElementById("mask").style.display = "none";
  357. }
  358. ).fail(function (err) {
  359. document.getElementById("mask").style.display = "none";
  360. console.log(err);
  361. });
  362. }
  363. $(".refresh-status").click(function (e) {
  364. let version_name = $(this).data("version");
  365. let ID = $(`#accordion${version_name}`).data("jobid");
  366. let repoPath = $(`#accordion${version_name}`).data("repopath");
  367. refreshStatusShow(version_name, ID, repoPath);
  368. $(`.log-info-${version_name} .log_bottom`).trigger("click");
  369. e.stopPropagation();
  370. });
  371. $(".stop-show-version").click(function (e) {
  372. const ID = this.dataset.jobid;
  373. const repoPath = this.dataset.repopath;
  374. const version_name = this.dataset.version;
  375. const url = `/api/v1/repos/${repoPath}/${ID}/stop_version`;
  376. $.post(url, { version_name: version_name }, (data) => {
  377. if (data.StatusOK === 0) {
  378. $(`#${version_name}-stop`).removeClass("blue");
  379. $(`#${version_name}-stop`).addClass("disabled");
  380. refreshStatusShow(version_name, ID, repoPath);
  381. }
  382. }).fail(function (err) {
  383. console.log(err);
  384. });
  385. e.stopPropagation();
  386. });
  387. $(".delete-show-version").click(function (e) {
  388. const ID = this.dataset.jobid;
  389. const repoPath = this.dataset.repopath;
  390. const version_name = this.dataset.version;
  391. const url = `/api/v1/repos/${repoPath}/${ID}/del_version`;
  392. $(".ui.basic.modal")
  393. .modal({
  394. onApprove: function () {
  395. $.post(url, { version_name: version_name }, (data) => {
  396. if (data.StatusOK === 0) {
  397. if (data.VersionListCount === 0) {
  398. location.href = `/${repoPath}`;
  399. } else {
  400. $("#accordion" + version_name).remove();
  401. }
  402. refreshStatusShow(version_name, ID, repoPath);
  403. } else {
  404. return;
  405. }
  406. }).fail(function (err) {
  407. console.log(err);
  408. });
  409. },
  410. })
  411. .modal("show");
  412. e.stopPropagation();
  413. });
  414. function refreshStatusShow(version_name, ID, repoPath) {
  415. $.get(
  416. `/api/v1/repos/${repoPath}/${ID}?version_name=${version_name}`,
  417. (data) => {
  418. //accroding下的状态
  419. $(`#${version_name}-status-span span`).text(data.JobStatus);
  420. //accroding下的状态图标
  421. $(`#${version_name}-status-span i`).attr("class", data.JobStatus);
  422. //accroding下的运行时长
  423. $(`#${version_name}-duration-span`).text(data.JobDuration);
  424. //配置信息详情页的状态
  425. $(`#${version_name}-status`).text(data.JobStatus);
  426. //配置信息详情页的状态
  427. $(`#${version_name}-duration`).text(data.JobDuration);
  428. }
  429. ).fail(function (err) {
  430. console.log(err);
  431. });
  432. }
  433. //
  434. $(".content-pad").on("click", ".load-model-file", function () {
  435. let downloadFlag = $(this).data("download-flag") || "";
  436. let gpuFlag = $(this).data("gpu-flag") || "";
  437. let version_name = $(this).data("version");
  438. let parents = $(this).data("parents");
  439. let filename = $(this).data("filename");
  440. let init = $(this).data("init") || "";
  441. let path = $(this).data("path");
  442. let url = `/api/v1/repos${path}?version_name=${version_name}&parentDir=${parents}`;
  443. $.get(url, (data) => {
  444. $(`#dir_list${version_name}`).empty();
  445. if (data.Dirs) {
  446. renderDir(path, data, version_name, downloadFlag, gpuFlag);
  447. }
  448. if (init === "init") {
  449. $(`input[name=model${version_name}]`).val("");
  450. $(`input[name=modelback${version_name}]`).val(version_name);
  451. $(`#file_breadcrumb${version_name}`).empty();
  452. let htmlBread = "";
  453. if (version_name) {
  454. htmlBread += `<div class='active section'>${version_name}</div>`;
  455. } else {
  456. htmlBread += `<div class='active section'>result</div>`;
  457. }
  458. htmlBread += "<div class='divider'> / </div>";
  459. $(`#file_breadcrumb${version_name}`).append(htmlBread);
  460. } else {
  461. renderBrend(
  462. path,
  463. version_name,
  464. parents,
  465. filename,
  466. init,
  467. downloadFlag,
  468. gpuFlag
  469. );
  470. }
  471. }).fail(function (err) {
  472. console.log(err, version_name);
  473. });
  474. });
  475. function renderSize(value) {
  476. if (null == value || value == "") {
  477. return "0 Bytes";
  478. }
  479. var unitArr = new Array(
  480. "Bytes",
  481. "KB",
  482. "MB",
  483. "GB",
  484. "TB",
  485. "PB",
  486. "EB",
  487. "ZB",
  488. "YB"
  489. );
  490. var index = 0;
  491. var srcsize = parseFloat(value);
  492. index = Math.floor(Math.log(srcsize) / Math.log(1024));
  493. var size = srcsize / Math.pow(1024, index);
  494. size = size.toFixed(0); //保留的小数位数
  495. return size + unitArr[index];
  496. }
  497. function renderBrend(
  498. path,
  499. version_name,
  500. parents,
  501. filename,
  502. init,
  503. downloadFlag,
  504. gpuFlag
  505. ) {
  506. if (init == "folder") {
  507. let htmlBrend = "";
  508. let sectionName = $(
  509. `#file_breadcrumb${version_name} .active.section`
  510. ).text();
  511. let parents1 = $(`input[name=model${version_name}]`).val();
  512. let filename1 = $(`input[name=modelback${version_name}]`).val();
  513. if (parents1 === "") {
  514. $(`#file_breadcrumb${version_name} .active.section`).replaceWith(
  515. `<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>`
  516. );
  517. } else {
  518. $(`#file_breadcrumb${version_name} .active.section`).replaceWith(
  519. `<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>`
  520. );
  521. }
  522. htmlBrend += `<div class='active section'>${filename}</div>`;
  523. htmlBrend += "<div class='divider'> / </div>";
  524. $(`#file_breadcrumb${version_name}`).append(htmlBrend);
  525. $(`input[name=model${version_name}]`).val(parents);
  526. $(`input[name=modelback${version_name}]`).val(filename);
  527. } else {
  528. $(`input[name=model${version_name}]`).val(parents);
  529. $(`input[name=modelback${version_name}]`).val(filename);
  530. let selectEle = $(`#file_breadcrumb${version_name} a.section`).filter(
  531. (index, item) => {
  532. return item.text == filename;
  533. }
  534. );
  535. selectEle.nextAll().remove();
  536. selectEle.after("<div class='divider'> / </div>");
  537. selectEle.replaceWith(`<div class='active section'>${filename}</div>`);
  538. }
  539. }
  540. function renderDir(path, data, version_name, downloadFlag, gpuFlag) {
  541. let html = "";
  542. html += "<div class='ui grid' style='margin:0;'>";
  543. html += "<div class='row' style='padding: 0;'>";
  544. html += "<div class='ui sixteen wide column' style='padding:1rem;'>";
  545. html += "<div class='dir list'>";
  546. html += "<table id='repo-files-table' class='ui single line table pad20'>";
  547. html += "<tbody>";
  548. // html += "</tbody>"
  549. for (let i = 0; i < data.Dirs.length; i++) {
  550. let dirs_size = renderSize(data.Dirs[i].Size);
  551. html += "<tr>";
  552. html += "<td class='name six wid'>";
  553. html += "<span class='truncate'>";
  554. html += "<span class='octicon octicon-file-directory'>";
  555. html += "</span>";
  556. if (data.Dirs[i].IsDir) {
  557. 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'>`;
  558. html +=
  559. "<span class='fitted'><i class='folder icon' width='16' height='16' aria-hidden='true'></i>" +
  560. data.Dirs[i].FileName +
  561. "</span>";
  562. } else {
  563. if (downloadFlag) {
  564. if (gpuFlag) {
  565. if (path.includes("model_list")) {
  566. 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}">`;
  567. } else {
  568. 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}">`;
  569. }
  570. } else {
  571. if (path.includes("model_list")) {
  572. html += `<a href="${location.href}/model_download?version_name=${version_name}&file_name=${data.Dirs[i].FileName}&parent_dir=${data.Dirs[i].ParenDir}">`;
  573. } else {
  574. html += `<a href="${location.href}/result_download?version_name=${version_name}&file_name=${data.Dirs[i].FileName}&parent_dir=${data.Dirs[i].ParenDir}">`;
  575. }
  576. }
  577. } else {
  578. html += `<a class="disabled">`;
  579. }
  580. html +=
  581. "<span class='fitted'><i class='file icon' width='16' height='16' aria-hidden='true'></i>" +
  582. data.Dirs[i].FileName +
  583. "</span>";
  584. }
  585. html += "</a>";
  586. html += "</span>";
  587. html += "</td>";
  588. html += "<td class='message1 seven wide'>";
  589. if (data.Dirs[i].IsDir) {
  590. html += "<span class='truncate has-emoji'></span>";
  591. } else {
  592. html +=
  593. "<span class='truncate has-emoji'>" + `${dirs_size}` + "</span>";
  594. }
  595. html += "</td>";
  596. html += "<td class='text right age three wide'>";
  597. html +=
  598. "<span class='truncate has-emoji'>" + data.Dirs[i].ModTime + "</span>";
  599. html += "</td>";
  600. html += "</tr>";
  601. }
  602. html += "</tbody>";
  603. html += "</table>";
  604. html += "</div>";
  605. html += "</div>";
  606. html += "</div>";
  607. html += "</div>";
  608. $(`#dir_list${version_name}`).append(html);
  609. }
  610. let nameMap, nameList;
  611. let RepoLink = $(".cloudbrain-type").data("repo-link");
  612. let type = $(".cloudbrain-type").data("cloudbrain-type");
  613. let flagModel = $(".cloudbrain-type").data("flag-model");
  614. // 获取模型列表和模型名称对应的模型版本
  615. $(document).ready(function () {
  616. if (!flagModel) return;
  617. else {
  618. $.get(
  619. `${RepoLink}/modelmanage/query_model_for_predict?type=${type}`,
  620. (data) => {
  621. nameMap = data.nameMap;
  622. nameList = data.nameList;
  623. let html = `<div class="item"></div>`;
  624. nameList.forEach((element) => {
  625. html += `<div class="item" data-value=${element}>${element}</div>`;
  626. });
  627. if (nameList.length !== 0) {
  628. $("#model_name").append(html);
  629. }
  630. let faildModelName = $('input[name="model_name"]').val();
  631. let faildModelVersion = $('input[name="model_version"]').val();
  632. let dataID;
  633. // 新建错误的表单返回初始化
  634. if (faildModelName && nameList.includes(faildModelName)) {
  635. $("#select_model").dropdown("set text", faildModelName);
  636. $("#select_model").dropdown("set value", faildModelName);
  637. nameMap[faildModelName].forEach((element) => {
  638. if (element.Version === faildModelVersion) {
  639. dataID = element.ID;
  640. }
  641. });
  642. initModelVerison(faildModelName, nameMap, faildModelVersion);
  643. initModelckpt(dataID);
  644. }
  645. }
  646. );
  647. }
  648. $("#select_model").dropdown({
  649. onChange: function (value, text, $selectedItem) {
  650. $("#model_name_version").empty();
  651. if (value) {
  652. let html = "";
  653. nameMap[value].forEach((element) => {
  654. let { TrainTaskInfo } = element;
  655. TrainTaskInfo = JSON.parse(TrainTaskInfo);
  656. html += `<div class="item" data-label="${element.Label}" data-id="${element.ID}" data-value="${element.Path}">${element.Version}</div>`;
  657. });
  658. $("#model_name_version").append(html);
  659. const initVersionText = $(
  660. "#model_name_version div.item:first-child"
  661. ).text();
  662. const initVersionValue = $(
  663. "#model_name_version div.item:first-child"
  664. ).data("value");
  665. $("#select_model_version").dropdown("set text", initVersionText);
  666. $("#select_model_version").dropdown(
  667. "set value",
  668. initVersionValue,
  669. initVersionText,
  670. $("#model_name_version div.item:first-child")
  671. );
  672. } else {
  673. $("#select_model_version").dropdown("set text", "");
  674. $("#select_model_version").dropdown("set value", "");
  675. $("#select_model_checkpoint").dropdown("set text", "");
  676. $("#select_model_checkpoint").dropdown("set value", "");
  677. }
  678. },
  679. });
  680. $("#select_model_version").dropdown({
  681. onChange: function (value, text, $selectedItem) {
  682. if (!value) return;
  683. const dataID =
  684. $selectedItem && $selectedItem[0].getAttribute("data-id");
  685. $("input#ai_model_version").val(text);
  686. $("#select_model_checkpoint").dropdown("set text", "");
  687. $("#select_model_checkpoint").addClass("loading");
  688. $("#model_checkpoint").empty();
  689. let html = "";
  690. loadCheckpointList(dataID).then((res) => {
  691. res.forEach((element) => {
  692. const ckptSuffix = element.FileName.split(".");
  693. const loadCheckpointFile = [
  694. "ckpt",
  695. "pb",
  696. "h5",
  697. "json",
  698. "pkl",
  699. "pth",
  700. "t7",
  701. "pdparams",
  702. "onnx",
  703. "pbtxt",
  704. "keras",
  705. "mlmodel",
  706. "cfg",
  707. "pt",
  708. ];
  709. if (
  710. !element.IsDir &&
  711. loadCheckpointFile.includes(ckptSuffix[ckptSuffix.length - 1])
  712. ) {
  713. html += `<div class="item" data-value=${element.FileName}>${element.FileName}</div>`;
  714. }
  715. });
  716. $("#model_checkpoint").append(html);
  717. $("#select_model_checkpoint").removeClass("loading");
  718. const initVersionText = $(
  719. "#model_checkpoint div.item:first-child"
  720. ).text();
  721. const initVersionValue = $(
  722. "#model_checkpoint div.item:first-child"
  723. ).data("value");
  724. $("#select_model_checkpoint").dropdown("set text", initVersionText);
  725. $("#select_model_checkpoint").dropdown(
  726. "set value",
  727. initVersionValue,
  728. initVersionText,
  729. $("#model_name_version div.item:first-child")
  730. );
  731. });
  732. },
  733. });
  734. });
  735. function initModelVerison(value, nameMap, faildModelVersion) {
  736. let faildTrainUrl = $('input[name="pre_train_model_url"]').val();
  737. let html = "";
  738. nameMap[value].forEach((element) => {
  739. let { TrainTaskInfo } = element;
  740. TrainTaskInfo = JSON.parse(TrainTaskInfo);
  741. html += `<div class="item" data-label="${element.Label}" data-id="${element.ID}" data-value="${element.Path}">${element.Version}</div>`;
  742. });
  743. $("#model_name_version").append(html);
  744. $("#select_model_version").dropdown("set text", faildModelVersion);
  745. $("#select_model_version").dropdown("set value", faildTrainUrl);
  746. }
  747. function initModelckpt(dataID) {
  748. let faildCkptName = $('input[name="ckpt_name"]').val();
  749. $("#select_model_checkpoint").addClass("loading");
  750. $("#model_checkpoint").empty();
  751. let html = "";
  752. loadCheckpointList(dataID).then((res) => {
  753. res.forEach((element) => {
  754. const ckptSuffix = element.FileName.split(".");
  755. const loadCheckpointFile = [
  756. "ckpt",
  757. "pb",
  758. "h5",
  759. "json",
  760. "pkl",
  761. "pth",
  762. "t7",
  763. "pdparams",
  764. "onnx",
  765. "pbtxt",
  766. "keras",
  767. "mlmodel",
  768. "cfg",
  769. "pt",
  770. ];
  771. if (
  772. !element.IsDir &&
  773. loadCheckpointFile.includes(ckptSuffix[ckptSuffix.length - 1])
  774. ) {
  775. html += `<div class="item" data-value=${element.FileName}>${element.FileName}</div>`;
  776. }
  777. });
  778. $("#model_checkpoint").append(html);
  779. $("#select_model_checkpoint").removeClass("loading");
  780. $("#select_model_checkpoint").dropdown("set text", faildCkptName);
  781. $("#select_model_checkpoint").dropdown("set value", faildCkptName);
  782. });
  783. }
  784. function loadCheckpointList(value) {
  785. return new Promise((resolve, reject) => {
  786. $.get(
  787. `${RepoLink}/modelmanage/query_modelfile_for_predict`,
  788. { ID: value },
  789. (data) => {
  790. resolve(data);
  791. }
  792. );
  793. });
  794. }
  795. }