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.5 kB

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