Create & Init Project...
This commit is contained in:
234
app/admin/ep/saga/service/commit.go
Normal file
234
app/admin/ep/saga/service/commit.go
Normal file
@ -0,0 +1,234 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"go-common/app/admin/ep/saga/model"
|
||||
"go-common/app/admin/ep/saga/service/utils"
|
||||
"go-common/library/log"
|
||||
|
||||
"github.com/xanzy/go-gitlab"
|
||||
)
|
||||
|
||||
// QueryProjectCommit query project commit info according to project id.
|
||||
func (s *Service) QueryProjectCommit(c context.Context, req *model.ProjectDataReq) (resp *model.ProjectDataResp, err error) {
|
||||
|
||||
if resp, err = s.QueryProject(c, "commit", req); err != nil {
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// QueryTeamCommit query team commit info according to department and business
|
||||
func (s *Service) QueryTeamCommit(c context.Context, req *model.TeamDataRequest) (resp *model.TeamDataResp, err error) {
|
||||
|
||||
if resp, err = s.QueryTeam(c, "commit", req); err != nil {
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// QueryCommit query commit info according to department、 business and time.
|
||||
func (s *Service) QueryCommit(c context.Context, req *model.CommitRequest) (resp *model.CommitResp, err error) {
|
||||
var (
|
||||
layout = "2006-01-02"
|
||||
projectInfo []*model.ProjectInfo
|
||||
reqProject = &model.ProjectInfoRequest{}
|
||||
ProjectCommit []*model.ProjectCommit
|
||||
respCommit *gitlab.Response
|
||||
since time.Time
|
||||
until time.Time
|
||||
commitNum int
|
||||
)
|
||||
|
||||
if len(req.Department) <= 0 && len(req.Business) <= 0 {
|
||||
log.Warn("query department and business are empty!")
|
||||
return
|
||||
}
|
||||
|
||||
reqProject.Department = req.Department
|
||||
reqProject.Business = req.Business
|
||||
reqProject.Username = req.Username
|
||||
if _, projectInfo, err = s.dao.QueryProjectInfo(false, reqProject); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
if len(projectInfo) <= 0 {
|
||||
log.Warn("Found no project!")
|
||||
return
|
||||
}
|
||||
|
||||
//since, err = time.Parse("2006-01-02 15:04:05", "2018-08-13 00:00:00")
|
||||
if since, err = time.ParseInLocation(layout, req.Since, time.Local); err != nil {
|
||||
return
|
||||
}
|
||||
if until, err = time.ParseInLocation(layout, req.Until, time.Local); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
log.Info("query commit start!")
|
||||
for _, project := range projectInfo {
|
||||
|
||||
if _, respCommit, err = s.gitlab.ListProjectCommit(project.ProjectID, 1, &since, &until); err != nil {
|
||||
return
|
||||
}
|
||||
//log.Info("query: %s, result: %+v", project.Name, respCommit)
|
||||
|
||||
CommitPer := &model.ProjectCommit{
|
||||
ProjectID: project.ProjectID,
|
||||
Name: project.Name,
|
||||
CommitNum: respCommit.TotalItems,
|
||||
}
|
||||
ProjectCommit = append(ProjectCommit, CommitPer)
|
||||
commitNum = commitNum + respCommit.TotalItems
|
||||
}
|
||||
log.Info("query commit end!")
|
||||
|
||||
resp = &model.CommitResp{
|
||||
Total: commitNum,
|
||||
ProjectCommit: ProjectCommit,
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
/*-------------------------------------- sync commit ----------------------------------------*/
|
||||
|
||||
// SyncProjectCommit ...
|
||||
func (s *Service) SyncProjectCommit(projectID int) (result *model.SyncResult, err error) {
|
||||
var (
|
||||
//syncAllTime = conf.Conf.Property.SyncData.SyncAllTime
|
||||
syncAllTime = false
|
||||
commits []*gitlab.Commit
|
||||
resp *gitlab.Response
|
||||
since *time.Time
|
||||
until *time.Time
|
||||
projectInfo *model.ProjectInfo
|
||||
)
|
||||
result = &model.SyncResult{}
|
||||
|
||||
if projectInfo, err = s.dao.ProjectInfoByID(projectID); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
if !syncAllTime {
|
||||
since, until = utils.CalSyncTime()
|
||||
}
|
||||
log.Info("sync project(%d) commit time since: %v, until: %v", projectID, since, until)
|
||||
|
||||
for page := 1; ; page++ {
|
||||
result.TotalPage++
|
||||
if commits, resp, err = s.gitlab.ListProjectCommit(projectID, page, since, until); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
for _, commit := range commits {
|
||||
var (
|
||||
statsAdditions int
|
||||
statsDeletions int
|
||||
parentIDs string
|
||||
commitStatus string
|
||||
)
|
||||
|
||||
if commit.Stats != nil {
|
||||
statsAdditions = commit.Stats.Additions
|
||||
statsDeletions = commit.Stats.Deletions
|
||||
}
|
||||
if commit.Status != nil {
|
||||
commitStatusByte, _ := json.Marshal(commit.Status)
|
||||
commitStatus = string(commitStatusByte)
|
||||
}
|
||||
parentIDsByte, _ := json.Marshal(commit.ParentIDs)
|
||||
parentIDs = string(parentIDsByte)
|
||||
|
||||
commitDB := &model.StatisticsCommits{
|
||||
CommitID: commit.ID,
|
||||
ProjectID: projectID,
|
||||
ProjectName: projectInfo.Name,
|
||||
ShortID: commit.ShortID,
|
||||
Title: commit.Title,
|
||||
AuthorName: commit.AuthorName,
|
||||
AuthoredDate: commit.AuthoredDate,
|
||||
CommitterName: commit.CommitterName,
|
||||
CommittedDate: commit.CommittedDate,
|
||||
CreatedAt: commit.CreatedAt,
|
||||
Message: commit.Message,
|
||||
ParentIDs: parentIDs,
|
||||
StatsAdditions: statsAdditions,
|
||||
StatsDeletions: statsDeletions,
|
||||
Status: commitStatus,
|
||||
}
|
||||
if len(commitDB.Message) > model.MessageMaxLen {
|
||||
commitDB.Message = commitDB.Message[0 : model.MessageMaxLen-1]
|
||||
}
|
||||
|
||||
if err = s.SaveDatabaseCommit(commitDB); err != nil {
|
||||
log.Error("Commit Save Database err: projectID(%d), commitID(%s)", projectID, commit.ID)
|
||||
err = nil
|
||||
|
||||
errData := &model.FailData{
|
||||
ChildIDStr: commit.ID,
|
||||
}
|
||||
result.FailData = append(result.FailData, errData)
|
||||
|
||||
continue
|
||||
}
|
||||
result.TotalNum++
|
||||
}
|
||||
|
||||
if resp.NextPage == 0 {
|
||||
break
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// SaveDatabaseCommit ...
|
||||
func (s *Service) SaveDatabaseCommit(commitDB *model.StatisticsCommits) (err error) {
|
||||
var total int
|
||||
|
||||
if total, err = s.dao.HasCommit(commitDB.ProjectID, commitDB.CommitID); err != nil {
|
||||
log.Error("SaveDatabaseCommit HasCommit(%+v)", err)
|
||||
return
|
||||
}
|
||||
|
||||
// found only one, so update
|
||||
if total == 1 {
|
||||
if err = s.dao.UpdateCommit(commitDB.ProjectID, commitDB.CommitID, commitDB); err != nil {
|
||||
if strings.Contains(err.Error(), model.DatabaseErrorText) {
|
||||
commitDB.Title = strconv.QuoteToASCII(commitDB.Title)
|
||||
commitDB.Message = strconv.QuoteToASCII(commitDB.Message)
|
||||
commitDB.Title = utils.Unicode2Chinese(commitDB.Title)
|
||||
commitDB.Message = utils.Unicode2Chinese(commitDB.Message)
|
||||
}
|
||||
if err = s.dao.UpdateCommit(commitDB.ProjectID, commitDB.CommitID, commitDB); err != nil {
|
||||
log.Error("SaveDatabaseCommit UpdateCommit err(%+v)", err)
|
||||
return
|
||||
}
|
||||
}
|
||||
return
|
||||
} else if total > 1 {
|
||||
// found repeated row, this situation will not exist under normal
|
||||
log.Warn("SaveDatabaseCommit commit has more rows(%d)", total)
|
||||
return
|
||||
}
|
||||
|
||||
// insert row now
|
||||
if err = s.dao.CreateCommit(commitDB); err != nil {
|
||||
if strings.Contains(err.Error(), model.DatabaseErrorText) {
|
||||
commitDB.Title = strconv.QuoteToASCII(commitDB.Title)
|
||||
commitDB.Message = strconv.QuoteToASCII(commitDB.Message)
|
||||
commitDB.Title = utils.Unicode2Chinese(commitDB.Title)
|
||||
commitDB.Message = utils.Unicode2Chinese(commitDB.Message)
|
||||
}
|
||||
if err = s.dao.CreateCommit(commitDB); err != nil {
|
||||
log.Error("SaveDatabaseCommit CreateCommit err(%+v)", err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
Reference in New Issue
Block a user