From 20a8d651f39eb138a8448257b0d8c5b4283ed6eb Mon Sep 17 00:00:00 2001 From: Vitaliy Vasilenko Date: Sat, 21 Mar 2015 14:55:00 +0200 Subject: [PATCH] add func to autofix couters in repository --- models/repo.go | 37 +++++++++++++++++++++++++++++++++++++ modules/cron/manager.go | 1 + 2 files changed, 38 insertions(+) diff --git a/models/repo.go b/models/repo.go index cfab329bab..bcd6c0e867 100644 --- a/models/repo.go +++ b/models/repo.go @@ -987,6 +987,7 @@ var ( // Prevent duplicate tasks. isMirrorUpdating = false isGitFscking = false + isCheckRepos = false ) // MirrorUpdate checks and updates mirror repositories. @@ -1078,6 +1079,42 @@ func GitGcRepos() error { }) } +func CheckRepoStats() { + if isCheckRepos { + return + } + isCheckRepos = true + defer func() { isCheckRepos = false }() + + // Check count watchers + results_watch, err := x.Query("SELECT r.id FROM `repository` r WHERE r.num_watches!=(SELECT count(*) FROM `watch` WHERE repo_id=r.id)") + if err != nil { + log.Error(4, "select repository check 'watch': %v", err) + } + for _, repo_id := range results_watch { + log.Info("updating repository count 'watch'") + repoID := com.StrTo(repo_id["id"]).MustInt64() + _, err := x.Exec("UPDATE `repository` SET num_watches=(SELECT count(*) FROM `watch` WHERE repo_id=?) WHERE id=?", repoID, repoID) + if err != nil { + log.Error(4, "update repository check 'watch', repo %v: %v", repo_id, err) + } + } + + // Check count stars + results_star, err := x.Query("SELECT s.id FROM `repository` s WHERE s.num_stars!=(SELECT count(*) FROM `star` WHERE repo_id=s.id)") + if err != nil { + log.Error(4, "select repository check 'star': %v", err) + } + for _, repo_id := range results_star { + log.Info("updating repository count 'star'") + repoID := com.StrTo(repo_id["id"]).MustInt64() + _, err := x.Exec("UPDATE `repository` SET .num_stars=(SELECT count(*) FROM `star` WHERE repo_id=?) WHERE id=?", repoID, repoID) + if err != nil { + log.Error(4, "update repository check 'star', repo %v: %v", repo_id, err) + } + } +} + // _________ .__ .__ ___. __ .__ // \_ ___ \ ____ | | | | _____ \_ |__ ________________ _/ |_|__| ____ ____ // / \ \/ / _ \| | | | \__ \ | __ \ / _ \_ __ \__ \\ __\ |/ _ \ / \ diff --git a/modules/cron/manager.go b/modules/cron/manager.go index 2990ab0604..91ae16be27 100644 --- a/modules/cron/manager.go +++ b/modules/cron/manager.go @@ -19,6 +19,7 @@ func NewCronContext() { if setting.Git.Fsck.Enable { c.AddFunc("Repository health check", fmt.Sprintf("@every %dh", setting.Git.Fsck.Interval), models.GitFsck) } + c.AddFunc("Check repository statistics", "@every 24h", models.CheckRepoStats) c.Start() }