113 lines
2.7 KiB
Go
113 lines
2.7 KiB
Go
package service
|
|
|
|
import (
|
|
"context"
|
|
|
|
"go-common/app/admin/ep/saga/model"
|
|
"go-common/library/log"
|
|
|
|
"github.com/xanzy/go-gitlab"
|
|
)
|
|
|
|
//QueryProjectRunners query project runners info according to project id
|
|
func (s *Service) QueryProjectRunners(c context.Context, req *model.ProjectDataReq) (resp []*gitlab.Runner, err error) {
|
|
var (
|
|
runners []*gitlab.Runner
|
|
response *gitlab.Response
|
|
)
|
|
|
|
for page := 1; ; page++ {
|
|
if runners, response, err = s.gitlab.ListProjectRunners(req.ProjectID, page); err != nil {
|
|
return
|
|
}
|
|
resp = append(resp, runners...)
|
|
if response.NextPage == 0 {
|
|
break
|
|
}
|
|
}
|
|
return
|
|
}
|
|
|
|
/*-------------------------------------- sync runner ----------------------------------------*/
|
|
|
|
// SyncAllRunners ...
|
|
func (s *Service) SyncAllRunners(projectID int) (totalPage, totalNum int, err error) {
|
|
var (
|
|
runners []*gitlab.Runner
|
|
resp *gitlab.Response
|
|
projectInfo *model.ProjectInfo
|
|
)
|
|
if projectInfo, err = s.dao.ProjectInfoByID(projectID); err != nil {
|
|
return
|
|
}
|
|
|
|
for page := 1; ; page++ {
|
|
totalPage++
|
|
if runners, resp, err = s.gitlab.ListProjectRunners(projectID, page); err != nil {
|
|
return
|
|
}
|
|
for _, runner := range runners {
|
|
var (
|
|
ipAddress string
|
|
)
|
|
//ipAddress = runner.IPAddress.String()
|
|
runnerDB := &model.StatisticsRunners{
|
|
ProjectID: projectID,
|
|
ProjectName: projectInfo.Name,
|
|
RunnerID: runner.ID,
|
|
Description: runner.Description,
|
|
Active: runner.Active,
|
|
IsShared: runner.IsShared,
|
|
IPAddress: ipAddress,
|
|
Name: runner.Name,
|
|
Online: runner.Online,
|
|
Status: runner.Status,
|
|
Token: runner.Token,
|
|
}
|
|
|
|
if err = s.SaveDatabaseRunner(runnerDB); err != nil {
|
|
log.Error("runner Save Database err: projectID(%d), RunnerID(%d)", projectID, runner.ID)
|
|
err = nil
|
|
continue
|
|
}
|
|
totalNum++
|
|
}
|
|
|
|
if resp.NextPage == 0 {
|
|
break
|
|
}
|
|
}
|
|
return
|
|
}
|
|
|
|
// SaveDatabaseRunner ...
|
|
func (s *Service) SaveDatabaseRunner(runnerDB *model.StatisticsRunners) (err error) {
|
|
var total int
|
|
|
|
if total, err = s.dao.HasRunner(runnerDB.ProjectID, runnerDB.RunnerID); err != nil {
|
|
log.Error("SaveDatabaseRunner HasRunner(%+v)", err)
|
|
return
|
|
}
|
|
|
|
// found only one, so update
|
|
if total == 1 {
|
|
if err = s.dao.UpdateRunner(runnerDB.ProjectID, runnerDB.RunnerID, runnerDB); err != nil {
|
|
log.Error("SaveDatabaseRunner UpdateRunner(%+v)", err)
|
|
return
|
|
}
|
|
return
|
|
} else if total > 1 {
|
|
// found repeated row, this situation will not exist under normal
|
|
log.Warn("SaveDatabaseRunner commit has more rows(%d)", total)
|
|
return
|
|
}
|
|
|
|
// insert row now
|
|
if err = s.dao.CreateRunner(runnerDB); err != nil {
|
|
log.Error("SaveDatabaseRunner CreateRunner(%+v)", err)
|
|
return
|
|
}
|
|
|
|
return
|
|
}
|