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

3 years ago
3 years ago
3 years ago
3 years ago
2 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
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
2 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311
  1. package grampus
  2. import (
  3. "crypto/tls"
  4. "encoding/json"
  5. "fmt"
  6. "net/http"
  7. "code.gitea.io/gitea/models"
  8. "code.gitea.io/gitea/modules/log"
  9. "code.gitea.io/gitea/modules/setting"
  10. "github.com/go-resty/resty/v2"
  11. )
  12. var (
  13. restyClient *resty.Client
  14. HOST string
  15. TOKEN string
  16. )
  17. const (
  18. urlOpenApiV1 = "/openapi/v1/"
  19. urlGetToken = urlOpenApiV1 + "token"
  20. urlTrainJob = urlOpenApiV1 + "trainjob"
  21. urlGetResourceSpecs = urlOpenApiV1 + "resourcespec"
  22. urlGetAiCenter = urlOpenApiV1 + "sharescreen/aicenter"
  23. urlGetImages = urlOpenApiV1 + "image"
  24. errorIllegalToken = 1005
  25. )
  26. type GetTokenParams struct {
  27. UserName string `json:"username"`
  28. Password string `json:"password"`
  29. }
  30. type GetTokenResult struct {
  31. Token string `json:"token"`
  32. Expiration int64 `json:"expiration"`
  33. }
  34. func getRestyClient() *resty.Client {
  35. if restyClient == nil {
  36. restyClient = resty.New()
  37. restyClient.SetTLSClientConfig(&tls.Config{InsecureSkipVerify: true})
  38. }
  39. return restyClient
  40. }
  41. func checkSetting() {
  42. if len(HOST) != 0 && len(TOKEN) != 0 && restyClient != nil {
  43. return
  44. }
  45. err := getToken()
  46. if err != nil {
  47. log.Error("getToken failed:%v", err)
  48. }
  49. }
  50. func getToken() error {
  51. HOST = setting.Grampus.Host
  52. client := getRestyClient()
  53. params := GetTokenParams{
  54. UserName: setting.Grampus.UserName,
  55. Password: setting.Grampus.Password,
  56. }
  57. var result GetTokenResult
  58. res, err := client.R().
  59. SetHeader("Content-Type", "application/json").
  60. SetBody(params).
  61. SetResult(&result).
  62. Post(HOST + urlGetToken)
  63. if err != nil {
  64. return fmt.Errorf("resty getToken: %v", err)
  65. }
  66. if res.StatusCode() != http.StatusOK {
  67. return fmt.Errorf("getToken failed:%s", res.String())
  68. }
  69. TOKEN = result.Token
  70. return nil
  71. }
  72. func createJob(req models.CreateGrampusJobRequest) (*models.CreateGrampusJobResponse, error) {
  73. checkSetting()
  74. client := getRestyClient()
  75. var result models.CreateGrampusJobResponse
  76. retry := 0
  77. sendjob:
  78. _, err := client.R().
  79. SetHeader("Content-Type", "application/json").
  80. SetAuthToken(TOKEN).
  81. SetBody(req).
  82. SetResult(&result).
  83. Post(HOST + urlTrainJob)
  84. if err != nil {
  85. return nil, fmt.Errorf("resty CreateJob: %s", err)
  86. }
  87. if result.ErrorCode == errorIllegalToken && retry < 1 {
  88. retry++
  89. _ = getToken()
  90. goto sendjob
  91. }
  92. if result.ErrorCode != 0 {
  93. log.Error("CreateJob failed(%d): %s", result.ErrorCode, result.ErrorMsg)
  94. return &result, fmt.Errorf("CreateJob failed(%d): %s", result.ErrorCode, result.ErrorMsg)
  95. }
  96. return &result, nil
  97. }
  98. func GetJob(jobID string) (*models.GetGrampusJobResponse, error) {
  99. checkSetting()
  100. client := getRestyClient()
  101. var result models.GetGrampusJobResponse
  102. retry := 0
  103. sendjob:
  104. _, err := client.R().
  105. SetAuthToken(TOKEN).
  106. SetResult(&result).
  107. Get(HOST + urlTrainJob + "/" + jobID)
  108. if err != nil {
  109. return nil, fmt.Errorf("resty GetJob: %v", err)
  110. }
  111. if result.ErrorCode == errorIllegalToken && retry < 1 {
  112. retry++
  113. log.Info("retry get token")
  114. _ = getToken()
  115. goto sendjob
  116. }
  117. if result.ErrorCode != 0 {
  118. log.Error("GetJob failed(%d): %s", result.ErrorCode, result.ErrorMsg)
  119. return nil, fmt.Errorf("GetJob failed(%d): %s", result.ErrorCode, result.ErrorMsg)
  120. }
  121. return &result, nil
  122. }
  123. func GetResourceSpecs(processorType string) (*models.GetGrampusResourceSpecsResult, error) {
  124. checkSetting()
  125. client := getRestyClient()
  126. var result models.GetGrampusResourceSpecsResult
  127. retry := 0
  128. sendjob:
  129. _, err := client.R().
  130. SetAuthToken(TOKEN).
  131. SetResult(&result).
  132. Get(HOST + urlGetResourceSpecs + "?processorType=" + processorType)
  133. if err != nil {
  134. return nil, fmt.Errorf("resty GetResourceSpecs: %v", err)
  135. }
  136. if result.ErrorCode == errorIllegalToken && retry < 1 {
  137. retry++
  138. log.Info("retry get token")
  139. _ = getToken()
  140. goto sendjob
  141. }
  142. if result.ErrorCode != 0 {
  143. log.Error("GetResourceSpecs failed(%d): %s", result.ErrorCode, result.ErrorMsg)
  144. return &result, fmt.Errorf("GetResourceSpecs failed(%d): %s", result.ErrorCode, result.ErrorMsg)
  145. }
  146. return &result, nil
  147. }
  148. func GetImages(processorType string) (*models.GetGrampusImagesResult, error) {
  149. checkSetting()
  150. client := getRestyClient()
  151. var result models.GetGrampusImagesResult
  152. retry := 0
  153. sendjob:
  154. _, err := client.R().
  155. SetAuthToken(TOKEN).
  156. SetResult(&result).
  157. Get(HOST + urlGetImages + "?processorType=" + processorType)
  158. if err != nil {
  159. return nil, fmt.Errorf("resty GetImages: %v", err)
  160. }
  161. if result.ErrorCode == errorIllegalToken && retry < 1 {
  162. retry++
  163. log.Info("retry get token")
  164. _ = getToken()
  165. goto sendjob
  166. }
  167. if result.ErrorCode != 0 {
  168. log.Error("GetImages failed(%d): %s", result.ErrorCode, result.ErrorMsg)
  169. return &result, fmt.Errorf("GetImages failed(%d): %s", result.ErrorCode, result.ErrorMsg)
  170. }
  171. return &result, nil
  172. }
  173. func GetTrainJobLog(jobID string) (string, error) {
  174. checkSetting()
  175. client := getRestyClient()
  176. var logContent string
  177. res, err := client.R().
  178. SetAuthToken(TOKEN).
  179. SetResult(&logContent).
  180. Get(HOST + urlTrainJob + "/" + jobID + "/task/0/replica/0/log")
  181. if err != nil {
  182. return logContent, fmt.Errorf("resty GetTrainJobLog: %v", err)
  183. }
  184. if res.StatusCode() != http.StatusOK {
  185. var temp models.GrampusResult
  186. if err = json.Unmarshal([]byte(res.String()), &temp); err != nil {
  187. log.Error("json.Unmarshal failed(%s): %v", res.String(), err.Error())
  188. return logContent, fmt.Errorf("json.Unmarshal failed(%s): %v", res.String(), err.Error())
  189. }
  190. log.Error("GetTrainJobLog failed(%d):%s(%s)", res.StatusCode(), temp.ErrorCode, temp.ErrorMsg)
  191. return logContent, fmt.Errorf("GetTrainJobLog failed(%d):%d(%s)", res.StatusCode(), temp.ErrorCode, temp.ErrorMsg)
  192. }
  193. logContent = res.String()
  194. return logContent, nil
  195. }
  196. func StopJob(jobID string) (*models.GrampusStopJobResponse, error) {
  197. checkSetting()
  198. client := getRestyClient()
  199. var result models.GrampusStopJobResponse
  200. retry := 0
  201. sendjob:
  202. _, err := client.R().
  203. //SetHeader("Content-Type", "application/json").
  204. SetAuthToken(TOKEN).
  205. SetResult(&result).
  206. Post(HOST + urlTrainJob + "/" + jobID + "/stop")
  207. if err != nil {
  208. return &result, fmt.Errorf("resty StopTrainJob: %v", err)
  209. }
  210. if result.ErrorCode == errorIllegalToken && retry < 1 {
  211. retry++
  212. log.Info("retry get token")
  213. _ = getToken()
  214. goto sendjob
  215. }
  216. if result.ErrorCode != 0 {
  217. log.Error("GetJob failed(%d): %s", result.ErrorCode, result.ErrorMsg)
  218. return &result, fmt.Errorf("GetJob failed(%d): %s", result.ErrorCode, result.ErrorMsg)
  219. }
  220. return &result, nil
  221. }
  222. func GetAiCenters(pageIndex, pageSize int) (*models.GetGrampusAiCentersResult, error) {
  223. checkSetting()
  224. client := getRestyClient()
  225. var result models.GetGrampusAiCentersResult
  226. retry := 0
  227. sendjob:
  228. _, err := client.R().
  229. SetAuthToken(TOKEN).
  230. SetResult(&result).
  231. Get(HOST + urlGetAiCenter + "?pageIndex=" + fmt.Sprint(pageIndex) + "&pageSize=" + fmt.Sprint(pageSize))
  232. if err != nil {
  233. return nil, fmt.Errorf("resty GetAiCenters: %v", err)
  234. }
  235. if result.ErrorCode == errorIllegalToken && retry < 1 {
  236. retry++
  237. log.Info("retry get token")
  238. _ = getToken()
  239. goto sendjob
  240. }
  241. if result.ErrorCode != 0 {
  242. log.Error("GetAiCenters failed(%d): %s", result.ErrorCode, result.ErrorMsg)
  243. return &result, fmt.Errorf("GetAiCenters failed(%d): %s", result.ErrorCode, result.ErrorMsg)
  244. }
  245. return &result, nil
  246. }