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.

cloudrbanin.js 13 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
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281
  1. export default async function initCloudrain() {
  2. let debug_button = $('.cloudbrain_debug').data('debug')
  3. let debug_again_button = $('.cloudbrain_debug').data('debug-again')
  4. let timeid = window.setInterval(loadJobStatus, 15000);
  5. let timeidShow = window.setInterval(loadShowJobStatus, 15000);
  6. $(document).ready(loadJobStatus);
  7. $(document).ready(loadShowJobStatus);
  8. function loadJobStatus() {
  9. $(".job-status").each((index, job) => {
  10. const ID = job.dataset.jobid;
  11. const repoPath = job.dataset.repopath;
  12. // const computeResource = job.dataset.resource
  13. const versionname = job.dataset.version
  14. const status_text = $(`#${ID}-text`).text()
  15. const finalState = ['STOPPED', 'CREATE_FAILED', 'UNAVAILABLE', 'DELETED', 'RESIZE_FAILED', 'SUCCEEDED', 'IMAGE_FAILED', 'SUBMIT_FAILED', 'DELETE_FAILED', 'KILLED', 'COMPLETED', 'FAILED', 'CANCELED', 'LOST', 'START_FAILED', 'SUBMIT_MODEL_FAILED', 'DEPLOY_SERVICE_FAILED', 'CHECK_FAILED']
  16. if (finalState.includes(status_text)) {
  17. return
  18. }
  19. // const diffResource = computeResource == "NPU" ? 'modelarts/notebook' : 'cloudbrain'
  20. $.get(`/api/v1/repos/${repoPath}/${ID}?version_name=${versionname}`, (data) => {
  21. const ID = data.ID || data.JobID
  22. const status = data.JobStatus
  23. const duration = data.JobDuration
  24. $('#duration-' + ID).text(duration)
  25. if (status != status_text) {
  26. $('#' + ID + '-icon').removeClass().addClass(status)
  27. $('#' + ID + '-text').text(status)
  28. finalState.includes(status) && $('#' + ID + '-stop').removeClass('blue').addClass('disabled')
  29. }
  30. if (status === "RUNNING") {
  31. $('#ai-debug-' + ID).removeClass('disabled').addClass('blue').text(debug_button).css("margin", "0 1rem")
  32. $('#model-image-' + ID).removeClass('disabled').addClass('blue')
  33. }
  34. if (status !== "RUNNING") {
  35. // $('#model-debug-'+ID).removeClass('blue')
  36. // $('#model-debug-'+ID).addClass('disabled')
  37. $('#model-image-' + ID).removeClass('blue').addClass('disabled')
  38. }
  39. if (["CREATING", "STOPPING", "WAITING", "STARTING"].includes(status)) {
  40. $('#ai-debug-' + ID).removeClass('blue').addClass('disabled')
  41. }
  42. if (['STOPPED', 'FAILED', 'START_FAILED', 'CREATE_FAILED', 'SUCCEEDED'].includes(status)) {
  43. $('#ai-debug-' + ID).removeClass('disabled').addClass('blue').text(debug_again_button).css("margin", "0")
  44. }
  45. if (["RUNNING", "WAITING"].includes(status)) {
  46. $('#ai-stop-' + ID).removeClass('disabled').addClass('blue')
  47. }
  48. if (["CREATING", "STOPPING", "STARTING", "STOPPED", "FAILED", "START_FAILED", "SUCCEEDED", "COMPLETED", "CREATE_FAILED"].includes(status)) {
  49. $('#ai-stop-' + ID).removeClass('blue').addClass('disabled')
  50. }
  51. if (["STOPPED", "FAILED", "START_FAILED", "KILLED", "COMPLETED", "SUCCEEDED"].includes(status)) {
  52. $('#ai-delete-' + ID).removeClass('disabled').addClass('blue')
  53. } else {
  54. $('#ai-delete-' + ID).removeClass('blue').addClass('disabled')
  55. }
  56. }).fail(function (err) {
  57. console.log(err);
  58. });
  59. });
  60. };
  61. function loadShowJobStatus() {
  62. $(".ui.accordion.border-according").each((index, job) => {
  63. const jobID = job.dataset.jobid;
  64. const repoPath = job.dataset.repopath;
  65. const versionname = job.dataset.version
  66. // ['IMAGE_FAILED','SUBMIT_FAILED','DELETE_FAILED','KILLED','COMPLETED','FAILED','CANCELED','LOST','START_FAILED']
  67. // if (job.textContent.trim() == 'IMAGE_FAILED' || job.textContent.trim() == 'SUBMIT_FAILED' || job.textContent.trim() == 'DELETE_FAILED'
  68. // || job.textContent.trim() == 'KILLED' || job.textContent.trim() == 'COMPLETED' || job.textContent.trim() == 'FAILED'
  69. // || job.textContent.trim() == 'CANCELED' || job.textContent.trim() == 'LOST') {
  70. // return
  71. // }
  72. let status = $(`#${versionname}-status-span`).text()
  73. if (['IMAGE_FAILED', 'SUBMIT_FAILED', 'DELETE_FAILED', 'KILLED', 'COMPLETED', 'FAILED', 'CANCELED', 'LOST', 'START_FAILED', 'SUCCEEDED', 'STOPPED'].includes(status)) {
  74. return
  75. }
  76. let stopArray = ["KILLED", "FAILED", "START_FAILED", "KILLING", "COMPLETED", "SUCCEEDED", "STOPPED"]
  77. $.get(`/api/v1/repos/${repoPath}/${jobID}?version_name=${versionname}`, (data) => {
  78. //$(`#${versionname}-duration-span`).text(data.JobDuration)
  79. $(`#${versionname}-status-span span`).text(data.JobStatus)
  80. $(`#${versionname}-status-span i`).attr("class", data.JobStatus)
  81. // detail status and duration
  82. //$('#'+versionname+'-duration').text(data.JobDuration)
  83. $('#' + versionname + '-status').text(data.JobStatus)
  84. if (stopArray.includes(data.JobStatus)) {
  85. $('#' + versionname + '-stop').addClass('disabled')
  86. }
  87. if (data.JobStatus === "COMPLETED") {
  88. $('#' + versionname + '-create-model').removeClass('disabled').addClass('blue')
  89. }
  90. }).fail(function (err) {
  91. console.log(err);
  92. });
  93. });
  94. };
  95. function assertDelete(obj, versionName, repoPath) {
  96. if (obj.style.color == "rgb(204, 204, 204)") {
  97. return
  98. } else {
  99. const delId = obj.parentNode.id
  100. let flag = 1;
  101. $('.ui.basic.modal')
  102. .modal({
  103. onDeny: function () {
  104. flag = false
  105. },
  106. onApprove: function () {
  107. if (!versionName) {
  108. document.getElementById(delId).submit()
  109. }
  110. else {
  111. deleteVersion(versionName, repoPath)
  112. }
  113. flag = true
  114. },
  115. onHidden: function () {
  116. if (flag == false) {
  117. $('.alert').html('您已取消操作').removeClass('alert-success').addClass('alert-danger').show().delay(1500).fadeOut();
  118. }
  119. }
  120. })
  121. .modal('show')
  122. }
  123. }
  124. function deleteVersion(versionName, repoPath) {
  125. const url = `/api/v1/repos/${repoPath}`
  126. $.post(url, { version_name: versionName }, (data) => {
  127. if (data.StatusOK === 0) {
  128. location.reload()
  129. }
  130. }).fail(function (err) {
  131. console.log(err);
  132. });
  133. }
  134. $('.ui.basic.ai_delete').click(function () {
  135. const repoPath = this.dataset.repopath
  136. const versionName = this.dataset.version
  137. if (repoPath && versionName) {
  138. assertDelete(this, versionName, repoPath)
  139. }
  140. else {
  141. assertDelete(this)
  142. }
  143. })
  144. function stopDebug(ID, stopUrl) {
  145. $.ajax({
  146. type: "POST",
  147. url: stopUrl,
  148. data: $('#stopForm-' + ID).serialize(),
  149. success: function (res) {
  150. if (res.result_code === "0") {
  151. $('#' + ID + '-icon').removeClass().addClass(res.status)
  152. $('#' + ID + '-text').text(res.status)
  153. if (res.status === "STOPPED") {
  154. $('#ai-debug-' + ID).removeClass('disabled').addClass('blue').text(debug_again_button).css("margin", "0")
  155. $('#ai-image-' + ID).removeClass('blue').addClass('disabled')
  156. $('#ai-model-debug-' + ID).removeClass('blue').addClass('disabled')
  157. $('#ai-delete-' + ID).removeClass('disabled').addClass('blue')
  158. $('#ai-stop-' + ID).removeClass('blue').addClass('disabled')
  159. }
  160. else {
  161. $('#ai-debug-' + ID).removeClass('blue').addClass('disabled')
  162. $('#ai-stop-' + ID).removeClass('blue').addClass('disabled')
  163. }
  164. } else {
  165. $('.alert').html(res.error_msg).removeClass('alert-success').addClass('alert-danger').show().delay(2000).fadeOut();
  166. }
  167. },
  168. error: function (res) {
  169. console.log(res)
  170. }
  171. })
  172. }
  173. $('.ui.basic.ai_stop').click(function () {
  174. const ID = this.dataset.jobid
  175. const repoPath = this.dataset.repopath
  176. stopDebug(ID, repoPath)
  177. })
  178. function stopVersion(version_name, ID, repoPath) {
  179. const url = `/api/v1/repos/${repoPath}/${ID}/stop_version`
  180. $.post(url, { version_name: version_name }, (data) => {
  181. if (data.StatusOK === 0) {
  182. $('#ai-stop-' + ID).removeClass('blue')
  183. $('#ai-stop-' + ID).addClass('disabled')
  184. refreshStatus(version_name, ID, repoPath)
  185. }
  186. }).fail(function (err) {
  187. console.log(err);
  188. });
  189. }
  190. function refreshStatus(version_name, ID, repoPath) {
  191. const url = `/api/v1/repos/${repoPath}/${ID}/?version_name${version_name}`
  192. $.get(url, (data) => {
  193. $(`#${ID}-icon`).attr("class", data.JobStatus)
  194. // detail status and duration
  195. $(`#${ID}-text`).text(data.JobStatus)
  196. if (["STOPPED", "FAILED", "START_FAILED", "KILLED", "COMPLETED", "SUCCEEDED"].includes(data.JobStatus)) {
  197. $('#ai-delete-' + ID).removeClass('disabled').addClass('blue')
  198. }
  199. }).fail(function (err) {
  200. console.log(err);
  201. });
  202. }
  203. $('.ui.basic.ai_stop_version').click(function () {
  204. const ID = this.dataset.jobid
  205. const repoPath = this.dataset.repopath
  206. const versionName = this.dataset.version
  207. stopVersion(versionName, ID, repoPath)
  208. })
  209. function getModelInfo(repoPath, modelName, versionName, jobName) {
  210. $.get(`${repoPath}/modelmanage/show_model_info_api?name=${modelName}`, (data) => {
  211. if (data.length === 0) {
  212. $(`#${jobName}`).popup('toggle')
  213. } else {
  214. let versionData = data.filter((item) => {
  215. return item.Version === versionName
  216. })
  217. if (versionData.length == 0) {
  218. $(`#${jobName}`).popup('toggle')
  219. }
  220. else {
  221. location.href = `${repoPath}/modelmanage/show_model_info?name=${modelName}`
  222. }
  223. }
  224. })
  225. }
  226. $('.goto_modelmanage').click(function () {
  227. const repoPath = this.dataset.repopath
  228. const modelName = this.dataset.modelname
  229. const versionName = this.dataset.version
  230. const jobName = this.dataset.jobname
  231. getModelInfo(repoPath, modelName, versionName, jobName)
  232. })
  233. function debugAgain(ID, debugUrl, redirect_to) {
  234. if ($('#' + ID + '-text').text() === "RUNNING") {
  235. window.open(debugUrl + 'debug')
  236. } else {
  237. $.ajax({
  238. type: "POST",
  239. url: debugUrl + 'restart?redirect_to=' + redirect_to,
  240. data: $('#debugAgainForm-' + ID).serialize(),
  241. success: function (res) {
  242. if (res['WechatRedirectUrl']) {
  243. window.location.href = res['WechatRedirectUrl']
  244. }
  245. else if (res.result_code === "0") {
  246. if (res.id !== ID) {
  247. location.reload()
  248. } else {
  249. $('#' + ID + '-icon').removeClass().addClass(res.status)
  250. $('#' + ID + '-text').text(res.status)
  251. $('#ai-debug-' + ID).removeClass('blue').addClass('disabled')
  252. $('#ai-delete-' + ID).removeClass('blue').addClass('disabled')
  253. $('#ai-debug-' + ID).text(debug_button).css("margin", "0 1rem")
  254. }
  255. } else {
  256. $('.alert').html(res.error_msg).removeClass('alert-success').addClass('alert-danger').show().delay(2000).fadeOut();
  257. }
  258. },
  259. error: function (res) {
  260. console.log(res)
  261. }
  262. })
  263. }
  264. }
  265. $('.ui.basic.ai_debug').click(function () {
  266. const ID = this.dataset.jobid
  267. const repoPath = this.dataset.repopath
  268. const redirect_to = this.dataset.linkpath
  269. debugAgain(ID, repoPath, redirect_to)
  270. })
  271. }