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

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