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

4 years ago
4 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. package cloudbrain
  2. import (
  3. "fmt"
  4. "code.gitea.io/gitea/models"
  5. "code.gitea.io/gitea/modules/setting"
  6. resty "github.com/go-resty/resty/v2"
  7. )
  8. var (
  9. restyClient *resty.Client
  10. HOST string
  11. TOKEN string
  12. )
  13. func getRestyClient() *resty.Client {
  14. if restyClient == nil {
  15. restyClient = resty.New()
  16. }
  17. return restyClient
  18. }
  19. func checkSetting() {
  20. if len(HOST) != 0 && len(TOKEN) != 0 && restyClient != nil {
  21. return
  22. }
  23. _ = loginCloudbrain()
  24. }
  25. func loginCloudbrain() error {
  26. conf := setting.GetCloudbrainConfig()
  27. username := conf.Username
  28. password := conf.Password
  29. HOST = conf.Host
  30. var loginResult models.CloudBrainLoginResult
  31. client := getRestyClient()
  32. res, err := client.R().
  33. SetHeader("Content-Type", "application/json").
  34. SetBody(map[string]interface{}{"username": username, "password": password, "expiration": "604800"}).
  35. SetResult(&loginResult).
  36. Post(HOST + "/rest-server/api/v1/token")
  37. if err != nil {
  38. return fmt.Errorf("resty loginCloudbrain: %s", err)
  39. }
  40. if loginResult.Code != "S000" {
  41. return fmt.Errorf("%s: %s", loginResult.Msg, res.String())
  42. }
  43. TOKEN = loginResult.Payload["token"].(string)
  44. return nil
  45. }
  46. func CreateJob(jobName string, createJobParams models.CreateJobParams) (*models.CreateJobResult, error) {
  47. checkSetting()
  48. client := getRestyClient()
  49. var jobResult models.CreateJobResult
  50. retry := 0
  51. sendjob:
  52. res, err := client.R().
  53. SetHeader("Content-Type", "application/json").
  54. SetAuthToken(TOKEN).
  55. SetBody(createJobParams).
  56. SetResult(&jobResult).
  57. Put(HOST + "/rest-server/api/v1/jobs/" + jobName)
  58. if err != nil {
  59. return nil, fmt.Errorf("resty create job: %s", err)
  60. }
  61. if jobResult.Code == "S401" && retry < 1 {
  62. retry++
  63. _ = loginCloudbrain()
  64. goto sendjob
  65. }
  66. if jobResult.Code != "S000" {
  67. return &jobResult, fmt.Errorf("jobResult err: %s", res.String())
  68. }
  69. return &jobResult, nil
  70. }
  71. func GetJob(jobID string) (*models.GetJobResult, error) {
  72. checkSetting()
  73. // http://192.168.204.24/rest-server/api/v1/jobs/90e26e500c4b3011ea0a251099a987938b96
  74. client := getRestyClient()
  75. var getJobResult models.GetJobResult
  76. retry := 0
  77. sendjob:
  78. res, err := client.R().
  79. SetHeader("Content-Type", "application/json").
  80. SetAuthToken(TOKEN).
  81. SetResult(&getJobResult).
  82. Get(HOST + "/rest-server/api/v1/jobs/" + jobID)
  83. if err != nil {
  84. return nil, fmt.Errorf("resty GetJob: %s", err)
  85. }
  86. if getJobResult.Code == "S401" && retry < 1 {
  87. retry++
  88. _ = loginCloudbrain()
  89. goto sendjob
  90. }
  91. if getJobResult.Code != "S000" {
  92. return &getJobResult, fmt.Errorf("jobResult GetJob err: %s", res.String())
  93. }
  94. return &getJobResult, nil
  95. }
  96. func GetImages() (*models.GetImagesResult, error) {
  97. checkSetting()
  98. client := getRestyClient()
  99. var getImagesResult models.GetImagesResult
  100. retry := 0
  101. sendjob:
  102. res, err := client.R().
  103. SetHeader("Content-Type", "application/json").
  104. SetAuthToken(TOKEN).
  105. SetResult(&getImagesResult).
  106. Get(HOST + "/rest-server/api/v1/image/list/")
  107. if err != nil {
  108. return nil, fmt.Errorf("resty GetJob: %s", err)
  109. }
  110. if getImagesResult.Code == "S401" && retry < 1 {
  111. retry++
  112. _ = loginCloudbrain()
  113. goto sendjob
  114. }
  115. if getImagesResult.Code != "S000" {
  116. return &getImagesResult, fmt.Errorf("getImgesResult err: %s", res.String())
  117. }
  118. return &getImagesResult, nil
  119. }