runner.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. package service
  2. import (
  3. "context"
  4. "go-common/app/admin/ep/saga/model"
  5. "go-common/library/log"
  6. "github.com/xanzy/go-gitlab"
  7. )
  8. //QueryProjectRunners query project runners info according to project id
  9. func (s *Service) QueryProjectRunners(c context.Context, req *model.ProjectDataReq) (resp []*gitlab.Runner, err error) {
  10. var (
  11. runners []*gitlab.Runner
  12. response *gitlab.Response
  13. )
  14. for page := 1; ; page++ {
  15. if runners, response, err = s.gitlab.ListProjectRunners(req.ProjectID, page); err != nil {
  16. return
  17. }
  18. resp = append(resp, runners...)
  19. if response.NextPage == 0 {
  20. break
  21. }
  22. }
  23. return
  24. }
  25. /*-------------------------------------- sync runner ----------------------------------------*/
  26. // SyncAllRunners ...
  27. func (s *Service) SyncAllRunners(projectID int) (totalPage, totalNum int, err error) {
  28. var (
  29. runners []*gitlab.Runner
  30. resp *gitlab.Response
  31. projectInfo *model.ProjectInfo
  32. )
  33. if projectInfo, err = s.dao.ProjectInfoByID(projectID); err != nil {
  34. return
  35. }
  36. for page := 1; ; page++ {
  37. totalPage++
  38. if runners, resp, err = s.gitlab.ListProjectRunners(projectID, page); err != nil {
  39. return
  40. }
  41. for _, runner := range runners {
  42. var (
  43. ipAddress string
  44. )
  45. //ipAddress = runner.IPAddress.String()
  46. runnerDB := &model.StatisticsRunners{
  47. ProjectID: projectID,
  48. ProjectName: projectInfo.Name,
  49. RunnerID: runner.ID,
  50. Description: runner.Description,
  51. Active: runner.Active,
  52. IsShared: runner.IsShared,
  53. IPAddress: ipAddress,
  54. Name: runner.Name,
  55. Online: runner.Online,
  56. Status: runner.Status,
  57. Token: runner.Token,
  58. }
  59. if err = s.SaveDatabaseRunner(runnerDB); err != nil {
  60. log.Error("runner Save Database err: projectID(%d), RunnerID(%d)", projectID, runner.ID)
  61. err = nil
  62. continue
  63. }
  64. totalNum++
  65. }
  66. if resp.NextPage == 0 {
  67. break
  68. }
  69. }
  70. return
  71. }
  72. // SaveDatabaseRunner ...
  73. func (s *Service) SaveDatabaseRunner(runnerDB *model.StatisticsRunners) (err error) {
  74. var total int
  75. if total, err = s.dao.HasRunner(runnerDB.ProjectID, runnerDB.RunnerID); err != nil {
  76. log.Error("SaveDatabaseRunner HasRunner(%+v)", err)
  77. return
  78. }
  79. // found only one, so update
  80. if total == 1 {
  81. if err = s.dao.UpdateRunner(runnerDB.ProjectID, runnerDB.RunnerID, runnerDB); err != nil {
  82. log.Error("SaveDatabaseRunner UpdateRunner(%+v)", err)
  83. return
  84. }
  85. return
  86. } else if total > 1 {
  87. // found repeated row, this situation will not exist under normal
  88. log.Warn("SaveDatabaseRunner commit has more rows(%d)", total)
  89. return
  90. }
  91. // insert row now
  92. if err = s.dao.CreateRunner(runnerDB); err != nil {
  93. log.Error("SaveDatabaseRunner CreateRunner(%+v)", err)
  94. return
  95. }
  96. return
  97. }