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 GrowthCommit float64
GrowthComments float64 GrowthComments float64
RecordBeginTime string RecordBeginTime string
Path string
}{} }{}
Warn_Notify_Mails []string
) )


// DateLang transforms standard language locale name to corresponding value in datetime plugin. // 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") ElkTimeFormat = sec.Key("ELKTIMEFORMAT").MustString("date_time")


SetRadarMapConfig() SetRadarMapConfig()

sec = Cfg.Section("warn_mail")
Warn_Notify_Mails = strings.Split(sec.Key("mails").MustString(""), ",")
} }


func SetRadarMapConfig() { func SetRadarMapConfig() {
@@ -1329,7 +1333,6 @@ func SetRadarMapConfig() {
RadarMap.GrowthCommit = sec.Key("growth_commit").MustFloat64(0.2) RadarMap.GrowthCommit = sec.Key("growth_commit").MustFloat64(0.2)
RadarMap.GrowthComments = sec.Key("growth_comments").MustFloat64(0.2) RadarMap.GrowthComments = sec.Key("growth_comments").MustFloat64(0.2)
RadarMap.RecordBeginTime = sec.Key("record_beigin_time").MustString("2021-11-05") 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" "fmt"
"net/http" "net/http"
"net/url" "net/url"
"os"
"path"
"strconv" "strconv"
"time" "time"


@@ -175,10 +173,6 @@ func ServeAllProjectsPeriodStatisticsFile(ctx *context.Context) {
var projectAnalysis = ctx.Tr("repo.repo_stat_inspect") var projectAnalysis = ctx.Tr("repo.repo_stat_inspect")
fileName := getFileName(ctx, beginTime, endTime, projectAnalysis) 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) totalPage := getTotalPage(total, pageSize)


f := excelize.NewFile() 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 { 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") != "" { if ctx.QueryTrim("q") != "" {
baseName = baseName + 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) baseName = baseName + beginTime.AddDate(0, 0, -1).Format(EXCEL_DATE_FORMAT) + "_" + endTime.AddDate(0, 0, -1).Format(EXCEL_DATE_FORMAT)
} }
frontName := baseName + ".xlsx" frontName := baseName + ".xlsx"
return path.Base(frontName)
return frontName
} }


func allProjectsPeroidHeader(ctx *context.Context) map[string]string { func allProjectsPeroidHeader(ctx *context.Context) map[string]string {


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

@@ -3,6 +3,8 @@ package repo
import ( import (
"time" "time"


"code.gitea.io/gitea/services/mailer"

"code.gitea.io/gitea/models" "code.gitea.io/gitea/models"
"code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/normalization" "code.gitea.io/gitea/modules/normalization"
@@ -26,14 +28,17 @@ func RepoStatisticDaily(date string) {
log.Info("%s", date) log.Info("%s", date)
log.Info("begin Repo Statistic") log.Info("begin Repo Statistic")
t, _ := time.Parse("2006-01-02", date) t, _ := time.Parse("2006-01-02", date)
warnEmailMessage := "项目统计信息入库失败,请尽快定位。"
if err := models.DeleteRepoStatDaily(date); err != nil { if err := models.DeleteRepoStatDaily(date); err != nil {
log.Error("DeleteRepoStatDaily failed: %v", err.Error()) log.Error("DeleteRepoStatDaily failed: %v", err.Error())
mailer.SendWarnNotifyMail(setting.Warn_Notify_Mails, warnEmailMessage)
return return
} }


repos, err := models.GetAllRepositories() repos, err := models.GetAllRepositories()
if err != nil { if err != nil {
log.Error("GetAllRepositories failed: %v", err.Error()) log.Error("GetAllRepositories failed: %v", err.Error())
mailer.SendWarnNotifyMail(setting.Warn_Notify_Mails, warnEmailMessage)
return return
} }


@@ -47,7 +52,7 @@ func RepoStatisticDaily(date string) {
var numDevMonths, numWikiViews, numContributor, numKeyContributor, numCommitsGrowth, numCommitLinesGrowth, numContributorsGrowth int64 var numDevMonths, numWikiViews, numContributor, numKeyContributor, numCommitsGrowth, numCommitLinesGrowth, numContributorsGrowth int64
repoGitStat, err := models.GetRepoKPIStats(repo) repoGitStat, err := models.GetRepoKPIStats(repo)
if err != nil { if err != nil {
log.Error("GetRepoKPIStats failed: %s", repo.Name)
log.Error("GetRepoKPIStats failed: %s", getDistinctProjectName(repo))
} else { } else {
numDevMonths = repoGitStat.DevelopAge numDevMonths = repoGitStat.DevelopAge
numKeyContributor = repoGitStat.KeyContributors numKeyContributor = repoGitStat.KeyContributors
@@ -68,26 +73,26 @@ func RepoStatisticDaily(date string) {
var numVersions int64 var numVersions int64
numVersions, err = models.GetReleaseCountByRepoID(repo.ID, models.FindReleasesOptions{}) numVersions, err = models.GetReleaseCountByRepoID(repo.ID, models.FindReleasesOptions{})
if err != nil { if err != nil {
log.Error("GetReleaseCountByRepoID failed(%s): %v", repo.Name, err)
log.Error("GetReleaseCountByRepoID failed(%s): %v", getDistinctProjectName(repo), err)
} }


var datasetSize int64 var datasetSize int64
datasetSize, err = getDatasetSize(repo) datasetSize, err = getDatasetSize(repo)
if err != nil { if err != nil {
log.Error("getDatasetSize failed(%s): %v", repo.Name, err)
log.Error("getDatasetSize failed(%s): %v", getDistinctProjectName(repo), err)
} }


var numComments int64 var numComments int64
numComments, err = models.GetCommentCountByRepoID(repo.ID) numComments, err = models.GetCommentCountByRepoID(repo.ID)
if err != nil { 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) beginTime, endTime := getStatTime(date)
var numVisits int var numVisits int
numVisits, err = repository.AppointProjectView(repo.OwnerName, repo.Name, beginTime, endTime) numVisits, err = repository.AppointProjectView(repo.OwnerName, repo.Name, beginTime, endTime)
if err != nil { if err != nil {
log.Error("AppointProjectView failed(%s): %v", repo.Name, err)
log.Error("AppointProjectView failed(%s): %v", getDistinctProjectName(repo), err)
} }


repoStat := models.RepoStatistic{ repoStat := models.RepoStatistic{
@@ -151,8 +156,9 @@ func RepoStatisticDaily(date string) {
} }


if _, err = models.InsertRepoStat(&repoStat); err != nil { 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 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) { func getDatasetSize(repo *models.Repository) (int64, error) {
dataset, err := models.GetDatasetByRepo(repo) dataset, err := models.GetDatasetByRepo(repo)
if err != nil { 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) 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. // SendRegisterNotifyMail triggers a notify e-mail by admin created a account.
func SendRegisterNotifyMail(locale Locale, u *models.User) { func SendRegisterNotifyMail(locale Locale, u *models.User) {
if setting.MailService == nil { if setting.MailService == nil {


Loading…
Cancel
Save