diff --git a/models/repo_statistic.go b/models/repo_statistic.go index a95340225..5fddb769e 100755 --- a/models/repo_statistic.go +++ b/models/repo_statistic.go @@ -1,6 +1,7 @@ package models import ( + "fmt" "time" "code.gitea.io/gitea/modules/timeutil" @@ -35,3 +36,24 @@ type RepoStatistic struct { CreatedUnix timeutil.TimeStamp `xorm:"INDEX created"` UpdatedUnix timeutil.TimeStamp `xorm:"INDEX updated"` } + + +func DeleteRepoStatDaily(date time.Time) error { + sess := xStatistic.NewSession() + defer sess.Close() + if err := sess.Begin(); err != nil { + return fmt.Errorf("Begin: %v", err) + } + + if _, err := sess.Where("date = ?", date).Delete(&RepoStatistic{}); err != nil { + return fmt.Errorf("Delete: %v", err) + } + + if err := sess.Commit(); err != nil { + sess.Close() + return fmt.Errorf("Commit: %v", err) + } + + sess.Close() + return nil +} diff --git a/routers/repo/repo_statistic.go b/routers/repo/repo_statistic.go new file mode 100755 index 000000000..85184db21 --- /dev/null +++ b/routers/repo/repo_statistic.go @@ -0,0 +1,39 @@ +package repo + +import ( + "time" + + "code.gitea.io/gitea/models" + "code.gitea.io/gitea/modules/log" +) + +//auto daily or manually +func RepoStatisticDaily() { + //delete all yesterday + log.Info("", time.Now()) + yesterday := time.Now().AddDate(0, 0, -1) + log.Info("", yesterday) + if err := models.DeleteRepoStatDaily(yesterday); err != nil { + log.Error("DeleteRepoStatDaily failed: %v", err.Error()) + return + } + + repos, err := models.GetAllRepositories() + if err != nil { + log.Error("GetAllRepositories failed: %v", err.Error()) + return + } + + for _, repo := range repos { + log.Info("start statistic: %s", repo.Name) + repoStat, err := models.GetRepoKPIStats(repo) + if err != nil { + log.Error("GetRepoKPIStats failed: %s", repo.Name) + log.Error("failed statistic: %s", repo.Name) + continue + } + log.Info("", repoStat.DevelopAge) + log.Info("finish statistic: %s", repo.Name) + } + +}