@@ -11,7 +11,6 @@ import ( | |||||
"code.gitea.io/gitea/models" | "code.gitea.io/gitea/models" | ||||
"code.gitea.io/gitea/modules/migrations" | "code.gitea.io/gitea/modules/migrations" | ||||
repository_service "code.gitea.io/gitea/modules/repository" | repository_service "code.gitea.io/gitea/modules/repository" | ||||
api_repo "code.gitea.io/gitea/routers/api/v1/repo" | |||||
"code.gitea.io/gitea/routers/repo" | "code.gitea.io/gitea/routers/repo" | ||||
mirror_service "code.gitea.io/gitea/services/mirror" | mirror_service "code.gitea.io/gitea/services/mirror" | ||||
) | ) | ||||
@@ -186,17 +185,6 @@ func registerHandleSummaryStatistic() { | |||||
}) | }) | ||||
} | } | ||||
func registerHandleClearRepoStatisticFile() { | |||||
RegisterTaskFatal("handle_repo_clear_statistic_file", &BaseConfig{ | |||||
Enabled: true, | |||||
RunAtStart: false, | |||||
Schedule: "@daily", | |||||
}, func(ctx context.Context, _ *models.User, _ Config) error { | |||||
api_repo.ClearUnusedStatisticsFile() | |||||
return nil | |||||
}) | |||||
} | |||||
func initBasicTasks() { | func initBasicTasks() { | ||||
registerUpdateMirrorTask() | registerUpdateMirrorTask() | ||||
registerRepoHealthCheck() | registerRepoHealthCheck() | ||||
@@ -2,7 +2,6 @@ package repo | |||||
import ( | import ( | ||||
"fmt" | "fmt" | ||||
"io/ioutil" | |||||
"net/http" | "net/http" | ||||
"net/url" | "net/url" | ||||
"os" | "os" | ||||
@@ -174,7 +173,7 @@ func ServeAllProjectsPeriodStatisticsFile(ctx *context.Context) { | |||||
return | return | ||||
} | } | ||||
var projectAnalysis = ctx.Tr("repo.repo_stat_inspect") | var projectAnalysis = ctx.Tr("repo.repo_stat_inspect") | ||||
fileName, frontName := getFileName(ctx, beginTime, endTime, projectAnalysis) | |||||
fileName := getFileName(ctx, beginTime, endTime, projectAnalysis) | |||||
if err := os.MkdirAll(setting.RadarMap.Path, os.ModePerm); err != nil { | 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()) | ctx.Error(http.StatusBadRequest, fmt.Errorf("Failed to create dir %s: %v", setting.AvatarUploadPath, err).Error()) | ||||
@@ -207,17 +206,14 @@ func ServeAllProjectsPeriodStatisticsFile(ctx *context.Context) { | |||||
f.SetActiveSheet(index) | f.SetActiveSheet(index) | ||||
f.DeleteSheet("Sheet1") | f.DeleteSheet("Sheet1") | ||||
if err := f.SaveAs(fileName); err != nil { | |||||
log.Error("Can not generate file.", err) | |||||
ctx.Error(http.StatusBadRequest, ctx.Tr("repo.generate_statistic_file_error")) | |||||
return | |||||
} | |||||
ctx.Resp.Header().Set("Content-Disposition", "attachment; filename="+url.QueryEscape(fileName)) | |||||
ctx.Resp.Header().Set("Content-Type", "application/octet-stream") | |||||
ctx.ServeFile(fileName, url.QueryEscape(frontName)) | |||||
f.WriteTo(ctx.Resp) | |||||
} | } | ||||
func getFileName(ctx *context.Context, beginTime time.Time, endTime time.Time, projectAnalysis string) (string, string) { | |||||
func getFileName(ctx *context.Context, beginTime time.Time, endTime time.Time, projectAnalysis string) string { | |||||
baseName := setting.RadarMap.Path + "/" + projectAnalysis + "_" | baseName := setting.RadarMap.Path + "/" + projectAnalysis + "_" | ||||
if ctx.QueryTrim("q") != "" { | if ctx.QueryTrim("q") != "" { | ||||
@@ -229,23 +225,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" | ||||
localName := baseName + "_" + strconv.FormatInt(time.Now().Unix(), 10) + ".xlsx" | |||||
return localName, path.Base(frontName) | |||||
} | |||||
func ClearUnusedStatisticsFile() { | |||||
fileInfos, err := ioutil.ReadDir(setting.RadarMap.Path) | |||||
if err != nil { | |||||
log.Warn("can not read dir: "+setting.RadarMap.Path, err) | |||||
return | |||||
} | |||||
for _, fileInfo := range fileInfos { | |||||
if !fileInfo.IsDir() && fileInfo.ModTime().Before(time.Now().AddDate(0, 0, -1)) { | |||||
os.Remove(path.Join(setting.RadarMap.Path, fileInfo.Name())) | |||||
} | |||||
} | |||||
return path.Base(frontName) | |||||
} | } | ||||
func allProjectsPeroidHeader(ctx *context.Context) map[string]string { | func allProjectsPeroidHeader(ctx *context.Context) map[string]string { | ||||
@@ -2,7 +2,7 @@ | |||||
<div style="width: 100%;"> | <div style="width: 100%;"> | ||||
<div id = "pro_main"> | <div id = "pro_main"> | ||||
<div style="margin-top: 10px;"> | <div style="margin-top: 10px;"> | ||||
<b class="pro_item">项目分析</b> <span class="update_time">数据更新时间:{{lastUpdatedTime}} / 从{{recordBeginTime}}开始统计</span> | |||||
<b class="pro_item">项目分析</b> <span class="update_time">数据更新时间:</span> <span style="font-size: 12px;">{{lastUpdatedTime}} / 从{{recordBeginTime}}开始统计</span> | |||||
</div> | </div> | ||||
<bar-label :width="'95%'" :height="'500px'"></bar-label> | <bar-label :width="'95%'" :height="'500px'"></bar-label> | ||||
@@ -156,7 +156,7 @@ | |||||
</div> | </div> | ||||
<div id ="pro_detail" style="display:none;width: 100%;"> | <div id ="pro_detail" style="display:none;width: 100%;"> | ||||
<div style="margin-top: 10px;"> | <div style="margin-top: 10px;"> | ||||
<b class="pro_item">{{this.ownerName}}/{{this.pro_name}}</b> <span class="update_time">数据更新时间:{{tableDataIDTotal.lastUpdatedTime}}/{{tableDataIDTotal.recordBeginTime}}</span> | |||||
<b class="pro_item">{{this.ownerName}}/{{this.pro_name}}</b> <span class="update_time">数据更新时间:</span><span style="font-size: 12px;">{{tableDataIDTotal.lastUpdatedTime}}/{{tableDataIDTotal.recordBeginTime}}</span> | |||||
</div> | </div> | ||||
<div style="margin-top: 10px;"> | <div style="margin-top: 10px;"> | ||||
项目描述:{{tableDataIDTotal.description | discriptionFun}} | 项目描述:{{tableDataIDTotal.description | discriptionFun}} | ||||
@@ -1069,16 +1069,17 @@ | |||||
height: 30px; | height: 30px; | ||||
border-radius:4px ; | border-radius:4px ; | ||||
} | } | ||||
/* | |||||
.btn:focus, | .btn:focus, | ||||
.btn:active{ | .btn:active{ | ||||
background-color:#409effd6 ; | background-color:#409effd6 ; | ||||
} | |||||
} */ | |||||
/deep/ .el-date-picker { | /deep/ .el-date-picker { | ||||
width: 200px; | width: 200px; | ||||
} | } | ||||
.colorChange { | .colorChange { | ||||
background-color: #409effd6; | background-color: #409effd6; | ||||
color: #FFFF; | |||||
} | } | ||||
.items{ | .items{ | ||||
text-align: center; | text-align: center; | ||||
@@ -1,7 +1,7 @@ | |||||
<template> | <template> | ||||
<div> | <div> | ||||
<div style="margin-top: 10px;"> | <div style="margin-top: 10px;"> | ||||
<b class="pro_item">用户分析</b> <span class="update_time">数据更新时间:{{lastUpdatedTime}}  / 从{{recordBeginTime}}开始统计</span> | |||||
<b class="pro_item">用户分析</b> <span class="update_time">数据更新时间:</span><span style="font-size: 12px;">{{lastUpdatedTime}}  / 从{{recordBeginTime}}开始统计</span> | |||||
</div> | </div> | ||||
<div style="margin-top: 20px;"> | <div style="margin-top: 20px;"> | ||||
<span class="sta_iterm">统计周期:</span> | <span class="sta_iterm">统计周期:</span> | ||||
@@ -171,7 +171,7 @@ | |||||
value_time: '', | value_time: '', | ||||
search:'', | search:'', | ||||
data:'', | data:'', | ||||
columns: [{title: 'ID',key: 'ID'},{title: '用户名',key: 'Name'},{title: 'PR数',key: 'CommitCount'},{title: '提出任务数',key: 'IssueCount'},{title: '评论数',key: 'CommentCount'},{title: '关注项目数',key: 'FocusRepoCount'},{title: '点赞项目数',key: 'StarRepoCount'},{title: '登录次数',key: 'LoginCount'},{title:'关注者数',key:'WatchedCount'},{title:'commit代码行数',key:'CommitCodeSize'},{title:'已解决任务数',key:'SolveIssueCount'},{title:'百科页面贡献次数',key:'EncyclopediasCount'},{title:'创建项目',key:'CreateRepoCount'},{title:'用户注册时间',key:'RegistDate'},{title:'系统统计时间',key:'CountDate'}], | |||||
columns: [{title: 'ID',key: 'ID'},{title: '用户名',key: 'Name'},{title: 'PR数',key: 'CodeMergeCount'},{title: 'cimmit数',key:'CommitCount'},{title: '提出任务数',key: 'IssueCount'},{title: '评论数',key: 'CommentCount'},{title: '关注项目数',key: 'FocusRepoCount'},{title: '点赞项目数',key: 'StarRepoCount'},{title: '登录次数',key: 'LoginCount'},{title:'关注者数',key:'WatchedCount'},{title:'commit代码行数',key:'CommitCodeSize'},{title:'已解决任务数',key:'SolveIssueCount'},{title:'百科页面贡献次数',key:'EncyclopediasCount'},{title:'创建项目',key:'CreateRepoCount'},{title:'用户注册时间',key:'RegistDate'},{title:'系统统计时间',key:'CountDate'}], | |||||
blob:'', | blob:'', | ||||
fileName:'', | fileName:'', | ||||
dynamic:7, | dynamic:7, | ||||
@@ -422,10 +422,10 @@ | |||||
border-radius:4px ; | border-radius:4px ; | ||||
} | } | ||||
.btn:focus, | |||||
/* .btn:focus, | |||||
.btn:active{ | .btn:active{ | ||||
background-color:#409effd6 ; | background-color:#409effd6 ; | ||||
} | |||||
} */ | |||||
/deep/ .el-date-picker { | /deep/ .el-date-picker { | ||||
width: 200px; | width: 200px; | ||||
} | } | ||||
@@ -435,6 +435,7 @@ | |||||
.colorChange { | .colorChange { | ||||
background-color: #409effd6; | background-color: #409effd6; | ||||
color: #FFFF; | |||||
} | } | ||||
</style> | </style> |