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

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