diff --git a/go.mod b/go.mod index 69f788413..337aabc8e 100755 --- a/go.mod +++ b/go.mod @@ -17,6 +17,7 @@ require ( gitea.com/macaron/macaron v1.4.0 gitea.com/macaron/session v0.0.0-20191207215012-613cebf0674d gitea.com/macaron/toolbox v0.0.0-20190822013122-05ff0fc766b7 + github.com/360EntSecGroup-Skylar/excelize/v2 v2.0.2 github.com/BurntSushi/toml v0.3.1 github.com/PuerkitoBio/goquery v1.5.0 github.com/RichardKnop/machinery v1.6.9 @@ -107,7 +108,6 @@ require ( github.com/unknwon/paginater v0.0.0-20151104151617-7748a72e0141 github.com/urfave/cli v1.22.1 github.com/xanzy/go-gitlab v0.31.0 - github.com/360EntSecGroup-Skylar/excelize/v2 v2.0.2 github.com/yohcop/openid-go v1.0.0 github.com/yuin/goldmark v1.1.27 github.com/yuin/goldmark-meta v0.0.0-20191126180153-f0638e958b60 diff --git a/models/repo_statistic.go b/models/repo_statistic.go index 0b2ded07a..5e872fa38 100755 --- a/models/repo_statistic.go +++ b/models/repo_statistic.go @@ -172,3 +172,10 @@ func UpdateRepoStat(repoStat *RepoStatistic) error { _, err := xStatistic.Exec(sql, repoStat.Impact, repoStat.Completeness, repoStat.Liveness, repoStat.ProjectHealth, repoStat.TeamHealth, repoStat.Growth, repoStat.RadarTotal, repoStat.RepoID, repoStat.Date) return err } + +func UpdateRepoStatVisits(repoStat *RepoStatistic) error { + sql := "update repo_statistic set num_visits=? where repo_id=? and date=?" + + _, err := xStatistic.Exec(sql, repoStat.NumVisits, repoStat.RepoID, repoStat.Date) + return err +} diff --git a/routers/private/internal.go b/routers/private/internal.go index b254d48ba..0dd725ca3 100755 --- a/routers/private/internal.go +++ b/routers/private/internal.go @@ -43,7 +43,8 @@ func RegisterRoutes(m *macaron.Macaron) { m.Post("/manager/restart", Restart) m.Post("/manager/flush-queues", bind(private.FlushOptions{}), FlushQueues) m.Post("/tool/update_all_repo_commit_cnt", UpdateAllRepoCommitCnt) - m.Post("/tool/repo_stat", RepoStatisticManually) + m.Post("/tool/repo_stat/:date", RepoStatisticManually) + m.Post("/tool/update_repo_visit/:date", UpdateRepoVisit) }, CheckInternalToken) } diff --git a/routers/private/tool.go b/routers/private/tool.go index b93f17090..d01c5b2ab 100755 --- a/routers/private/tool.go +++ b/routers/private/tool.go @@ -39,8 +39,35 @@ func UpdateAllRepoCommitCnt(ctx *macaron.Context) { } func RepoStatisticManually(ctx *macaron.Context) { - date := ctx.Query("date") + date := ctx.Params("date") repo.RepoStatisticDaily(date) repo.SummaryStatisticDaily(date) repo.TimingCountDataByDate(date) } + +func UpdateRepoVisit(ctx *macaron.Context) { + date := ctx.Params("date") + log.Info("date(%s)", date) + + repos, err := models.GetAllRepositories() + if err != nil { + log.Error("GetAllRepositories failed:%v", err.Error(), ctx.Data["MsgID"]) + ctx.JSON(http.StatusInternalServerError, map[string]string{ + "error_msg": "GetAllRepositories failed", + }) + return + } + + for i, repoStat := range repos { + log.Info("%d:begin UpdateRepoVisits(id = %d, name = %s)", i, repoStat.ID, repoStat.Name) + if err = repo.UpdateRepoVisits(ctx, repoStat, date); err != nil { + log.Error("UpdateRepoVisits(id = %d, name = %s) failed:%v", repoStat.ID, repoStat.Name, err.Error()) + continue + } + log.Info("%d:finish UpdateRepoVisits(id = %d, name = %s)", i, repoStat.ID, repoStat.Name) + } + + ctx.JSON(http.StatusOK, map[string]string{ + "error_msg": "", + }) +} diff --git a/routers/repo/repo_statistic.go b/routers/repo/repo_statistic.go index 066b29772..7aadd431f 100755 --- a/routers/repo/repo_statistic.go +++ b/routers/repo/repo_statistic.go @@ -1,15 +1,17 @@ package repo import ( + "errors" "time" - "code.gitea.io/gitea/services/mailer" - "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/normalization" "code.gitea.io/gitea/modules/repository" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/gitea/services/mailer" + + "gitea.com/macaron/macaron" ) func StatisticAuto() { @@ -48,7 +50,7 @@ func RepoStatisticDaily(date string) { var maxRepoRadar models.RepoStatistic for i, repo := range repos { - log.Info("start statistic: %s", repo.Name) + log.Info("start statistic: %s", getDistinctProjectName(repo)) var numDevMonths, numWikiViews, numContributor, numKeyContributor, numCommitsGrowth, numCommitLinesGrowth, numContributorsGrowth int64 repoGitStat, err := models.GetRepoKPIStats(repo) if err != nil { @@ -230,7 +232,7 @@ func RepoStatisticDaily(date string) { } - log.Info("finish statistic: %s", repo.Name) + log.Info("finish statistic: %s", getDistinctProjectName(repo)) } //radar map @@ -274,3 +276,29 @@ func getStatTime(timeStr string) (string, string) { return beginTime, endTime } + +func UpdateRepoVisits(ctx *macaron.Context, repo *models.Repository, date string) error { + beginTime, endTime := getStatTime(date) + var numVisits int + numVisits, err := repository.AppointProjectView(repo.OwnerName, repo.Name, beginTime, endTime) + if err != nil { + log.Error("AppointProjectView failed(%s): %v", getDistinctProjectName(repo), err) + return err + } + + repoStat, err := models.GetRepoStatisticByDate(date, repo.ID) + if err != nil { + log.Error("GetRepoStatisticByDate failed(%s): %v", getDistinctProjectName(repo), err) + return err + } else if len(repoStat) != 1 { + log.Error("GetRepoStatisticByDate failed(%s): %v", getDistinctProjectName(repo), err) + return errors.New("not find repo") + } + repoStat[0].NumVisits = int64(numVisits) + + if err = models.UpdateRepoStatVisits(repoStat[0]); err != nil { + log.Error("UpdateRepoStatVisits failed(%s): %v", getDistinctProjectName(repo), err) + return err + } + return nil +}