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.9 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
4 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  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. err := getToken()
  32. if err != nil {
  33. log.Error("getToken falied:", err.Error())
  34. }
  35. }
  36. func getToken() error {
  37. HOST = setting.ModelArtsHost
  38. client := getRestyClient()
  39. params := models.GetTokenParams{
  40. Auth: models.Auth{
  41. Identity: models.Identity{
  42. Methods: []string{methodPassword},
  43. Password: models.Password{
  44. User: models.NotebookUser{
  45. Name: setting.ModelArtsUsername,
  46. Password: setting.ModelArtsPassword,
  47. Domain: models.Domain{
  48. Name: setting.ModelArtsDomain,
  49. },
  50. },
  51. },
  52. },
  53. Scope: models.Scope{
  54. Project: models.Project{
  55. Name: setting.ProjectName,
  56. },
  57. },
  58. },
  59. }
  60. res, err := client.R().
  61. SetHeader("Content-Type", "application/json").
  62. SetBody(params).
  63. Post(HOST + urlGetToken)
  64. if err != nil {
  65. return fmt.Errorf("resty getToken: %s", err)
  66. }
  67. if res.StatusCode() != http.StatusCreated {
  68. return fmt.Errorf("getToken failed:%s", res.String())
  69. }
  70. TOKEN = res.Header().Get("X-Subject-Token")
  71. return nil
  72. }
  73. func CreateJob(createJobParams models.CreateNotebookParams) (*models.CreateNotebookResult, error) {
  74. checkSetting()
  75. client := getRestyClient()
  76. var result models.CreateNotebookResult
  77. retry := 0
  78. sendjob:
  79. res, err := client.R().
  80. SetHeader("Content-Type", "application/json").
  81. SetAuthToken(TOKEN).
  82. SetBody(createJobParams).
  83. SetResult(&result).
  84. Post(HOST + "/v1/" + setting.ProjectID + urlNotebook)
  85. if err != nil {
  86. return nil, fmt.Errorf("resty create job: %s", err)
  87. }
  88. if res.StatusCode() == http.StatusUnauthorized && retry < 1 {
  89. retry++
  90. _ = getToken()
  91. goto sendjob
  92. }
  93. if len(result.ErrorCode) != 0 {
  94. log.Error("CreateJob failed(%s): %s", result.ErrorCode, result.ErrorMsg)
  95. return &result, fmt.Errorf("CreateJob failed(%s): %s", result.ErrorCode, result.ErrorMsg)
  96. }
  97. return &result, nil
  98. }
  99. func GetJob(jobID string) (*models.GetNotebookResult, error) {
  100. checkSetting()
  101. client := getRestyClient()
  102. var result models.GetNotebookResult
  103. retry := 0
  104. sendjob:
  105. res, err := client.R().
  106. SetHeader("Content-Type", "application/json").
  107. SetAuthToken(TOKEN).
  108. SetResult(&result).
  109. Get(HOST + "/v1/" + setting.ProjectID + urlNotebook + jobID)
  110. if err != nil {
  111. return nil, fmt.Errorf("resty GetJob: %v", err)
  112. }
  113. if res.StatusCode() == http.StatusUnauthorized && retry < 1 {
  114. retry++
  115. _ = getToken()
  116. goto sendjob
  117. }
  118. if len(result.ErrorCode) != 0 {
  119. return &result, fmt.Errorf("CreateJob failed(%s): %s", result.ErrorCode, result.ErrorMsg)
  120. }
  121. return &result, nil
  122. }
  123. func StopJob(jobID string, param models.NotebookAction) (*models.NotebookActionResult, error) {
  124. checkSetting()
  125. client := getRestyClient()
  126. var result models.NotebookActionResult
  127. retry := 0
  128. sendjob:
  129. res, err := client.R().
  130. SetHeader("Content-Type", "application/json").
  131. SetBody(param).
  132. SetAuthToken(TOKEN).
  133. SetResult(&result).
  134. Post(HOST + "/v1/" + setting.ProjectID + urlNotebook + jobID + "/action")
  135. if err != nil {
  136. return &result, fmt.Errorf("resty StopJob: %v", err)
  137. }
  138. if res.StatusCode() == http.StatusUnauthorized && retry < 1 {
  139. retry++
  140. _ = getToken()
  141. goto sendjob
  142. }
  143. if len(result.ErrorCode) != 0 {
  144. return &result, fmt.Errorf("CreateJob failed(%s): %s", result.ErrorCode, result.ErrorMsg)
  145. }
  146. return &result, nil
  147. }