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