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 6.2 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
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. package modelarts_cd
  2. import (
  3. "bytes"
  4. "code.gitea.io/gitea/modules/modelarts_gateway/core"
  5. "crypto/tls"
  6. "encoding/json"
  7. "fmt"
  8. "io/ioutil"
  9. "net/http"
  10. "strconv"
  11. "time"
  12. "code.gitea.io/gitea/models"
  13. "code.gitea.io/gitea/modules/log"
  14. "code.gitea.io/gitea/modules/setting"
  15. )
  16. var (
  17. httpClient *http.Client
  18. HOST string
  19. TOKEN string
  20. )
  21. const (
  22. errorCodeExceedLimit = "ModelArts.0118"
  23. //notebook 2.0
  24. urlNotebook2 = "/notebooks"
  25. //error code
  26. modelartsIllegalToken = "ModelArts.6401"
  27. NotebookNotFound = "ModelArts.6404"
  28. NotebookNoPermission = "ModelArts.6407"
  29. NotebookInvalid = "ModelArts.6400"
  30. UnknownErrorPrefix = "UNKNOWN:"
  31. )
  32. func getHttpClient() *http.Client {
  33. if httpClient == nil {
  34. httpClient = &http.Client{
  35. Timeout: 30 * time.Second,
  36. Transport: &http.Transport{TLSClientConfig: &tls.Config{InsecureSkipVerify: true}},
  37. }
  38. }
  39. return httpClient
  40. }
  41. func GetNotebook(jobID string) (*models.GetNotebook2Result, error) {
  42. var result models.GetNotebook2Result
  43. client := getHttpClient()
  44. s := core.Signer{
  45. Key: setting.ModelartsCD.AccessKey,
  46. Secret: setting.ModelartsCD.SecretKey,
  47. }
  48. r, _ := http.NewRequest(http.MethodGet,
  49. setting.ModelartsCD.EndPoint+"/v1/"+setting.ModelartsCD.ProjectID+urlNotebook2+"/"+jobID,
  50. nil)
  51. r.Header.Add("content-type", "application/json")
  52. s.Sign(r)
  53. resp, err := client.Do(r)
  54. if err != nil {
  55. log.Error("client.Do failed: %s", err.Error())
  56. return &result, fmt.Errorf("client.Do failed: %s", err.Error())
  57. }
  58. defer resp.Body.Close()
  59. body, err := ioutil.ReadAll(resp.Body)
  60. if err != nil {
  61. log.Error("ioutil.ReadAll failed: %s", err.Error())
  62. return &result, fmt.Errorf("ioutil.ReadAll failed: %s", err.Error())
  63. }
  64. err = json.Unmarshal(body, &result)
  65. if err != nil {
  66. log.Error("json.Unmarshal failed: %s", err.Error())
  67. return &result, fmt.Errorf("son.Unmarshal failed: %s", err.Error())
  68. }
  69. if len(result.ErrorCode) != 0 {
  70. log.Error("GetNotebook failed(%s): %s", result.ErrorCode, result.ErrorMsg)
  71. return &result, fmt.Errorf("GetNotebook failed(%s): %s", result.ErrorCode, result.ErrorMsg)
  72. }
  73. return &result, nil
  74. }
  75. func ManageNotebook(jobID string, param models.NotebookAction) (*models.NotebookActionResult, error) {
  76. var result models.NotebookActionResult
  77. client := getHttpClient()
  78. s := core.Signer{
  79. Key: setting.ModelartsCD.AccessKey,
  80. Secret: setting.ModelartsCD.SecretKey,
  81. }
  82. r, _ := http.NewRequest(http.MethodPost,
  83. setting.ModelartsCD.EndPoint+"/v1/"+setting.ModelartsCD.ProjectID+urlNotebook2+"/"+jobID+"/"+param.Action+"?duration="+strconv.Itoa(autoStopDurationMs),
  84. nil)
  85. r.Header.Add("content-type", "application/json")
  86. s.Sign(r)
  87. resp, err := client.Do(r)
  88. if err != nil {
  89. log.Error("client.Do failed: %s", err.Error())
  90. return &result, fmt.Errorf("client.Do failed: %s", err.Error())
  91. }
  92. defer resp.Body.Close()
  93. body, err := ioutil.ReadAll(resp.Body)
  94. if err != nil {
  95. log.Error("ioutil.ReadAll failed: %s", err.Error())
  96. return &result, fmt.Errorf("ioutil.ReadAll failed: %s", err.Error())
  97. }
  98. err = json.Unmarshal(body, &result)
  99. if err != nil {
  100. log.Error("json.Unmarshal failed: %s", err.Error())
  101. return &result, fmt.Errorf("son.Unmarshal failed: %s", err.Error())
  102. }
  103. if len(result.ErrorCode) != 0 {
  104. log.Error("ManageNotebook2 failed(%s): %s", result.ErrorCode, result.ErrorMsg)
  105. return &result, fmt.Errorf("ManageNotebook failed(%s): %s", result.ErrorCode, result.ErrorMsg)
  106. }
  107. return &result, nil
  108. }
  109. func DelNotebook(jobID string) (*models.NotebookDelResult, error) {
  110. var result models.NotebookDelResult
  111. client := getHttpClient()
  112. s := core.Signer{
  113. Key: setting.ModelartsCD.AccessKey,
  114. Secret: setting.ModelartsCD.SecretKey,
  115. }
  116. r, _ := http.NewRequest(http.MethodDelete,
  117. setting.ModelartsCD.EndPoint+"/v1/"+setting.ModelartsCD.ProjectID+urlNotebook2+"/"+jobID,
  118. nil)
  119. r.Header.Add("content-type", "application/json")
  120. s.Sign(r)
  121. resp, err := client.Do(r)
  122. if err != nil {
  123. log.Error("client.Do failed: %s", err.Error())
  124. return &result, fmt.Errorf("client.Do failed: %s", err.Error())
  125. }
  126. defer resp.Body.Close()
  127. body, err := ioutil.ReadAll(resp.Body)
  128. if err != nil {
  129. log.Error("ioutil.ReadAll failed: %s", err.Error())
  130. return &result, fmt.Errorf("ioutil.ReadAll failed: %s", err.Error())
  131. }
  132. err = json.Unmarshal(body, &result)
  133. if err != nil {
  134. log.Error("json.Unmarshal failed: %s", err.Error())
  135. return &result, fmt.Errorf("son.Unmarshal failed: %s", err.Error())
  136. }
  137. if len(result.ErrorCode) != 0 {
  138. log.Error("DelNotebook2 failed(%s): %s", result.ErrorCode, result.ErrorMsg)
  139. return &result, fmt.Errorf("DelNotebook2 failed(%s): %s", result.ErrorCode, result.ErrorMsg)
  140. }
  141. return &result, nil
  142. }
  143. func createNotebook(createJobParams models.CreateNotebookWithoutPoolParams) (*models.CreateNotebookResult, error) {
  144. var result models.CreateNotebookResult
  145. client := getHttpClient()
  146. s := core.Signer{
  147. Key: setting.ModelartsCD.AccessKey,
  148. Secret: setting.ModelartsCD.SecretKey,
  149. }
  150. req, _ := json.Marshal(createJobParams)
  151. r, _ := http.NewRequest(http.MethodPost,
  152. setting.ModelartsCD.EndPoint+"/v1/"+setting.ModelartsCD.ProjectID+urlNotebook2,
  153. ioutil.NopCloser(bytes.NewBuffer(req)))
  154. r.Header.Add("content-type", "application/json")
  155. s.Sign(r)
  156. resp, err := client.Do(r)
  157. if err != nil {
  158. log.Error("client.Do failed: %s", err.Error())
  159. return &result, fmt.Errorf("client.Do failed: %s", err.Error())
  160. }
  161. defer resp.Body.Close()
  162. body, err := ioutil.ReadAll(resp.Body)
  163. if err != nil {
  164. log.Error("ioutil.ReadAll failed: %s", err.Error())
  165. return &result, fmt.Errorf("ioutil.ReadAll failed: %s", err.Error())
  166. }
  167. err = json.Unmarshal(body, &result)
  168. if err != nil {
  169. log.Error("json.Unmarshal failed: %s", err.Error())
  170. return &result, fmt.Errorf("json.Unmarshal failed: %s", err.Error())
  171. }
  172. if len(result.ErrorCode) != 0 {
  173. log.Error("createNotebook failed(%s): %s", result.ErrorCode, result.ErrorMsg)
  174. if result.ErrorCode == errorCodeExceedLimit {
  175. result.ErrorMsg = "所选规格使用数量已超过最大配额限制。"
  176. }
  177. return &result, fmt.Errorf("createNotebook failed(%s): %s", result.ErrorCode, result.ErrorMsg)
  178. }
  179. return &result, nil
  180. }