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