From c025c708fbdbf020be9216c844bf9309fe086023 Mon Sep 17 00:00:00 2001 From: ychao_1983 Date: Wed, 17 Nov 2021 10:45:50 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E4=BC=98=E5=8C=96=EF=BC=8C?= =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E7=BB=9F=E8=AE=A1=E8=AE=B0=E5=BD=95=E5=A4=B1?= =?UTF-8?q?=E8=B4=A5=E5=8F=91=E9=80=81=E9=82=AE=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/setting/setting.go | 7 +++++-- routers/api/v1/repo/repo_dashbord.go | 10 ++-------- routers/repo/repo_statistic.go | 24 +++++++++++++++++------- services/mailer/mail.go | 16 ++++++++++++++++ 4 files changed, 40 insertions(+), 17 deletions(-) diff --git a/modules/setting/setting.go b/modules/setting/setting.go index 9f31612b6..c533eb924 100755 --- a/modules/setting/setting.go +++ b/modules/setting/setting.go @@ -547,8 +547,9 @@ var ( GrowthCommit float64 GrowthComments float64 RecordBeginTime string - Path string }{} + + Warn_Notify_Mails []string ) // DateLang transforms standard language locale name to corresponding value in datetime plugin. @@ -1292,6 +1293,9 @@ func NewContext() { ElkTimeFormat = sec.Key("ELKTIMEFORMAT").MustString("date_time") SetRadarMapConfig() + + sec = Cfg.Section("warn_mail") + Warn_Notify_Mails = strings.Split(sec.Key("mails").MustString(""), ",") } func SetRadarMapConfig() { @@ -1329,7 +1333,6 @@ func SetRadarMapConfig() { RadarMap.GrowthCommit = sec.Key("growth_commit").MustFloat64(0.2) RadarMap.GrowthComments = sec.Key("growth_comments").MustFloat64(0.2) RadarMap.RecordBeginTime = sec.Key("record_beigin_time").MustString("2021-11-05") - RadarMap.Path = sec.Key("PATH").MustString("data/projectborad") } diff --git a/routers/api/v1/repo/repo_dashbord.go b/routers/api/v1/repo/repo_dashbord.go index 041162039..8f45f6cac 100644 --- a/routers/api/v1/repo/repo_dashbord.go +++ b/routers/api/v1/repo/repo_dashbord.go @@ -4,8 +4,6 @@ import ( "fmt" "net/http" "net/url" - "os" - "path" "strconv" "time" @@ -175,10 +173,6 @@ func ServeAllProjectsPeriodStatisticsFile(ctx *context.Context) { var projectAnalysis = ctx.Tr("repo.repo_stat_inspect") fileName := getFileName(ctx, beginTime, endTime, projectAnalysis) - if err := os.MkdirAll(setting.RadarMap.Path, os.ModePerm); err != nil { - ctx.Error(http.StatusBadRequest, fmt.Errorf("Failed to create dir %s: %v", setting.AvatarUploadPath, err).Error()) - } - totalPage := getTotalPage(total, pageSize) f := excelize.NewFile() @@ -214,7 +208,7 @@ func ServeAllProjectsPeriodStatisticsFile(ctx *context.Context) { } func getFileName(ctx *context.Context, beginTime time.Time, endTime time.Time, projectAnalysis string) string { - baseName := setting.RadarMap.Path + "/" + projectAnalysis + "_" + baseName := projectAnalysis + "_" if ctx.QueryTrim("q") != "" { baseName = baseName + ctx.QueryTrim("q") + "_" @@ -225,7 +219,7 @@ func getFileName(ctx *context.Context, beginTime time.Time, endTime time.Time, p baseName = baseName + beginTime.AddDate(0, 0, -1).Format(EXCEL_DATE_FORMAT) + "_" + endTime.AddDate(0, 0, -1).Format(EXCEL_DATE_FORMAT) } frontName := baseName + ".xlsx" - return path.Base(frontName) + return frontName } func allProjectsPeroidHeader(ctx *context.Context) map[string]string { diff --git a/routers/repo/repo_statistic.go b/routers/repo/repo_statistic.go index 59cb5e4c7..066b29772 100755 --- a/routers/repo/repo_statistic.go +++ b/routers/repo/repo_statistic.go @@ -3,6 +3,8 @@ package repo import ( "time" + "code.gitea.io/gitea/services/mailer" + "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/normalization" @@ -26,14 +28,17 @@ func RepoStatisticDaily(date string) { log.Info("%s", date) log.Info("begin Repo Statistic") t, _ := time.Parse("2006-01-02", date) + warnEmailMessage := "项目统计信息入库失败,请尽快定位。" if err := models.DeleteRepoStatDaily(date); err != nil { log.Error("DeleteRepoStatDaily failed: %v", err.Error()) + mailer.SendWarnNotifyMail(setting.Warn_Notify_Mails, warnEmailMessage) return } repos, err := models.GetAllRepositories() if err != nil { log.Error("GetAllRepositories failed: %v", err.Error()) + mailer.SendWarnNotifyMail(setting.Warn_Notify_Mails, warnEmailMessage) return } @@ -47,7 +52,7 @@ func RepoStatisticDaily(date string) { var numDevMonths, numWikiViews, numContributor, numKeyContributor, numCommitsGrowth, numCommitLinesGrowth, numContributorsGrowth int64 repoGitStat, err := models.GetRepoKPIStats(repo) if err != nil { - log.Error("GetRepoKPIStats failed: %s", repo.Name) + log.Error("GetRepoKPIStats failed: %s", getDistinctProjectName(repo)) } else { numDevMonths = repoGitStat.DevelopAge numKeyContributor = repoGitStat.KeyContributors @@ -68,26 +73,26 @@ func RepoStatisticDaily(date string) { var numVersions int64 numVersions, err = models.GetReleaseCountByRepoID(repo.ID, models.FindReleasesOptions{}) if err != nil { - log.Error("GetReleaseCountByRepoID failed(%s): %v", repo.Name, err) + log.Error("GetReleaseCountByRepoID failed(%s): %v", getDistinctProjectName(repo), err) } var datasetSize int64 datasetSize, err = getDatasetSize(repo) if err != nil { - log.Error("getDatasetSize failed(%s): %v", repo.Name, err) + log.Error("getDatasetSize failed(%s): %v", getDistinctProjectName(repo), err) } var numComments int64 numComments, err = models.GetCommentCountByRepoID(repo.ID) if err != nil { - log.Error("GetCommentCountByRepoID failed(%s): %v", repo.Name, err) + log.Error("GetCommentCountByRepoID failed(%s): %v", getDistinctProjectName(repo), err) } 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", repo.Name, err) + log.Error("AppointProjectView failed(%s): %v", getDistinctProjectName(repo), err) } repoStat := models.RepoStatistic{ @@ -151,8 +156,9 @@ func RepoStatisticDaily(date string) { } if _, err = models.InsertRepoStat(&repoStat); err != nil { - log.Error("InsertRepoStat failed(%s): %v", repo.Name, err) - log.Error("failed statistic: %s", repo.Name) + log.Error("InsertRepoStat failed(%s): %v", getDistinctProjectName(repo), err) + log.Error("failed statistic: %s", getDistinctProjectName(repo)) + mailer.SendWarnNotifyMail(setting.Warn_Notify_Mails, warnEmailMessage) continue } @@ -244,6 +250,10 @@ func RepoStatisticDaily(date string) { } +func getDistinctProjectName(repo *models.Repository) string { + return repo.OwnerName + "/" + repo.Name +} + func getDatasetSize(repo *models.Repository) (int64, error) { dataset, err := models.GetDatasetByRepo(repo) if err != nil { diff --git a/services/mailer/mail.go b/services/mailer/mail.go index e9395f130..ef7447be2 100755 --- a/services/mailer/mail.go +++ b/services/mailer/mail.go @@ -115,6 +115,22 @@ func SendActivateEmailMail(locale Locale, u *models.User, email *models.EmailAdd SendAsync(msg) } +func SendWarnNotifyMail(emails []string, message string) { + if setting.MailService == nil { + log.Warn("SendWarnNotifyMail is being invoked but mail service hasn't been initialized") + return + } + if len(emails) == 0 { + log.Warn("SendWarnNotifyMail is being invoked but do not have email to send") + return + } + msg := NewMessage(emails, message, message) + msg.Info = fmt.Sprintf(message) + + SendAsync(msg) + +} + // SendRegisterNotifyMail triggers a notify e-mail by admin created a account. func SendRegisterNotifyMail(locale Locale, u *models.User) { if setting.MailService == nil {