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 5.9 kB

4 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
4 years ago
5 years ago
5 years ago
5 years ago
4 years ago
5 years ago
4 years ago
5 years ago
4 years ago
5 years ago
5 years ago
4 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
4 years ago
5 years ago
5 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. package cloudbrain
  2. import (
  3. "code.gitea.io/gitea/modules/log"
  4. "encoding/json"
  5. "fmt"
  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. JobHasBeenStopped = "S410"
  17. )
  18. func getRestyClient() *resty.Client {
  19. if restyClient == nil {
  20. restyClient = resty.New()
  21. }
  22. return restyClient
  23. }
  24. func checkSetting() {
  25. if len(HOST) != 0 && len(TOKEN) != 0 && restyClient != nil {
  26. return
  27. }
  28. _ = loginCloudbrain()
  29. }
  30. func loginCloudbrain() error {
  31. conf := setting.GetCloudbrainConfig()
  32. username := conf.Username
  33. password := conf.Password
  34. HOST = conf.Host
  35. var loginResult models.CloudBrainLoginResult
  36. client := getRestyClient()
  37. res, err := client.R().
  38. SetHeader("Content-Type", "application/json").
  39. SetBody(map[string]interface{}{"username": username, "password": password, "expiration": "604800"}).
  40. SetResult(&loginResult).
  41. Post(HOST + "/rest-server/api/v1/token")
  42. if err != nil {
  43. return fmt.Errorf("resty loginCloudbrain: %s", err)
  44. }
  45. if loginResult.Code != Success {
  46. return fmt.Errorf("%s: %s", loginResult.Msg, res.String())
  47. }
  48. TOKEN = loginResult.Payload["token"].(string)
  49. return nil
  50. }
  51. func CreateJob(jobName string, createJobParams models.CreateJobParams) (*models.CreateJobResult, error) {
  52. checkSetting()
  53. client := getRestyClient()
  54. var jobResult models.CreateJobResult
  55. retry := 0
  56. sendjob:
  57. res, err := client.R().
  58. SetHeader("Content-Type", "application/json").
  59. SetAuthToken(TOKEN).
  60. SetBody(createJobParams).
  61. SetResult(&jobResult).
  62. Post(HOST + "/rest-server/api/v1/jobs/")
  63. if err != nil {
  64. return nil, fmt.Errorf("resty create job: %s", err)
  65. }
  66. if jobResult.Code == "S401" && retry < 1 {
  67. retry++
  68. _ = loginCloudbrain()
  69. goto sendjob
  70. }
  71. if jobResult.Code != Success {
  72. return &jobResult, fmt.Errorf("jobResult err: %s", res.String())
  73. }
  74. return &jobResult, nil
  75. }
  76. func GetJob(jobID string) (*models.GetJobResult, error) {
  77. checkSetting()
  78. // http://192.168.204.24/rest-server/api/v1/jobs/90e26e500c4b3011ea0a251099a987938b96
  79. client := getRestyClient()
  80. var getJobResult models.GetJobResult
  81. retry := 0
  82. sendjob:
  83. res, err := client.R().
  84. SetHeader("Content-Type", "application/json").
  85. SetAuthToken(TOKEN).
  86. SetResult(&getJobResult).
  87. Get(HOST + "/rest-server/api/v1/jobs/" + jobID)
  88. if err != nil {
  89. return nil, fmt.Errorf("resty GetJob: %v", err)
  90. }
  91. if getJobResult.Code == "S401" && retry < 1 {
  92. retry++
  93. _ = loginCloudbrain()
  94. goto sendjob
  95. }
  96. if getJobResult.Code != Success {
  97. return &getJobResult, fmt.Errorf("jobResult GetJob err: %s", res.String())
  98. }
  99. return &getJobResult, nil
  100. }
  101. func GetImages() (*models.GetImagesResult, error) {
  102. checkSetting()
  103. client := getRestyClient()
  104. var getImagesResult models.GetImagesResult
  105. retry := 0
  106. sendjob:
  107. res, err := client.R().
  108. SetHeader("Content-Type", "application/json").
  109. SetAuthToken(TOKEN).
  110. SetQueryString("pageIndex=1&pageSize=100").
  111. SetResult(&getImagesResult).
  112. Get(HOST + "/rest-server/api/v1/image/list/")
  113. if err != nil {
  114. return nil, fmt.Errorf("resty GetImages: %v", err)
  115. }
  116. var response models.CloudBrainResult
  117. err = json.Unmarshal(res.Body(), &response)
  118. if err != nil {
  119. log.Error("json.Unmarshal failed: %s", err.Error())
  120. return &getImagesResult, fmt.Errorf("json.Unmarshal failed: %s", err.Error())
  121. }
  122. if response.Code == "S401" && retry < 1 {
  123. retry++
  124. _ = loginCloudbrain()
  125. goto sendjob
  126. }
  127. if len(response.Code) != 0 {
  128. log.Error("getImagesResult failed(%s): %s", response.Code, response.Msg)
  129. return &getImagesResult, fmt.Errorf("getImagesResult failed(%s): %s", response.Code, response.Msg)
  130. }
  131. if getImagesResult.Code != Success {
  132. return &getImagesResult, fmt.Errorf("getImagesResult err: %s", res.String())
  133. }
  134. return &getImagesResult, nil
  135. }
  136. func GetPublicImages() (*models.GetImagesResult, error) {
  137. checkSetting()
  138. client := getRestyClient()
  139. var getImagesResult models.GetImagesResult
  140. retry := 0
  141. sendjob:
  142. res, err := client.R().
  143. SetHeader("Content-Type", "application/json").
  144. SetAuthToken(TOKEN).
  145. SetQueryString("pageIndex=1&pageSize=100").
  146. SetResult(&getImagesResult).
  147. Get(HOST + "/rest-server/api/v1/image/public/list/")
  148. if err != nil {
  149. return nil, fmt.Errorf("resty GetPublicImages: %v", err)
  150. }
  151. if getImagesResult.Code == "S401" && retry < 1 {
  152. retry++
  153. _ = loginCloudbrain()
  154. goto sendjob
  155. }
  156. if getImagesResult.Code != Success {
  157. return &getImagesResult, fmt.Errorf("getImgesResult err: %s", res.String())
  158. }
  159. return &getImagesResult, nil
  160. }
  161. func CommitImage(jobID string, params models.CommitImageParams) error {
  162. checkSetting()
  163. client := getRestyClient()
  164. var result models.CommitImageResult
  165. retry := 0
  166. sendjob:
  167. res, err := client.R().
  168. SetHeader("Content-Type", "application/json").
  169. SetAuthToken(TOKEN).
  170. SetBody(params).
  171. SetResult(&result).
  172. Post(HOST + "/rest-server/api/v1/jobs/" + jobID + "/commitImage")
  173. if err != nil {
  174. return fmt.Errorf("resty CommitImage: %v", err)
  175. }
  176. if result.Code == "S401" && retry < 1 {
  177. retry++
  178. _ = loginCloudbrain()
  179. goto sendjob
  180. }
  181. if result.Code != Success {
  182. return fmt.Errorf("CommitImage err: %s", res.String())
  183. }
  184. return nil
  185. }
  186. func StopJob(jobID string) error {
  187. checkSetting()
  188. client := getRestyClient()
  189. var result models.CloudBrainResult
  190. retry := 0
  191. sendjob:
  192. res, err := client.R().
  193. SetHeader("Content-Type", "application/json").
  194. SetAuthToken(TOKEN).
  195. SetResult(&result).
  196. Delete(HOST + "/rest-server/api/v1/jobs/" + jobID)
  197. if err != nil {
  198. return fmt.Errorf("resty StopJob: %v", err)
  199. }
  200. if result.Code == "S401" && retry < 1 {
  201. retry++
  202. _ = loginCloudbrain()
  203. goto sendjob
  204. }
  205. if result.Code != Success {
  206. if result.Code == JobHasBeenStopped {
  207. log.Info("StopJob(%s) failed:%s", jobID, result.Msg)
  208. } else {
  209. return fmt.Errorf("StopJob err: %s", res.String())
  210. }
  211. }
  212. return nil
  213. }