You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
112 lines
2.7 KiB
112 lines
2.7 KiB
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 |
|
}
|
|
|