Browse Source

代码优化,项目统计记录失败发送邮件

pull/858/head
ychao_1983 3 years ago
parent
commit
c025c708fb
4 changed files with 40 additions and 17 deletions
  1. +5
    -2
      modules/setting/setting.go
  2. +2
    -8
      routers/api/v1/repo/repo_dashbord.go
  3. +17
    -7
      routers/repo/repo_statistic.go
  4. +16
    -0
      services/mailer/mail.go

+ 5
- 2
modules/setting/setting.go View File

@@ -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")

}



+ 2
- 8
routers/api/v1/repo/repo_dashbord.go View File

@@ -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 {


+ 17
- 7
routers/repo/repo_statistic.go View File

@@ -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 {


+ 16
- 0
services/mailer/mail.go View File

@@ -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 {


Loading…
Cancel
Save