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