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.

resty.go 3.8 kB

4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. package modelarts
  2. import (
  3. "code.gitea.io/gitea/modules/log"
  4. "fmt"
  5. "net/http"
  6. "code.gitea.io/gitea/models"
  7. "code.gitea.io/gitea/modules/setting"
  8. "github.com/go-resty/resty/v2"
  9. )
  10. var (
  11. restyClient *resty.Client
  12. HOST string
  13. TOKEN string
  14. )
  15. const (
  16. methodPassword = "password"
  17. urlGetToken = "/v3/auth/tokens"
  18. urlNotebook = "/demanager/instances"
  19. urlQuaryNotebook = "/demanager/instances"
  20. )
  21. func getRestyClient() *resty.Client {
  22. if restyClient == nil {
  23. restyClient = resty.New()
  24. }
  25. return restyClient
  26. }
  27. func checkSetting() {
  28. if len(HOST) != 0 && len(TOKEN) != 0 && restyClient != nil {
  29. return
  30. }
  31. getToken()
  32. }
  33. func getToken() error {
  34. HOST = setting.ModelArtsHost
  35. client := getRestyClient()
  36. params := models.GetTokenParams{
  37. Auth: models.Auth{
  38. Identity: models.Identity{
  39. Methods: []string{methodPassword},
  40. Password: models.Password{
  41. User: models.NotebookUser{
  42. Name: setting.ModelArtsUsername,
  43. Password: setting.ModelArtsPassword,
  44. Domain: models.Domain{
  45. Name: setting.ModelArtsDomain,
  46. },
  47. },
  48. },
  49. },
  50. Scope: models.Scope{
  51. Project: models.Project{
  52. Name: setting.ProjectName,
  53. },
  54. },
  55. },
  56. }
  57. res, err := client.R().
  58. SetHeader("Content-Type", "application/json").
  59. SetBody(params).
  60. Post(HOST + urlGetToken)
  61. if err != nil {
  62. return fmt.Errorf("resty getToken: %s", err)
  63. }
  64. if res.StatusCode() != http.StatusCreated {
  65. return fmt.Errorf("getToken failed:%s", res.String())
  66. }
  67. TOKEN = res.Header().Get("X-Subject-Token")
  68. return nil
  69. }
  70. func CreateJob(createJobParams models.CreateNotebookParams) (*models.CreateNotebookResult, error) {
  71. checkSetting()
  72. client := getRestyClient()
  73. var result models.CreateNotebookResult
  74. retry := 0
  75. sendjob:
  76. res, err := client.R().
  77. SetHeader("Content-Type", "application/json").
  78. SetAuthToken(TOKEN).
  79. SetBody(createJobParams).
  80. SetResult(&result).
  81. Post(HOST + "/v1/" + setting.ProjectID + urlNotebook)
  82. if err != nil {
  83. return nil, fmt.Errorf("resty create job: %s", err)
  84. }
  85. if res.StatusCode() == http.StatusUnauthorized && retry < 1 {
  86. retry++
  87. _ = getToken()
  88. goto sendjob
  89. }
  90. if len(result.ErrorCode) != 0 {
  91. log.Error("CreateJob failed(%s): %s", result.ErrorCode, result.ErrorMsg)
  92. return &result, fmt.Errorf("CreateJob failed(%s): %s", result.ErrorCode, result.ErrorMsg)
  93. }
  94. return &result, nil
  95. }
  96. func GetJob(jobID string) (*models.GetNotebookResult, error) {
  97. checkSetting()
  98. client := getRestyClient()
  99. var result models.GetNotebookResult
  100. retry := 0
  101. sendjob:
  102. res, err := client.R().
  103. SetHeader("Content-Type", "application/json").
  104. SetAuthToken(TOKEN).
  105. SetResult(&result).
  106. Get(HOST + "/v1/" + setting.ProjectID + urlNotebook + jobID)
  107. if err != nil {
  108. return nil, fmt.Errorf("resty GetJob: %v", err)
  109. }
  110. if res.StatusCode() == http.StatusUnauthorized && retry < 1 {
  111. retry++
  112. _ = getToken()
  113. goto sendjob
  114. }
  115. if len(result.ErrorCode) != 0 {
  116. return &result, fmt.Errorf("CreateJob failed(%s): %s", result.ErrorCode, result.ErrorMsg)
  117. }
  118. return &result, nil
  119. }
  120. func StopJob(jobID string, param models.NotebookAction) (*models.NotebookActionResult, error) {
  121. checkSetting()
  122. client := getRestyClient()
  123. var result models.NotebookActionResult
  124. retry := 0
  125. sendjob:
  126. res, err := client.R().
  127. SetHeader("Content-Type", "application/json").
  128. SetBody(param).
  129. SetAuthToken(TOKEN).
  130. SetResult(&result).
  131. Post(HOST + "/v1/" + setting.ProjectID + urlNotebook + jobID + "/action")
  132. if err != nil {
  133. return &result, fmt.Errorf("resty StopJob: %v", err)
  134. }
  135. if res.StatusCode() == http.StatusUnauthorized && retry < 1 {
  136. retry++
  137. _ = getToken()
  138. goto sendjob
  139. }
  140. if len(result.ErrorCode) != 0 {
  141. return &result, fmt.Errorf("CreateJob failed(%s): %s", result.ErrorCode, result.ErrorMsg)
  142. }
  143. return &result, nil
  144. }