@@ -388,7 +388,7 @@ type JobResultPayload struct { | |||||
AppProgress string `json:"appProgress"` | AppProgress string `json:"appProgress"` | ||||
AppTrackingURL string `json:"appTrackingUrl"` | AppTrackingURL string `json:"appTrackingUrl"` | ||||
AppLaunchedTime int64 `json:"appLaunchedTime"` | AppLaunchedTime int64 `json:"appLaunchedTime"` | ||||
AppCompletedTime int64 `json:"appCompletedTime"` | |||||
AppCompletedTime interface{} `json:"appCompletedTime"` | |||||
AppExitCode int `json:"appExitCode"` | AppExitCode int `json:"appExitCode"` | ||||
AppExitDiagnostics string `json:"appExitDiagnostics"` | AppExitDiagnostics string `json:"appExitDiagnostics"` | ||||
AppExitType interface{} `json:"appExitType"` | AppExitType interface{} `json:"appExitType"` | ||||
@@ -1370,6 +1370,16 @@ func getRepoCloudBrain(cb *Cloudbrain) (*Cloudbrain, error) { | |||||
return cb, nil | return cb, nil | ||||
} | } | ||||
func getRepoCloudBrainWithDeleted(cb *Cloudbrain) (*Cloudbrain, error) { | |||||
has, err := x.Unscoped().Get(cb) | |||||
if err != nil { | |||||
return nil, err | |||||
} else if !has { | |||||
return nil, ErrJobNotExist{} | |||||
} | |||||
return cb, nil | |||||
} | |||||
func GetRepoCloudBrainByJobID(repoID int64, jobID string) (*Cloudbrain, error) { | func GetRepoCloudBrainByJobID(repoID int64, jobID string) (*Cloudbrain, error) { | ||||
cb := &Cloudbrain{JobID: jobID, RepoID: repoID} | cb := &Cloudbrain{JobID: jobID, RepoID: repoID} | ||||
return getRepoCloudBrain(cb) | return getRepoCloudBrain(cb) | ||||
@@ -1386,6 +1396,12 @@ func GetCloudbrainByID(id string) (*Cloudbrain, error) { | |||||
return getRepoCloudBrain(cb) | return getRepoCloudBrain(cb) | ||||
} | } | ||||
func GetCloudbrainByIDWithDeleted(id string) (*Cloudbrain, error) { | |||||
idInt64, _ := strconv.ParseInt(id, 10, 64) | |||||
cb := &Cloudbrain{ID: idInt64} | |||||
return getRepoCloudBrainWithDeleted(cb) | |||||
} | |||||
func GetCloudbrainByJobIDAndVersionName(jobID string, versionName string) (*Cloudbrain, error) { | func GetCloudbrainByJobIDAndVersionName(jobID string, versionName string) (*Cloudbrain, error) { | ||||
cb := &Cloudbrain{JobID: jobID, VersionName: versionName} | cb := &Cloudbrain{JobID: jobID, VersionName: versionName} | ||||
return getRepoCloudBrain(cb) | return getRepoCloudBrain(cb) | ||||
@@ -139,20 +139,7 @@ func SearchDatasetCondition(opts *SearchDatasetOptions) builder.Cond { | |||||
var cond = builder.NewCond() | var cond = builder.NewCond() | ||||
cond = cond.And(builder.Neq{"dataset.status": DatasetStatusDeleted}) | cond = cond.And(builder.Neq{"dataset.status": DatasetStatusDeleted}) | ||||
if len(opts.Keyword) > 0 { | |||||
cond = cond.And(builder.Or(builder.Like{"dataset.title", opts.Keyword}, builder.Like{"dataset.description", opts.Keyword})) | |||||
} | |||||
if len(opts.Category) > 0 { | |||||
cond = cond.And(builder.Eq{"dataset.category": opts.Category}) | |||||
} | |||||
if len(opts.Task) > 0 { | |||||
cond = cond.And(builder.Eq{"dataset.task": opts.Task}) | |||||
} | |||||
if len(opts.License) > 0 { | |||||
cond = cond.And(builder.Eq{"dataset.license": opts.License}) | |||||
} | |||||
cond = generateFilterCond(opts, cond) | |||||
if opts.RepoID > 0 { | if opts.RepoID > 0 { | ||||
cond = cond.And(builder.Eq{"dataset.repo_id": opts.RepoID}) | cond = cond.And(builder.Eq{"dataset.repo_id": opts.RepoID}) | ||||
@@ -162,14 +149,12 @@ func SearchDatasetCondition(opts *SearchDatasetOptions) builder.Cond { | |||||
cond = cond.And(builder.Eq{"dataset.status": DatasetStatusPublic}) | cond = cond.And(builder.Eq{"dataset.status": DatasetStatusPublic}) | ||||
cond = cond.And(builder.Eq{"attachment.is_private": false}) | cond = cond.And(builder.Eq{"attachment.is_private": false}) | ||||
if opts.OwnerID > 0 { | if opts.OwnerID > 0 { | ||||
if len(opts.Keyword) == 0 { | |||||
cond = cond.Or(builder.Eq{"repository.owner_id": opts.OwnerID}) | |||||
} else { | |||||
subCon := builder.NewCond() | |||||
subCon = subCon.And(builder.Eq{"repository.owner_id": opts.OwnerID}, builder.Or(builder.Like{"dataset.title", opts.Keyword}, builder.Like{"dataset.description", opts.Keyword})) | |||||
cond = cond.Or(subCon) | |||||
} | |||||
subCon := builder.NewCond() | |||||
subCon = subCon.And(builder.Eq{"repository.owner_id": opts.OwnerID}) | |||||
subCon = generateFilterCond(opts, subCon) | |||||
cond = cond.Or(subCon) | |||||
} | } | ||||
} else if opts.OwnerID > 0 { | } else if opts.OwnerID > 0 { | ||||
cond = cond.And(builder.Eq{"repository.owner_id": opts.OwnerID}) | cond = cond.And(builder.Eq{"repository.owner_id": opts.OwnerID}) | ||||
@@ -182,6 +167,25 @@ func SearchDatasetCondition(opts *SearchDatasetOptions) builder.Cond { | |||||
return cond | return cond | ||||
} | } | ||||
func generateFilterCond(opts *SearchDatasetOptions, cond builder.Cond) builder.Cond { | |||||
if len(opts.Keyword) > 0 { | |||||
cond = cond.And(builder.Or(builder.Like{"dataset.title", opts.Keyword}, builder.Like{"dataset.description", opts.Keyword})) | |||||
} | |||||
if len(opts.Category) > 0 { | |||||
cond = cond.And(builder.Eq{"dataset.category": opts.Category}) | |||||
} | |||||
if len(opts.Task) > 0 { | |||||
cond = cond.And(builder.Eq{"dataset.task": opts.Task}) | |||||
} | |||||
if len(opts.License) > 0 { | |||||
cond = cond.And(builder.Eq{"dataset.license": opts.License}) | |||||
} | |||||
return cond | |||||
} | |||||
func SearchDatasetByCondition(opts *SearchDatasetOptions, cond builder.Cond) (DatasetList, int64, error) { | func SearchDatasetByCondition(opts *SearchDatasetOptions, cond builder.Cond) (DatasetList, int64, error) { | ||||
if opts.Page <= 0 { | if opts.Page <= 0 { | ||||
opts.Page = 1 | opts.Page = 1 | ||||
@@ -348,7 +352,7 @@ func GetDatasetByRepo(repo *Repository) (*Dataset, error) { | |||||
if has { | if has { | ||||
return dataset, nil | return dataset, nil | ||||
} else { | } else { | ||||
return nil, errors.New("Not Found") | |||||
return nil, ErrNotExist{repo.ID} | |||||
} | } | ||||
} | } | ||||
@@ -138,6 +138,7 @@ func init() { | |||||
new(OfficialTag), | new(OfficialTag), | ||||
new(OfficialTagRepos), | new(OfficialTagRepos), | ||||
new(WechatBindLog), | new(WechatBindLog), | ||||
new(OrgStatistic), | |||||
new(SearchRecord), | new(SearchRecord), | ||||
) | ) | ||||
@@ -153,6 +154,8 @@ func init() { | |||||
new(UserBusinessAnalysisCurrentWeek), | new(UserBusinessAnalysisCurrentWeek), | ||||
new(UserBusinessAnalysisYesterday), | new(UserBusinessAnalysisYesterday), | ||||
new(UserLoginLog), | new(UserLoginLog), | ||||
new(UserMetrics), | |||||
new(UserAnalysisPara), | |||||
) | ) | ||||
gonicNames := []string{"SSL", "UID"} | gonicNames := []string{"SSL", "UID"} | ||||
@@ -8,6 +8,7 @@ package models | |||||
import ( | import ( | ||||
"fmt" | "fmt" | ||||
"os" | "os" | ||||
"strconv" | |||||
"strings" | "strings" | ||||
"code.gitea.io/gitea/modules/log" | "code.gitea.io/gitea/modules/log" | ||||
@@ -19,6 +20,17 @@ import ( | |||||
"xorm.io/xorm" | "xorm.io/xorm" | ||||
) | ) | ||||
type OrgStatistic struct { | |||||
ID int64 `xorm:"pk autoincr"` | |||||
OrgID int64 `xorm:"UNIQUE"` | |||||
NumScore int `xorm:"INDEX NOT NULL DEFAULT 0"` | |||||
} | |||||
type OrgScore struct { | |||||
*User | |||||
Score string | |||||
} | |||||
// IsOwnedBy returns true if given user is in the owner team. | // IsOwnedBy returns true if given user is in the owner team. | ||||
func (org *User) IsOwnedBy(uid int64) (bool, error) { | func (org *User) IsOwnedBy(uid int64) (bool, error) { | ||||
return IsOrganizationOwner(org.ID, uid) | return IsOrganizationOwner(org.ID, uid) | ||||
@@ -135,6 +147,93 @@ func (org *User) RemoveOrgRepo(repoID int64) error { | |||||
return org.removeOrgRepo(x, repoID) | return org.removeOrgRepo(x, repoID) | ||||
} | } | ||||
func UpdateOrgStatistics() { | |||||
ids, err := GetOrganizationsId() | |||||
if err != nil { | |||||
return | |||||
} | |||||
for _, id := range ids { | |||||
org := User{ID: id} | |||||
orgStat := &OrgStatistic{OrgID: id} | |||||
numScore, err := org.getOrgStatistics() | |||||
if err == nil { | |||||
has, _ := x.Get(orgStat) | |||||
orgStat.NumScore = numScore | |||||
if has { | |||||
x.ID(orgStat.ID).Cols("num_score").Update(&orgStat) | |||||
} else { | |||||
x.Insert(orgStat) | |||||
} | |||||
} | |||||
} | |||||
} | |||||
func (org *User) getOrgStatistics() (int, error) { | |||||
count, err := getRepositoryCount(x, org) | |||||
if err != nil { | |||||
return 0, err | |||||
} | |||||
err = org.GetRepositories(ListOptions{int(count), 1}) | |||||
if err != nil { | |||||
return 0, err | |||||
} | |||||
var numScore = 0 | |||||
for _, repo := range org.Repos { | |||||
numScore += int(getOpenIByRepoId(repo.ID)) | |||||
} | |||||
return numScore, nil | |||||
} | |||||
func FindTopNStarsOrgs(n int) ([]*OrgScore, error) { | |||||
sql := "select a.id,sum(b.num_stars) score from \"user\" a ,repository b where a.id=b.owner_id and a.type=1 group by a.id order by score desc limit " + strconv.Itoa(n) | |||||
return findTopNOrgs(sql) | |||||
} | |||||
func FindTopNMembersOrgs(n int) ([]*OrgScore, error) { | |||||
sql := "select id, count(user_id) score from" + | |||||
" (select org_id as id, uid as user_id from org_user " + | |||||
"union select a.id,b.user_id from \"user\" a,collaboration b,repository c " + | |||||
"where a.type=1 and a.id=c.owner_id and b.repo_id=c.id) d " + | |||||
"group by id order by score desc limit " + strconv.Itoa(n) | |||||
return findTopNOrgs(sql) | |||||
} | |||||
func FindTopNOpenIOrgs(n int) ([]*OrgScore, error) { | |||||
sql := "select org_id id,num_score score from org_statistic order by num_score desc limit 10" + strconv.Itoa(n) | |||||
return findTopNOrgs(sql) | |||||
} | |||||
func findTopNOrgs(sql string) ([]*OrgScore, error) { | |||||
resutls, err := x.QueryString(sql) | |||||
if err != nil { | |||||
return nil, err | |||||
} | |||||
var orgScore []*OrgScore | |||||
for _, record := range resutls { | |||||
id, _ := strconv.ParseInt(record["id"], 10, 64) | |||||
user, err := getUserByID(x, id) | |||||
if err != nil { | |||||
continue | |||||
} | |||||
orgScore = append(orgScore, &OrgScore{user, record["score"]}) | |||||
} | |||||
return orgScore, nil | |||||
} | |||||
// CreateOrganization creates record of a new organization. | // CreateOrganization creates record of a new organization. | ||||
func CreateOrganization(org, owner *User) (err error) { | func CreateOrganization(org, owner *User) (err error) { | ||||
if !owner.CanCreateOrganization() { | if !owner.CanCreateOrganization() { | ||||
@@ -1607,14 +1607,16 @@ func updateRepository(e Engine, repo *Repository, visibilityChanged bool) (err e | |||||
} | } | ||||
dataset, err := GetDatasetByRepo(repo) | dataset, err := GetDatasetByRepo(repo) | ||||
if err != nil { | |||||
if err != nil && !IsErrNotExist(err) { | |||||
return err | return err | ||||
} | } | ||||
_, err = e.Where("dataset_id = ?", dataset.ID).Cols("is_private").Update(&Attachment{ | |||||
IsPrivate: true, | |||||
}) | |||||
if err != nil { | |||||
return err | |||||
if dataset != nil { | |||||
_, err = e.Where("dataset_id = ?", dataset.ID).Cols("is_private").Update(&Attachment{ | |||||
IsPrivate: true, | |||||
}) | |||||
if err != nil { | |||||
return err | |||||
} | |||||
} | } | ||||
} else { | } else { | ||||
@@ -73,6 +73,16 @@ func (repo *RepoStatistic) DisplayName() string { | |||||
return repo.Alias | return repo.Alias | ||||
} | } | ||||
func getOpenIByRepoId(repoId int64) float64 { | |||||
repoStatistic := new(RepoStatistic) | |||||
has, err := xStatistic.Cols("radar_total").Where("repo_id=?", repoId).Desc("id").Limit(1).Get(repoStatistic) | |||||
if !has || err != nil { | |||||
return 0 | |||||
} | |||||
return repoStatistic.RadarTotal | |||||
} | |||||
func DeleteRepoStatDaily(date string) error { | func DeleteRepoStatDaily(date string) error { | ||||
sess := xStatistic.NewSession() | sess := xStatistic.NewSession() | ||||
defer sess.Close() | defer sess.Close() | ||||
@@ -2104,6 +2104,12 @@ func GetOrganizationsCount() (int64, error) { | |||||
} | } | ||||
func GetOrganizationsId() ([]int64, error) { | |||||
var ids []int64 | |||||
err := x.Table("user").Where("type=1").Cols("id").Find(&ids) | |||||
return ids, err | |||||
} | |||||
func GetBlockChainUnSuccessUsers() ([]*User, error) { | func GetBlockChainUnSuccessUsers() ([]*User, error) { | ||||
users := make([]*User, 0, 10) | users := make([]*User, 0, 10) | ||||
err := x.Where("public_key = ''"). | err := x.Where("public_key = ''"). | ||||
@@ -6,7 +6,6 @@ import ( | |||||
"strconv" | "strconv" | ||||
"time" | "time" | ||||
"code.gitea.io/gitea/modules/git" | |||||
"code.gitea.io/gitea/modules/log" | "code.gitea.io/gitea/modules/log" | ||||
"code.gitea.io/gitea/modules/timeutil" | "code.gitea.io/gitea/modules/timeutil" | ||||
"xorm.io/builder" | "xorm.io/builder" | ||||
@@ -81,6 +80,19 @@ type UserBusinessAnalysisAll struct { | |||||
Name string `xorm:"NOT NULL"` | Name string `xorm:"NOT NULL"` | ||||
DataDate string `xorm:"NULL"` | DataDate string `xorm:"NULL"` | ||||
//cloudbraintask | |||||
CloudBrainTaskNum int `xorm:"NOT NULL DEFAULT 0"` | |||||
GpuDebugJob int `xorm:"NOT NULL DEFAULT 0"` | |||||
NpuDebugJob int `xorm:"NOT NULL DEFAULT 0"` | |||||
GpuTrainJob int `xorm:"NOT NULL DEFAULT 0"` | |||||
NpuTrainJob int `xorm:"NOT NULL DEFAULT 0"` | |||||
NpuInferenceJob int `xorm:"NOT NULL DEFAULT 0"` | |||||
GpuBenchMarkJob int `xorm:"NOT NULL DEFAULT 0"` | |||||
CloudBrainRunTime int `xorm:"NOT NULL DEFAULT 0"` | |||||
CommitDatasetNum int `xorm:"NOT NULL DEFAULT 0"` | |||||
UserIndex float64 `xorm:"NOT NULL DEFAULT 0"` | |||||
UserLocation string `xorm:"NULL"` | |||||
} | } | ||||
type UserBusinessAnalysis struct { | type UserBusinessAnalysis struct { | ||||
@@ -146,6 +158,18 @@ type UserBusinessAnalysis struct { | |||||
Name string `xorm:"NOT NULL"` | Name string `xorm:"NOT NULL"` | ||||
DataDate string `xorm:"NULL"` | DataDate string `xorm:"NULL"` | ||||
CloudBrainTaskNum int `xorm:"NOT NULL DEFAULT 0"` | |||||
GpuDebugJob int `xorm:"NOT NULL DEFAULT 0"` | |||||
NpuDebugJob int `xorm:"NOT NULL DEFAULT 0"` | |||||
GpuTrainJob int `xorm:"NOT NULL DEFAULT 0"` | |||||
NpuTrainJob int `xorm:"NOT NULL DEFAULT 0"` | |||||
NpuInferenceJob int `xorm:"NOT NULL DEFAULT 0"` | |||||
GpuBenchMarkJob int `xorm:"NOT NULL DEFAULT 0"` | |||||
CloudBrainRunTime int `xorm:"NOT NULL DEFAULT 0"` | |||||
CommitDatasetNum int `xorm:"NOT NULL DEFAULT 0"` | |||||
UserIndex float64 `xorm:"NOT NULL DEFAULT 0"` | |||||
UserLocation string `xorm:"NULL"` | |||||
} | } | ||||
type UserBusinessAnalysisQueryOptions struct { | type UserBusinessAnalysisQueryOptions struct { | ||||
@@ -183,6 +207,29 @@ func getLastCountDate() int64 { | |||||
return pageStartTime.Unix() | return pageStartTime.Unix() | ||||
} | } | ||||
func QueryMetrics(start int64, end int64) ([]*UserMetrics, int64) { | |||||
statictisSess := xStatistic.NewSession() | |||||
defer statictisSess.Close() | |||||
userMetricsList := make([]*UserMetrics, 0) | |||||
if err := statictisSess.Table(new(UserMetrics)).Where("count_date >" + fmt.Sprint(start) + " and count_date<" + fmt.Sprint(end)).OrderBy("count_date desc"). | |||||
Find(&userMetricsList); err != nil { | |||||
return nil, 0 | |||||
} | |||||
return userMetricsList, int64(len(userMetricsList)) | |||||
} | |||||
func QueryRankList(key string, tableName string, limit int) ([]*UserBusinessAnalysisAll, int64) { | |||||
statictisSess := xStatistic.NewSession() | |||||
defer statictisSess.Close() | |||||
userBusinessAnalysisAllList := make([]*UserBusinessAnalysisAll, 0) | |||||
if err := statictisSess.Table(tableName).OrderBy(key+" desc,id desc").Limit(limit, 0). | |||||
Find(&userBusinessAnalysisAllList); err != nil { | |||||
return nil, 0 | |||||
} | |||||
return userBusinessAnalysisAllList, int64(len(userBusinessAnalysisAllList)) | |||||
} | |||||
func QueryUserStaticDataByTableName(start int, pageSize int, tableName string, queryObj interface{}, userName string) ([]*UserBusinessAnalysisAll, int64) { | func QueryUserStaticDataByTableName(start int, pageSize int, tableName string, queryObj interface{}, userName string) ([]*UserBusinessAnalysisAll, int64) { | ||||
statictisSess := xStatistic.NewSession() | statictisSess := xStatistic.NewSession() | ||||
defer statictisSess.Close() | defer statictisSess.Close() | ||||
@@ -334,6 +381,7 @@ func QueryUserStaticDataPage(opts *UserBusinessAnalysisQueryOptions) ([]*UserBus | |||||
resultMap[userRecord.ID].WatchedCount += userRecord.WatchedCount | resultMap[userRecord.ID].WatchedCount += userRecord.WatchedCount | ||||
resultMap[userRecord.ID].CommitCodeSize += userRecord.CommitCodeSize | resultMap[userRecord.ID].CommitCodeSize += userRecord.CommitCodeSize | ||||
resultMap[userRecord.ID].CommitDatasetSize += userRecord.CommitDatasetSize | resultMap[userRecord.ID].CommitDatasetSize += userRecord.CommitDatasetSize | ||||
resultMap[userRecord.ID].CommitDatasetNum += userRecord.CommitDatasetNum | |||||
resultMap[userRecord.ID].CommitModelCount += userRecord.CommitModelCount | resultMap[userRecord.ID].CommitModelCount += userRecord.CommitModelCount | ||||
resultMap[userRecord.ID].SolveIssueCount += userRecord.SolveIssueCount | resultMap[userRecord.ID].SolveIssueCount += userRecord.SolveIssueCount | ||||
resultMap[userRecord.ID].EncyclopediasCount += userRecord.EncyclopediasCount | resultMap[userRecord.ID].EncyclopediasCount += userRecord.EncyclopediasCount | ||||
@@ -353,7 +401,7 @@ func QueryUserStaticDataPage(opts *UserBusinessAnalysisQueryOptions) ([]*UserBus | |||||
return userBusinessAnalysisReturnList, count | return userBusinessAnalysisReturnList, count | ||||
} | } | ||||
func refreshUserStaticTable(wikiCountMap map[string]int, CommitCodeSizeMap map[string]*git.UserKPIStats, tableName string, pageStartTime time.Time, pageEndTime time.Time) { | |||||
func refreshUserStaticTable(wikiCountMap map[string]int, tableName string, pageStartTime time.Time, pageEndTime time.Time, userMetrics map[string]int) { | |||||
sess := x.NewSession() | sess := x.NewSession() | ||||
defer sess.Close() | defer sess.Close() | ||||
@@ -379,14 +427,15 @@ func refreshUserStaticTable(wikiCountMap map[string]int, CommitCodeSizeMap map[s | |||||
FocusRepoCountMap := queryWatch(start_unix, end_unix) | FocusRepoCountMap := queryWatch(start_unix, end_unix) | ||||
StarRepoCountMap := queryStar(start_unix, end_unix) | StarRepoCountMap := queryStar(start_unix, end_unix) | ||||
WatchedCountMap := queryFollow(start_unix, end_unix) | WatchedCountMap := queryFollow(start_unix, end_unix) | ||||
CommitDatasetSizeMap := queryDatasetSize(start_unix, end_unix) | |||||
CommitCodeSizeMap := queryCommitCodeSize(start_unix, end_unix) | |||||
CommitDatasetSizeMap, CommitDatasetNumMap := queryDatasetSize(start_unix, end_unix) | |||||
SolveIssueCountMap := querySolveIssue(start_unix, end_unix) | SolveIssueCountMap := querySolveIssue(start_unix, end_unix) | ||||
CreateRepoCountMap := queryUserCreateRepo(start_unix, end_unix) | CreateRepoCountMap := queryUserCreateRepo(start_unix, end_unix) | ||||
LoginCountMap := queryLoginCount(start_unix, end_unix) | LoginCountMap := queryLoginCount(start_unix, end_unix) | ||||
OpenIIndexMap := queryUserRepoOpenIIndex(startTime.Unix(), end_unix) | OpenIIndexMap := queryUserRepoOpenIIndex(startTime.Unix(), end_unix) | ||||
CloudBrainTaskMap, CloudBrainTaskItemMap := queryCloudBrainTask(start_unix, end_unix) | |||||
AiModelManageMap := queryUserModel(start_unix, end_unix) | |||||
DataDate := currentTimeNow.Format("2006-01-02") + " 00:01" | DataDate := currentTimeNow.Format("2006-01-02") + " 00:01" | ||||
cond := "type != 1 and is_active=true" | cond := "type != 1 and is_active=true" | ||||
@@ -395,6 +444,7 @@ func refreshUserStaticTable(wikiCountMap map[string]int, CommitCodeSizeMap map[s | |||||
log.Info("query user error. return.") | log.Info("query user error. return.") | ||||
return | return | ||||
} | } | ||||
ParaWeight := getParaWeight() | |||||
var indexTotal int64 | var indexTotal int64 | ||||
indexTotal = 0 | indexTotal = 0 | ||||
insertCount := 0 | insertCount := 0 | ||||
@@ -412,84 +462,22 @@ func refreshUserStaticTable(wikiCountMap map[string]int, CommitCodeSizeMap map[s | |||||
dateRecordAll.Name = userRecord.Name | dateRecordAll.Name = userRecord.Name | ||||
dateRecordAll.GiteaAgeMonth = subMonth(currentTimeNow, userRecord.CreatedUnix.AsTime()) | dateRecordAll.GiteaAgeMonth = subMonth(currentTimeNow, userRecord.CreatedUnix.AsTime()) | ||||
dateRecordAll.DataDate = DataDate | dateRecordAll.DataDate = DataDate | ||||
if _, ok := CodeMergeCountMap[dateRecordAll.ID]; !ok { | |||||
dateRecordAll.CodeMergeCount = 0 | |||||
} else { | |||||
dateRecordAll.CodeMergeCount = CodeMergeCountMap[dateRecordAll.ID] | |||||
} | |||||
if _, ok := CommitCountMap[dateRecordAll.ID]; !ok { | |||||
dateRecordAll.CommitCount = 0 | |||||
} else { | |||||
dateRecordAll.CommitCount = CommitCountMap[dateRecordAll.ID] | |||||
} | |||||
if _, ok := IssueCountMap[dateRecordAll.ID]; !ok { | |||||
dateRecordAll.IssueCount = 0 | |||||
} else { | |||||
dateRecordAll.IssueCount = IssueCountMap[dateRecordAll.ID] | |||||
} | |||||
if _, ok := CommentCountMap[dateRecordAll.ID]; !ok { | |||||
dateRecordAll.CommentCount = 0 | |||||
} else { | |||||
dateRecordAll.CommentCount = CommentCountMap[dateRecordAll.ID] | |||||
} | |||||
if _, ok := FocusRepoCountMap[dateRecordAll.ID]; !ok { | |||||
dateRecordAll.FocusRepoCount = 0 | |||||
} else { | |||||
dateRecordAll.FocusRepoCount = FocusRepoCountMap[dateRecordAll.ID] | |||||
} | |||||
if _, ok := StarRepoCountMap[dateRecordAll.ID]; !ok { | |||||
dateRecordAll.StarRepoCount = 0 | |||||
} else { | |||||
dateRecordAll.StarRepoCount = StarRepoCountMap[dateRecordAll.ID] | |||||
} | |||||
if _, ok := WatchedCountMap[dateRecordAll.ID]; !ok { | |||||
dateRecordAll.WatchedCount = 0 | |||||
} else { | |||||
dateRecordAll.WatchedCount = WatchedCountMap[dateRecordAll.ID] | |||||
} | |||||
if _, ok := CommitCodeSizeMap[dateRecordAll.Email]; !ok { | |||||
dateRecordAll.CommitCodeSize = 0 | |||||
} else { | |||||
dateRecordAll.CommitCodeSize = int(CommitCodeSizeMap[dateRecordAll.Email].CommitLines) | |||||
} | |||||
if _, ok := CommitDatasetSizeMap[dateRecordAll.ID]; !ok { | |||||
dateRecordAll.CommitDatasetSize = 0 | |||||
} else { | |||||
dateRecordAll.CommitDatasetSize = CommitDatasetSizeMap[dateRecordAll.ID] | |||||
} | |||||
if _, ok := SolveIssueCountMap[dateRecordAll.ID]; !ok { | |||||
dateRecordAll.SolveIssueCount = 0 | |||||
} else { | |||||
dateRecordAll.SolveIssueCount = SolveIssueCountMap[dateRecordAll.ID] | |||||
} | |||||
if _, ok := wikiCountMap[dateRecordAll.Name]; !ok { | |||||
dateRecordAll.EncyclopediasCount = 0 | |||||
} else { | |||||
dateRecordAll.EncyclopediasCount = wikiCountMap[dateRecordAll.Name] | |||||
} | |||||
if _, ok := CreateRepoCountMap[dateRecordAll.ID]; !ok { | |||||
dateRecordAll.CreateRepoCount = 0 | |||||
} else { | |||||
dateRecordAll.CreateRepoCount = CreateRepoCountMap[dateRecordAll.ID] | |||||
} | |||||
if _, ok := LoginCountMap[dateRecordAll.ID]; !ok { | |||||
dateRecordAll.LoginCount = 0 | |||||
} else { | |||||
dateRecordAll.LoginCount = LoginCountMap[dateRecordAll.ID] | |||||
} | |||||
dateRecordAll.UserLocation = userRecord.Location | |||||
dateRecordAll.CodeMergeCount = getMapValue(dateRecordAll.ID, CodeMergeCountMap) | |||||
dateRecordAll.CommitCount = getMapValue(dateRecordAll.ID, CommitCountMap) | |||||
dateRecordAll.IssueCount = getMapValue(dateRecordAll.ID, IssueCountMap) | |||||
dateRecordAll.CommentCount = getMapValue(dateRecordAll.ID, CommentCountMap) | |||||
dateRecordAll.FocusRepoCount = getMapValue(dateRecordAll.ID, FocusRepoCountMap) | |||||
dateRecordAll.StarRepoCount = getMapValue(dateRecordAll.ID, StarRepoCountMap) | |||||
dateRecordAll.WatchedCount = getMapValue(dateRecordAll.ID, WatchedCountMap) | |||||
dateRecordAll.CommitCodeSize = getMapValue(dateRecordAll.ID, CommitCodeSizeMap) | |||||
dateRecordAll.CommitDatasetSize = getMapValue(dateRecordAll.ID, CommitDatasetSizeMap) | |||||
dateRecordAll.CommitDatasetNum = getMapValue(dateRecordAll.ID, CommitDatasetNumMap) | |||||
dateRecordAll.SolveIssueCount = getMapValue(dateRecordAll.ID, SolveIssueCountMap) | |||||
dateRecordAll.EncyclopediasCount = getMapKeyStringValue(dateRecordAll.Name, wikiCountMap) | |||||
dateRecordAll.CreateRepoCount = getMapValue(dateRecordAll.ID, CreateRepoCountMap) | |||||
dateRecordAll.LoginCount = getMapValue(dateRecordAll.ID, LoginCountMap) | |||||
if _, ok := OpenIIndexMap[dateRecordAll.ID]; !ok { | if _, ok := OpenIIndexMap[dateRecordAll.ID]; !ok { | ||||
dateRecordAll.OpenIIndex = 0 | dateRecordAll.OpenIIndex = 0 | ||||
@@ -497,7 +485,15 @@ func refreshUserStaticTable(wikiCountMap map[string]int, CommitCodeSizeMap map[s | |||||
dateRecordAll.OpenIIndex = OpenIIndexMap[dateRecordAll.ID] | dateRecordAll.OpenIIndex = OpenIIndexMap[dateRecordAll.ID] | ||||
} | } | ||||
dateRecordAll.CommitModelCount = 0 | |||||
dateRecordAll.CloudBrainTaskNum = getMapValue(dateRecordAll.ID, CloudBrainTaskMap) | |||||
dateRecordAll.GpuDebugJob = getMapKeyStringValue(fmt.Sprint(dateRecordAll.ID)+"_GpuDebugJob", CloudBrainTaskItemMap) | |||||
dateRecordAll.NpuDebugJob = getMapKeyStringValue(fmt.Sprint(dateRecordAll.ID)+"_NpuDebugJob", CloudBrainTaskItemMap) | |||||
dateRecordAll.GpuTrainJob = getMapKeyStringValue(fmt.Sprint(dateRecordAll.ID)+"_GpuTrainJob", CloudBrainTaskItemMap) | |||||
dateRecordAll.NpuTrainJob = getMapKeyStringValue(fmt.Sprint(dateRecordAll.ID)+"_NpuTrainJob", CloudBrainTaskItemMap) | |||||
dateRecordAll.NpuInferenceJob = getMapKeyStringValue(fmt.Sprint(dateRecordAll.ID)+"_NpuInferenceJob", CloudBrainTaskItemMap) | |||||
dateRecordAll.GpuBenchMarkJob = getMapKeyStringValue(fmt.Sprint(dateRecordAll.ID)+"_GpuBenchMarkJob", CloudBrainTaskItemMap) | |||||
dateRecordAll.CommitModelCount = getMapValue(dateRecordAll.ID, AiModelManageMap) | |||||
dateRecordAll.UserIndex = getUserIndexFromAnalysisAll(dateRecordAll, ParaWeight) | |||||
dateRecordBatch = append(dateRecordBatch, dateRecordAll) | dateRecordBatch = append(dateRecordBatch, dateRecordAll) | ||||
if len(dateRecordBatch) >= BATCH_INSERT_SIZE { | if len(dateRecordBatch) >= BATCH_INSERT_SIZE { | ||||
@@ -508,6 +504,11 @@ func refreshUserStaticTable(wikiCountMap map[string]int, CommitCodeSizeMap map[s | |||||
} | } | ||||
dateRecordBatch = make([]UserBusinessAnalysisAll, 0) | dateRecordBatch = make([]UserBusinessAnalysisAll, 0) | ||||
} | } | ||||
if tableName == "user_business_analysis_all" { | |||||
if dateRecordAll.UserIndex > 0 || dateRecordAll.LoginCount > 0 { | |||||
userMetrics["TotalHasActivityUser"] = getMapKeyStringValue("TotalHasActivityUser", userMetrics) + 1 | |||||
} | |||||
} | |||||
} | } | ||||
indexTotal += PAGE_SIZE | indexTotal += PAGE_SIZE | ||||
if indexTotal >= count { | if indexTotal >= count { | ||||
@@ -529,7 +530,7 @@ func insertTable(dateRecords []UserBusinessAnalysisAll, tableName string, static | |||||
insertBatchSql := "INSERT INTO public." + tableName + | insertBatchSql := "INSERT INTO public." + tableName + | ||||
"(id, count_date, code_merge_count, commit_count, issue_count, comment_count, focus_repo_count, star_repo_count, watched_count, gitea_age_month, commit_code_size, commit_dataset_size, " + | "(id, count_date, code_merge_count, commit_count, issue_count, comment_count, focus_repo_count, star_repo_count, watched_count, gitea_age_month, commit_code_size, commit_dataset_size, " + | ||||
"commit_model_count, solve_issue_count, encyclopedias_count, regist_date, create_repo_count, login_count, open_i_index, email, name, data_date) " + | |||||
"commit_model_count, solve_issue_count, encyclopedias_count, regist_date, create_repo_count, login_count, open_i_index, email, name, data_date,cloud_brain_task_num,gpu_debug_job,npu_debug_job,gpu_train_job,npu_train_job,npu_inference_job,gpu_bench_mark_job,cloud_brain_run_time,commit_dataset_num,user_index,user_location) " + | |||||
"VALUES" | "VALUES" | ||||
for i, record := range dateRecords { | for i, record := range dateRecords { | ||||
@@ -537,7 +538,7 @@ func insertTable(dateRecords []UserBusinessAnalysisAll, tableName string, static | |||||
", " + fmt.Sprint(record.IssueCount) + ", " + fmt.Sprint(record.CommentCount) + ", " + fmt.Sprint(record.FocusRepoCount) + ", " + fmt.Sprint(record.StarRepoCount) + | ", " + fmt.Sprint(record.IssueCount) + ", " + fmt.Sprint(record.CommentCount) + ", " + fmt.Sprint(record.FocusRepoCount) + ", " + fmt.Sprint(record.StarRepoCount) + | ||||
", " + fmt.Sprint(record.WatchedCount) + ", " + fmt.Sprint(record.GiteaAgeMonth) + ", " + fmt.Sprint(record.CommitCodeSize) + ", " + fmt.Sprint(record.CommitDatasetSize) + | ", " + fmt.Sprint(record.WatchedCount) + ", " + fmt.Sprint(record.GiteaAgeMonth) + ", " + fmt.Sprint(record.CommitCodeSize) + ", " + fmt.Sprint(record.CommitDatasetSize) + | ||||
", " + fmt.Sprint(record.CommitModelCount) + ", " + fmt.Sprint(record.SolveIssueCount) + ", " + fmt.Sprint(record.EncyclopediasCount) + ", " + fmt.Sprint(record.RegistDate) + | ", " + fmt.Sprint(record.CommitModelCount) + ", " + fmt.Sprint(record.SolveIssueCount) + ", " + fmt.Sprint(record.EncyclopediasCount) + ", " + fmt.Sprint(record.RegistDate) + | ||||
", " + fmt.Sprint(record.CreateRepoCount) + ", " + fmt.Sprint(record.LoginCount) + ", " + fmt.Sprint(record.OpenIIndex) + ", '" + record.Email + "', '" + record.Name + "', '" + record.DataDate + "')" | |||||
", " + fmt.Sprint(record.CreateRepoCount) + ", " + fmt.Sprint(record.LoginCount) + ", " + fmt.Sprint(record.OpenIIndex) + ", '" + record.Email + "', '" + record.Name + "', '" + record.DataDate + "'," + fmt.Sprint(record.CloudBrainTaskNum) + "," + fmt.Sprint(record.GpuDebugJob) + "," + fmt.Sprint(record.NpuDebugJob) + "," + fmt.Sprint(record.GpuTrainJob) + "," + fmt.Sprint(record.NpuTrainJob) + "," + fmt.Sprint(record.NpuInferenceJob) + "," + fmt.Sprint(record.GpuBenchMarkJob) + "," + fmt.Sprint(record.CloudBrainRunTime) + "," + fmt.Sprint(record.CommitDatasetNum) + "," + fmt.Sprint(record.UserIndex) + ",'" + record.UserLocation + "')" | |||||
if i < (len(dateRecords) - 1) { | if i < (len(dateRecords) - 1) { | ||||
insertBatchSql += "," | insertBatchSql += "," | ||||
} | } | ||||
@@ -546,36 +547,36 @@ func insertTable(dateRecords []UserBusinessAnalysisAll, tableName string, static | |||||
statictisSess.Exec(insertBatchSql) | statictisSess.Exec(insertBatchSql) | ||||
} | } | ||||
func RefreshUserStaticAllTabel(wikiCountMap map[string]int, CommitCodeSizeMap map[string]*git.UserKPIStats) { | |||||
func RefreshUserStaticAllTabel(wikiCountMap map[string]int, userMetrics map[string]int) { | |||||
currentTimeNow := time.Now() | currentTimeNow := time.Now() | ||||
pageStartTime := time.Date(2021, 11, 5, 0, 0, 0, 0, currentTimeNow.Location()) | pageStartTime := time.Date(2021, 11, 5, 0, 0, 0, 0, currentTimeNow.Location()) | ||||
pageEndTime := time.Date(currentTimeNow.Year(), currentTimeNow.Month(), currentTimeNow.Day(), 23, 59, 59, 0, currentTimeNow.Location()) | pageEndTime := time.Date(currentTimeNow.Year(), currentTimeNow.Month(), currentTimeNow.Day(), 23, 59, 59, 0, currentTimeNow.Location()) | ||||
refreshUserStaticTable(wikiCountMap, CommitCodeSizeMap, "user_business_analysis_all", pageStartTime, pageEndTime) | |||||
refreshUserStaticTable(wikiCountMap, "user_business_analysis_all", pageStartTime, pageEndTime, userMetrics) | |||||
log.Info("refresh all data finished.") | log.Info("refresh all data finished.") | ||||
pageStartTime = time.Date(currentTimeNow.Year(), 1, 1, 0, 0, 0, 0, currentTimeNow.Location()) | pageStartTime = time.Date(currentTimeNow.Year(), 1, 1, 0, 0, 0, 0, currentTimeNow.Location()) | ||||
refreshUserStaticTable(wikiCountMap, CommitCodeSizeMap, "user_business_analysis_current_year", pageStartTime, pageEndTime) | |||||
refreshUserStaticTable(wikiCountMap, "user_business_analysis_current_year", pageStartTime, pageEndTime, userMetrics) | |||||
thisMonth := time.Date(currentTimeNow.Year(), currentTimeNow.Month(), 1, 0, 0, 0, 0, currentTimeNow.Location()) | thisMonth := time.Date(currentTimeNow.Year(), currentTimeNow.Month(), 1, 0, 0, 0, 0, currentTimeNow.Location()) | ||||
refreshUserStaticTable(wikiCountMap, CommitCodeSizeMap, "user_business_analysis_current_month", thisMonth, pageEndTime) | |||||
refreshUserStaticTable(wikiCountMap, "user_business_analysis_current_month", thisMonth, pageEndTime, userMetrics) | |||||
offset := int(time.Monday - currentTimeNow.Weekday()) | offset := int(time.Monday - currentTimeNow.Weekday()) | ||||
if offset > 0 { | if offset > 0 { | ||||
offset = -6 | offset = -6 | ||||
} | } | ||||
pageStartTime = time.Date(currentTimeNow.Year(), currentTimeNow.Month(), currentTimeNow.Day(), 0, 0, 0, 0, time.Local).AddDate(0, 0, offset) | pageStartTime = time.Date(currentTimeNow.Year(), currentTimeNow.Month(), currentTimeNow.Day(), 0, 0, 0, 0, time.Local).AddDate(0, 0, offset) | ||||
refreshUserStaticTable(wikiCountMap, CommitCodeSizeMap, "user_business_analysis_current_week", pageStartTime, pageEndTime) | |||||
refreshUserStaticTable(wikiCountMap, "user_business_analysis_current_week", pageStartTime, pageEndTime, userMetrics) | |||||
pageStartTime = time.Date(currentTimeNow.Year(), currentTimeNow.Month(), currentTimeNow.Day(), 0, 0, 0, 0, time.Local).AddDate(0, 0, -30) | pageStartTime = time.Date(currentTimeNow.Year(), currentTimeNow.Month(), currentTimeNow.Day(), 0, 0, 0, 0, time.Local).AddDate(0, 0, -30) | ||||
refreshUserStaticTable(wikiCountMap, CommitCodeSizeMap, "user_business_analysis_last30_day", pageStartTime, pageEndTime) | |||||
refreshUserStaticTable(wikiCountMap, "user_business_analysis_last30_day", pageStartTime, pageEndTime, userMetrics) | |||||
pageStartTime = time.Date(currentTimeNow.Year(), currentTimeNow.Month(), currentTimeNow.Day(), 0, 0, 0, 0, time.Local).AddDate(0, 0, -1) | pageStartTime = time.Date(currentTimeNow.Year(), currentTimeNow.Month(), currentTimeNow.Day(), 0, 0, 0, 0, time.Local).AddDate(0, 0, -1) | ||||
pageEndTime = time.Date(currentTimeNow.Year(), currentTimeNow.Month(), currentTimeNow.Day(), 23, 59, 59, 0, currentTimeNow.Location()).AddDate(0, 0, -1) | pageEndTime = time.Date(currentTimeNow.Year(), currentTimeNow.Month(), currentTimeNow.Day(), 23, 59, 59, 0, currentTimeNow.Location()).AddDate(0, 0, -1) | ||||
refreshUserStaticTable(wikiCountMap, CommitCodeSizeMap, "user_business_analysis_yesterday", pageStartTime, pageEndTime) | |||||
refreshUserStaticTable(wikiCountMap, "user_business_analysis_yesterday", pageStartTime, pageEndTime, userMetrics) | |||||
pageStartTime = thisMonth.AddDate(0, -1, 0) | pageStartTime = thisMonth.AddDate(0, -1, 0) | ||||
pageEndTime = time.Date(currentTimeNow.Year(), currentTimeNow.Month(), 1, 23, 59, 59, 0, currentTimeNow.Location()).AddDate(0, 0, -1) | pageEndTime = time.Date(currentTimeNow.Year(), currentTimeNow.Month(), 1, 23, 59, 59, 0, currentTimeNow.Location()).AddDate(0, 0, -1) | ||||
refreshUserStaticTable(wikiCountMap, CommitCodeSizeMap, "user_business_analysis_last_month", pageStartTime, pageEndTime) | |||||
refreshUserStaticTable(wikiCountMap, "user_business_analysis_last_month", pageStartTime, pageEndTime, userMetrics) | |||||
} | } | ||||
@@ -613,12 +614,13 @@ func CounDataByDateAndReCount(wikiCountMap map[string]int, startTime time.Time, | |||||
} else { | } else { | ||||
log.Info("query commit code size, len=" + fmt.Sprint(len(CommitCodeSizeMap))) | log.Info("query commit code size, len=" + fmt.Sprint(len(CommitCodeSizeMap))) | ||||
} | } | ||||
CommitDatasetSizeMap := queryDatasetSize(start_unix, end_unix) | |||||
CommitDatasetSizeMap, CommitDatasetNumMap := queryDatasetSize(start_unix, end_unix) | |||||
SolveIssueCountMap := querySolveIssue(start_unix, end_unix) | SolveIssueCountMap := querySolveIssue(start_unix, end_unix) | ||||
CreateRepoCountMap := queryUserCreateRepo(start_unix, end_unix) | CreateRepoCountMap := queryUserCreateRepo(start_unix, end_unix) | ||||
LoginCountMap := queryLoginCount(start_unix, end_unix) | LoginCountMap := queryLoginCount(start_unix, end_unix) | ||||
OpenIIndexMap := queryUserRepoOpenIIndex(start_unix, end_unix) | OpenIIndexMap := queryUserRepoOpenIIndex(start_unix, end_unix) | ||||
CloudBrainTaskMap, CloudBrainTaskItemMap := queryCloudBrainTask(start_unix, end_unix) | |||||
AiModelManageMap := queryUserModel(start_unix, end_unix) | |||||
statictisSess := xStatistic.NewSession() | statictisSess := xStatistic.NewSession() | ||||
defer statictisSess.Close() | defer statictisSess.Close() | ||||
@@ -628,6 +630,9 @@ func CounDataByDateAndReCount(wikiCountMap map[string]int, startTime time.Time, | |||||
log.Info("query user error. return.") | log.Info("query user error. return.") | ||||
return err | return err | ||||
} | } | ||||
ParaWeight := getParaWeight() | |||||
userMetrics := make(map[string]int) | |||||
var indexTotal int64 | var indexTotal int64 | ||||
indexTotal = 0 | indexTotal = 0 | ||||
for { | for { | ||||
@@ -648,47 +653,14 @@ func CounDataByDateAndReCount(wikiCountMap map[string]int, startTime time.Time, | |||||
dateRecord.Name = userRecord.Name | dateRecord.Name = userRecord.Name | ||||
dateRecord.GiteaAgeMonth = subMonth(currentTimeNow, userRecord.CreatedUnix.AsTime()) | dateRecord.GiteaAgeMonth = subMonth(currentTimeNow, userRecord.CreatedUnix.AsTime()) | ||||
dateRecord.DataDate = DataDate | dateRecord.DataDate = DataDate | ||||
if _, ok := CodeMergeCountMap[dateRecord.ID]; !ok { | |||||
dateRecord.CodeMergeCount = 0 | |||||
} else { | |||||
dateRecord.CodeMergeCount = CodeMergeCountMap[dateRecord.ID] | |||||
} | |||||
if _, ok := CommitCountMap[dateRecord.ID]; !ok { | |||||
dateRecord.CommitCount = 0 | |||||
} else { | |||||
dateRecord.CommitCount = CommitCountMap[dateRecord.ID] | |||||
} | |||||
if _, ok := IssueCountMap[dateRecord.ID]; !ok { | |||||
dateRecord.IssueCount = 0 | |||||
} else { | |||||
dateRecord.IssueCount = IssueCountMap[dateRecord.ID] | |||||
} | |||||
if _, ok := CommentCountMap[dateRecord.ID]; !ok { | |||||
dateRecord.CommentCount = 0 | |||||
} else { | |||||
dateRecord.CommentCount = CommentCountMap[dateRecord.ID] | |||||
} | |||||
if _, ok := FocusRepoCountMap[dateRecord.ID]; !ok { | |||||
dateRecord.FocusRepoCount = 0 | |||||
} else { | |||||
dateRecord.FocusRepoCount = FocusRepoCountMap[dateRecord.ID] | |||||
} | |||||
if _, ok := StarRepoCountMap[dateRecord.ID]; !ok { | |||||
dateRecord.StarRepoCount = 0 | |||||
} else { | |||||
dateRecord.StarRepoCount = StarRepoCountMap[dateRecord.ID] | |||||
} | |||||
if _, ok := WatchedCountMap[dateRecord.ID]; !ok { | |||||
dateRecord.WatchedCount = 0 | |||||
} else { | |||||
dateRecord.WatchedCount = WatchedCountMap[dateRecord.ID] | |||||
} | |||||
dateRecord.CodeMergeCount = getMapValue(dateRecord.ID, CodeMergeCountMap) | |||||
dateRecord.CommitCount = getMapValue(dateRecord.ID, CommitCountMap) | |||||
dateRecord.IssueCount = getMapValue(dateRecord.ID, IssueCountMap) | |||||
dateRecord.CommentCount = getMapValue(dateRecord.ID, CommentCountMap) | |||||
dateRecord.FocusRepoCount = getMapValue(dateRecord.ID, FocusRepoCountMap) | |||||
dateRecord.StarRepoCount = getMapValue(dateRecord.ID, StarRepoCountMap) | |||||
dateRecord.WatchedCount = getMapValue(dateRecord.ID, WatchedCountMap) | |||||
if _, ok := CommitCodeSizeMap[dateRecord.Email]; !ok { | if _, ok := CommitCodeSizeMap[dateRecord.Email]; !ok { | ||||
dateRecord.CommitCodeSize = 0 | dateRecord.CommitCodeSize = 0 | ||||
@@ -696,35 +668,15 @@ func CounDataByDateAndReCount(wikiCountMap map[string]int, startTime time.Time, | |||||
dateRecord.CommitCodeSize = int(CommitCodeSizeMap[dateRecord.Email].CommitLines) | dateRecord.CommitCodeSize = int(CommitCodeSizeMap[dateRecord.Email].CommitLines) | ||||
} | } | ||||
if _, ok := CommitDatasetSizeMap[dateRecord.ID]; !ok { | |||||
dateRecord.CommitDatasetSize = 0 | |||||
} else { | |||||
dateRecord.CommitDatasetSize = CommitDatasetSizeMap[dateRecord.ID] | |||||
} | |||||
dateRecord.CommitDatasetSize = getMapValue(dateRecord.ID, CommitDatasetSizeMap) | |||||
dateRecord.CommitDatasetNum = getMapValue(dateRecord.ID, CommitDatasetNumMap) | |||||
dateRecord.SolveIssueCount = getMapValue(dateRecord.ID, SolveIssueCountMap) | |||||
if _, ok := SolveIssueCountMap[dateRecord.ID]; !ok { | |||||
dateRecord.SolveIssueCount = 0 | |||||
} else { | |||||
dateRecord.SolveIssueCount = SolveIssueCountMap[dateRecord.ID] | |||||
} | |||||
dateRecord.EncyclopediasCount = getMapKeyStringValue(dateRecord.Name, wikiCountMap) | |||||
if _, ok := wikiCountMap[dateRecord.Name]; !ok { | |||||
dateRecord.EncyclopediasCount = 0 | |||||
} else { | |||||
dateRecord.EncyclopediasCount = wikiCountMap[dateRecord.Name] | |||||
} | |||||
dateRecord.CreateRepoCount = getMapValue(dateRecord.ID, CreateRepoCountMap) | |||||
if _, ok := CreateRepoCountMap[dateRecord.ID]; !ok { | |||||
dateRecord.CreateRepoCount = 0 | |||||
} else { | |||||
dateRecord.CreateRepoCount = CreateRepoCountMap[dateRecord.ID] | |||||
} | |||||
if _, ok := LoginCountMap[dateRecord.ID]; !ok { | |||||
dateRecord.LoginCount = 0 | |||||
} else { | |||||
dateRecord.LoginCount = LoginCountMap[dateRecord.ID] | |||||
} | |||||
dateRecord.LoginCount = getMapValue(dateRecord.ID, LoginCountMap) | |||||
if _, ok := OpenIIndexMap[dateRecord.ID]; !ok { | if _, ok := OpenIIndexMap[dateRecord.ID]; !ok { | ||||
dateRecord.OpenIIndex = 0 | dateRecord.OpenIIndex = 0 | ||||
@@ -732,8 +684,17 @@ func CounDataByDateAndReCount(wikiCountMap map[string]int, startTime time.Time, | |||||
dateRecord.OpenIIndex = OpenIIndexMap[dateRecord.ID] | dateRecord.OpenIIndex = OpenIIndexMap[dateRecord.ID] | ||||
} | } | ||||
dateRecord.CommitModelCount = 0 | |||||
dateRecord.CloudBrainTaskNum = getMapValue(dateRecord.ID, CloudBrainTaskMap) | |||||
dateRecord.GpuDebugJob = getMapKeyStringValue(fmt.Sprint(dateRecord.ID)+"_GpuDebugJob", CloudBrainTaskItemMap) | |||||
dateRecord.NpuDebugJob = getMapKeyStringValue(fmt.Sprint(dateRecord.ID)+"_NpuDebugJob", CloudBrainTaskItemMap) | |||||
dateRecord.GpuTrainJob = getMapKeyStringValue(fmt.Sprint(dateRecord.ID)+"_GpuTrainJob", CloudBrainTaskItemMap) | |||||
dateRecord.NpuTrainJob = getMapKeyStringValue(fmt.Sprint(dateRecord.ID)+"_NpuTrainJob", CloudBrainTaskItemMap) | |||||
dateRecord.NpuInferenceJob = getMapKeyStringValue(fmt.Sprint(dateRecord.ID)+"_NpuInferenceJob", CloudBrainTaskItemMap) | |||||
dateRecord.GpuBenchMarkJob = getMapKeyStringValue(fmt.Sprint(dateRecord.ID)+"_GpuBenchMarkJob", CloudBrainTaskItemMap) | |||||
dateRecord.CloudBrainRunTime = getMapKeyStringValue(fmt.Sprint(dateRecord.ID)+"_CloudBrainRunTime", CloudBrainTaskItemMap) | |||||
dateRecord.CommitModelCount = getMapValue(dateRecord.ID, AiModelManageMap) | |||||
dateRecord.UserIndex = getUserIndex(dateRecord, ParaWeight) | |||||
setUserMetrics(userMetrics, userRecord, start_unix, end_unix, dateRecord) | |||||
_, err = statictisSess.Insert(&dateRecord) | _, err = statictisSess.Insert(&dateRecord) | ||||
if err != nil { | if err != nil { | ||||
log.Info("insert daterecord failed." + err.Error()) | log.Info("insert daterecord failed." + err.Error()) | ||||
@@ -747,11 +708,142 @@ func CounDataByDateAndReCount(wikiCountMap map[string]int, startTime time.Time, | |||||
} | } | ||||
} | } | ||||
RefreshUserStaticAllTabel(wikiCountMap, CommitCodeSizeMap) | |||||
RefreshUserStaticAllTabel(wikiCountMap, userMetrics) | |||||
//insert userMetrics table | |||||
var useMetrics UserMetrics | |||||
useMetrics.CountDate = CountDate.Unix() | |||||
statictisSess.Delete(&useMetrics) | |||||
useMetrics.ActivateRegistUser = getMapKeyStringValue("ActivateRegistUser", userMetrics) | |||||
useMetrics.HasActivityUser = getMapKeyStringValue("HasActivityUser", userMetrics) | |||||
useMetrics.NotActivateRegistUser = getMapKeyStringValue("NotActivateRegistUser", userMetrics) | |||||
useMetrics.TotalActivateRegistUser = getMapKeyStringValue("TotalActivateRegistUser", userMetrics) | |||||
useMetrics.TotalHasActivityUser = getMapKeyStringValue("TotalHasActivityUser", userMetrics) | |||||
statictisSess.Insert(&useMetrics) | |||||
return nil | return nil | ||||
} | } | ||||
func setUserMetrics(userMetrics map[string]int, user *User, start_time int64, end_time int64, dateRecord UserBusinessAnalysis) { | |||||
//ActivateRegistUser int `xorm:"NOT NULL DEFAULT 0"` | |||||
//NotActivateRegistUser int `xorm:"NOT NULL DEFAULT 0"` | |||||
//HasActivityUser int `xorm:"NOT NULL DEFAULT 0"` | |||||
//TotalActivateRegistUser int `xorm:"NOT NULL DEFAULT 0"` | |||||
//TotalHasActivityUser | |||||
regist_time := user.CreatedUnix.AsTime().Unix() | |||||
if regist_time >= start_time && regist_time <= end_time { | |||||
if user.IsActive { | |||||
userMetrics["ActivateRegistUser"] = getMapKeyStringValue("ActivateRegistUser", userMetrics) + 1 | |||||
} else { | |||||
userMetrics["NotActivateRegistUser"] = getMapKeyStringValue("NotActivateRegistUser", userMetrics) + 1 | |||||
} | |||||
} | |||||
if user.IsActive { | |||||
userMetrics["TotalActivateRegistUser"] = getMapKeyStringValue("TotalActivateRegistUser", userMetrics) + 1 | |||||
} | |||||
if dateRecord.UserIndex > 0 || dateRecord.LoginCount > 0 { | |||||
userMetrics["HasActivityUser"] = getMapKeyStringValue("HasActivityUser", userMetrics) + 1 | |||||
} | |||||
} | |||||
func getParaWeight() map[string]float64 { | |||||
result := make(map[string]float64) | |||||
statictisSess := xStatistic.NewSession() | |||||
defer statictisSess.Close() | |||||
statictisSess.Select("*").Table(new(UserAnalysisPara)) | |||||
paraList := make([]*UserAnalysisPara, 0) | |||||
statictisSess.Find(¶List) | |||||
for _, paraRecord := range paraList { | |||||
result[paraRecord.Key] = paraRecord.Value | |||||
} | |||||
return result | |||||
} | |||||
func getUserIndexFromAnalysisAll(dateRecord UserBusinessAnalysisAll, ParaWeight map[string]float64) float64 { | |||||
var result float64 | |||||
// PR数 0.20 | |||||
// commit数 0.20 | |||||
// 提出任务数 0.20 | |||||
// 评论数 0.20 | |||||
// 关注项目数 0.10 | |||||
// 点赞项目数 0.10 | |||||
// 登录次数 0.10 | |||||
result = float64(dateRecord.CodeMergeCount) * getParaWeightValue("CodeMergeCount", ParaWeight, 0.2) | |||||
result += float64(dateRecord.CommitCount) * getParaWeightValue("CommitCount", ParaWeight, 0.2) | |||||
log.Info("1 result=" + fmt.Sprint(result)) | |||||
result += float64(dateRecord.IssueCount) * getParaWeightValue("IssueCount", ParaWeight, 0.2) | |||||
result += float64(dateRecord.CommentCount) * getParaWeightValue("CommentCount", ParaWeight, 0.2) | |||||
result += float64(dateRecord.FocusRepoCount) * getParaWeightValue("FocusRepoCount", ParaWeight, 0.1) | |||||
result += float64(dateRecord.StarRepoCount) * getParaWeightValue("StarRepoCount", ParaWeight, 0.1) | |||||
result += float64(dateRecord.LoginCount) * getParaWeightValue("LoginCount", ParaWeight, 0.1) | |||||
result += float64(dateRecord.WatchedCount) * getParaWeightValue("WatchedCount", ParaWeight, 0.3) | |||||
result += float64(dateRecord.CommitCodeSize) * getParaWeightValue("CommitCodeSize", ParaWeight, 0.1) | |||||
result += float64(dateRecord.SolveIssueCount) * getParaWeightValue("SolveIssueCount", ParaWeight, 0.2) | |||||
result += float64(dateRecord.EncyclopediasCount) * getParaWeightValue("EncyclopediasCount", ParaWeight, 0.1) | |||||
result += float64(dateRecord.CreateRepoCount) * getParaWeightValue("CreateRepoCount", ParaWeight, 0.05) | |||||
result += float64(dateRecord.CloudBrainTaskNum) * getParaWeightValue("CloudBrainTaskNum", ParaWeight, 0.3) | |||||
result += float64(dateRecord.CommitModelCount) * getParaWeightValue("CommitModelCount", ParaWeight, 0.2) | |||||
result += dateRecord.OpenIIndex * getParaWeightValue("OpenIIndex", ParaWeight, 0.1) | |||||
return result | |||||
} | |||||
func getUserIndex(dateRecord UserBusinessAnalysis, ParaWeight map[string]float64) float64 { | |||||
var result float64 | |||||
// PR数 0.20 | |||||
// commit数 0.20 | |||||
// 提出任务数 0.20 | |||||
// 评论数 0.20 | |||||
// 关注项目数 0.10 | |||||
// 点赞项目数 0.10 | |||||
// 登录次数 0.10 | |||||
result = float64(dateRecord.CodeMergeCount) * getParaWeightValue("CodeMergeCount", ParaWeight, 0.2) | |||||
result += float64(dateRecord.CommitCount) * getParaWeightValue("CommitCount", ParaWeight, 0.2) | |||||
log.Info("2 result=" + fmt.Sprint(result)) | |||||
result += float64(dateRecord.IssueCount) * getParaWeightValue("IssueCount", ParaWeight, 0.2) | |||||
result += float64(dateRecord.CommentCount) * getParaWeightValue("CommentCount", ParaWeight, 0.2) | |||||
result += float64(dateRecord.FocusRepoCount) * getParaWeightValue("FocusRepoCount", ParaWeight, 0.1) | |||||
result += float64(dateRecord.StarRepoCount) * getParaWeightValue("StarRepoCount", ParaWeight, 0.1) | |||||
result += float64(dateRecord.LoginCount) * getParaWeightValue("LoginCount", ParaWeight, 0.1) | |||||
result += float64(dateRecord.WatchedCount) * getParaWeightValue("WatchedCount", ParaWeight, 0.3) | |||||
result += float64(dateRecord.CommitCodeSize) * getParaWeightValue("CommitCodeSize", ParaWeight, 0.1) | |||||
result += float64(dateRecord.SolveIssueCount) * getParaWeightValue("SolveIssueCount", ParaWeight, 0.2) | |||||
result += float64(dateRecord.EncyclopediasCount) * getParaWeightValue("EncyclopediasCount", ParaWeight, 0.1) | |||||
result += float64(dateRecord.CreateRepoCount) * getParaWeightValue("CreateRepoCount", ParaWeight, 0.05) | |||||
result += float64(dateRecord.CloudBrainTaskNum) * getParaWeightValue("CloudBrainTaskNum", ParaWeight, 0.3) | |||||
result += float64(dateRecord.CommitModelCount) * getParaWeightValue("CommitModelCount", ParaWeight, 0.2) | |||||
result += dateRecord.OpenIIndex * getParaWeightValue("OpenIIndex", ParaWeight, 0.1) | |||||
return result | |||||
} | |||||
func getParaWeightValue(key string, valueMap map[string]float64, defaultValue float64) float64 { | |||||
if _, ok := valueMap[key]; !ok { | |||||
return defaultValue | |||||
} else { | |||||
return valueMap[key] | |||||
} | |||||
} | |||||
func getMapKeyStringValue(key string, valueMap map[string]int) int { | |||||
if _, ok := valueMap[key]; !ok { | |||||
return 0 | |||||
} else { | |||||
return valueMap[key] | |||||
} | |||||
} | |||||
func getMapValue(userId int64, valueMap map[int64]int) int { | |||||
if _, ok := valueMap[userId]; !ok { | |||||
return 0 | |||||
} else { | |||||
return valueMap[userId] | |||||
} | |||||
} | |||||
func getInt(str string) int { | func getInt(str string) int { | ||||
re, err := strconv.ParseInt(str, 10, 32) | re, err := strconv.ParseInt(str, 10, 32) | ||||
if err != nil { | if err != nil { | ||||
@@ -1052,16 +1144,17 @@ func queryFollow(start_unix int64, end_unix int64) map[int64]int { | |||||
return resultMap | return resultMap | ||||
} | } | ||||
func queryDatasetSize(start_unix int64, end_unix int64) map[int64]int { | |||||
func queryDatasetSize(start_unix int64, end_unix int64) (map[int64]int, map[int64]int) { | |||||
sess := x.NewSession() | sess := x.NewSession() | ||||
defer sess.Close() | defer sess.Close() | ||||
resultMap := make(map[int64]int) | |||||
resultSizeMap := make(map[int64]int) | |||||
resultNumMap := make(map[int64]int) | |||||
cond := " created_unix>=" + fmt.Sprint(start_unix) + " and created_unix<=" + fmt.Sprint(end_unix) | cond := " created_unix>=" + fmt.Sprint(start_unix) + " and created_unix<=" + fmt.Sprint(end_unix) | ||||
count, err := sess.Where(cond).Count(new(Attachment)) | count, err := sess.Where(cond).Count(new(Attachment)) | ||||
if err != nil { | if err != nil { | ||||
log.Info("query attachment error. return.") | log.Info("query attachment error. return.") | ||||
return resultMap | |||||
return resultSizeMap, resultNumMap | |||||
} | } | ||||
var indexTotal int64 | var indexTotal int64 | ||||
indexTotal = 0 | indexTotal = 0 | ||||
@@ -1072,10 +1165,12 @@ func queryDatasetSize(start_unix int64, end_unix int64) map[int64]int { | |||||
log.Info("query Attachment size=" + fmt.Sprint(len(attachmentList))) | log.Info("query Attachment size=" + fmt.Sprint(len(attachmentList))) | ||||
for _, attachRecord := range attachmentList { | for _, attachRecord := range attachmentList { | ||||
if _, ok := resultMap[attachRecord.UploaderID]; !ok { | |||||
resultMap[attachRecord.UploaderID] = int(attachRecord.Size / (1024 * 1024)) //MB | |||||
if _, ok := resultSizeMap[attachRecord.UploaderID]; !ok { | |||||
resultSizeMap[attachRecord.UploaderID] = int(attachRecord.Size / (1024 * 1024)) //MB | |||||
resultNumMap[attachRecord.UploaderID] = 1 | |||||
} else { | } else { | ||||
resultMap[attachRecord.UploaderID] += int(attachRecord.Size / (1024 * 1024)) //MB | |||||
resultSizeMap[attachRecord.UploaderID] += int(attachRecord.Size / (1024 * 1024)) //MB | |||||
resultNumMap[attachRecord.UploaderID] += 1 | |||||
} | } | ||||
} | } | ||||
@@ -1085,7 +1180,7 @@ func queryDatasetSize(start_unix int64, end_unix int64) map[int64]int { | |||||
} | } | ||||
} | } | ||||
return resultMap | |||||
return resultSizeMap, resultNumMap | |||||
} | } | ||||
func queryUserCreateRepo(start_unix int64, end_unix int64) map[int64]int { | func queryUserCreateRepo(start_unix int64, end_unix int64) map[int64]int { | ||||
@@ -1212,6 +1307,133 @@ func queryLoginCount(start_unix int64, end_unix int64) map[int64]int { | |||||
return resultMap | return resultMap | ||||
} | } | ||||
func queryCommitCodeSize(start_unix int64, end_unix int64) map[int64]int { | |||||
statictisSess := xStatistic.NewSession() | |||||
defer statictisSess.Close() | |||||
resultMap := make(map[int64]int) | |||||
cond := "count_date>=" + fmt.Sprint(start_unix) + " and count_date<=" + fmt.Sprint(end_unix) | |||||
count, err := statictisSess.Where(cond).Count(new(UserBusinessAnalysis)) | |||||
if err != nil { | |||||
log.Info("query commit code size error. return.") | |||||
return resultMap | |||||
} | |||||
var indexTotal int64 | |||||
indexTotal = 0 | |||||
for { | |||||
statictisSess.Select("id,commit_code_size").Table("user_business_analysis").Where(cond).OrderBy("id asc").Limit(PAGE_SIZE, int(indexTotal)) | |||||
userBusinessAnalysisList := make([]*UserBusinessAnalysis, 0) | |||||
statictisSess.Find(&userBusinessAnalysisList) | |||||
log.Info("query user login size=" + fmt.Sprint(len(userBusinessAnalysisList))) | |||||
for _, analysisRecord := range userBusinessAnalysisList { | |||||
if _, ok := resultMap[analysisRecord.ID]; !ok { | |||||
resultMap[analysisRecord.ID] = analysisRecord.CommitCodeSize | |||||
} else { | |||||
resultMap[analysisRecord.ID] += analysisRecord.CommitCodeSize | |||||
} | |||||
} | |||||
indexTotal += PAGE_SIZE | |||||
if indexTotal >= count { | |||||
break | |||||
} | |||||
} | |||||
log.Info("user commit code size=" + fmt.Sprint(len(resultMap))) | |||||
return resultMap | |||||
} | |||||
func queryUserModel(start_unix int64, end_unix int64) map[int64]int { | |||||
sess := x.NewSession() | |||||
defer sess.Close() | |||||
resultMap := make(map[int64]int) | |||||
cond := " created_unix>=" + fmt.Sprint(start_unix) + " and created_unix<=" + fmt.Sprint(end_unix) | |||||
count, err := sess.Where(cond).Count(new(AiModelManage)) | |||||
if err != nil { | |||||
log.Info("query AiModelManage error. return.") | |||||
return resultMap | |||||
} | |||||
var indexTotal int64 | |||||
indexTotal = 0 | |||||
for { | |||||
sess.Select("id,user_id").Table("ai_model_manage").Where(cond).OrderBy("id asc").Limit(PAGE_SIZE, int(indexTotal)) | |||||
aiModelList := make([]*AiModelManage, 0) | |||||
sess.Find(&aiModelList) | |||||
log.Info("query AiModelManage size=" + fmt.Sprint(len(aiModelList))) | |||||
for _, aiModelRecord := range aiModelList { | |||||
if _, ok := resultMap[aiModelRecord.UserId]; !ok { | |||||
resultMap[aiModelRecord.UserId] = 1 | |||||
} else { | |||||
resultMap[aiModelRecord.UserId] += 1 | |||||
} | |||||
} | |||||
indexTotal += PAGE_SIZE | |||||
if indexTotal >= count { | |||||
break | |||||
} | |||||
} | |||||
return resultMap | |||||
} | |||||
func queryCloudBrainTask(start_unix int64, end_unix int64) (map[int64]int, map[string]int) { | |||||
sess := x.NewSession() | |||||
defer sess.Close() | |||||
resultMap := make(map[int64]int) | |||||
resultItemMap := make(map[string]int) | |||||
cond := " created_unix>=" + fmt.Sprint(start_unix) + " and created_unix<=" + fmt.Sprint(end_unix) | |||||
count, err := sess.Where(cond).Count(new(Cloudbrain)) | |||||
if err != nil { | |||||
log.Info("query cloudbrain error. return.") | |||||
return resultMap, resultItemMap | |||||
} | |||||
var indexTotal int64 | |||||
indexTotal = 0 | |||||
for { | |||||
sess.Select("id,job_type,user_id,duration,train_job_duration,type").Table("cloudbrain").Where(cond).OrderBy("id asc").Limit(PAGE_SIZE, int(indexTotal)) | |||||
cloudTaskList := make([]*Cloudbrain, 0) | |||||
sess.Find(&cloudTaskList) | |||||
log.Info("query cloudbrain size=" + fmt.Sprint(len(cloudTaskList))) | |||||
for _, cloudTaskRecord := range cloudTaskList { | |||||
if _, ok := resultMap[cloudTaskRecord.UserID]; !ok { | |||||
resultMap[cloudTaskRecord.UserID] = 1 | |||||
} else { | |||||
resultMap[cloudTaskRecord.UserID] += 1 | |||||
} | |||||
setMapKey("CloudBrainRunTime", cloudTaskRecord.UserID, int(cloudTaskRecord.Duration), resultItemMap) | |||||
if cloudTaskRecord.Type == 1 { //npu | |||||
if cloudTaskRecord.JobType == "TRAIN" { | |||||
setMapKey("NpuTrainJob", cloudTaskRecord.UserID, 1, resultItemMap) | |||||
} else if cloudTaskRecord.JobType == "INFERENCE" { | |||||
setMapKey("NpuInferenceJob", cloudTaskRecord.UserID, 1, resultItemMap) | |||||
} else { | |||||
setMapKey("NpuDebugJob", cloudTaskRecord.UserID, 1, resultItemMap) | |||||
} | |||||
} else { //type=0 gpu | |||||
if cloudTaskRecord.JobType == "TRAIN" { | |||||
setMapKey("GpuTrainJob", cloudTaskRecord.UserID, 1, resultItemMap) | |||||
} else if cloudTaskRecord.JobType == "BENCHMARK" { | |||||
setMapKey("GpuBenchMarkJob", cloudTaskRecord.UserID, 1, resultItemMap) | |||||
} else { | |||||
setMapKey("GpuDebugJob", cloudTaskRecord.UserID, 1, resultItemMap) | |||||
} | |||||
} | |||||
} | |||||
indexTotal += PAGE_SIZE | |||||
if indexTotal >= count { | |||||
break | |||||
} | |||||
} | |||||
return resultMap, resultItemMap | |||||
} | |||||
func setMapKey(key string, userId int64, value int, resultItemMap map[string]int) { | |||||
newKey := fmt.Sprint(userId) + "_" + key | |||||
if _, ok := resultItemMap[newKey]; !ok { | |||||
resultItemMap[newKey] = value | |||||
} else { | |||||
resultItemMap[newKey] += value | |||||
} | |||||
} | |||||
func subMonth(t1, t2 time.Time) (month int) { | func subMonth(t1, t2 time.Time) (month int) { | ||||
y1 := t1.Year() | y1 := t1.Year() | ||||
y2 := t2.Year() | y2 := t2.Year() | ||||
@@ -44,6 +44,18 @@ type UserBusinessAnalysisCurrentYear struct { | |||||
//user | //user | ||||
Name string `xorm:"NOT NULL"` | Name string `xorm:"NOT NULL"` | ||||
DataDate string `xorm:"NULL"` | DataDate string `xorm:"NULL"` | ||||
CloudBrainTaskNum int `xorm:"NOT NULL DEFAULT 0"` | |||||
GpuDebugJob int `xorm:"NOT NULL DEFAULT 0"` | |||||
NpuDebugJob int `xorm:"NOT NULL DEFAULT 0"` | |||||
GpuTrainJob int `xorm:"NOT NULL DEFAULT 0"` | |||||
NpuTrainJob int `xorm:"NOT NULL DEFAULT 0"` | |||||
NpuInferenceJob int `xorm:"NOT NULL DEFAULT 0"` | |||||
GpuBenchMarkJob int `xorm:"NOT NULL DEFAULT 0"` | |||||
CloudBrainRunTime int `xorm:"NOT NULL DEFAULT 0"` | |||||
CommitDatasetNum int `xorm:"NOT NULL DEFAULT 0"` | |||||
UserIndex float64 `xorm:"NOT NULL DEFAULT 0"` | |||||
UserLocation string `xorm:"NULL"` | |||||
} | } | ||||
type UserBusinessAnalysisLast30Day struct { | type UserBusinessAnalysisLast30Day struct { | ||||
@@ -88,6 +100,18 @@ type UserBusinessAnalysisLast30Day struct { | |||||
//user | //user | ||||
Name string `xorm:"NOT NULL"` | Name string `xorm:"NOT NULL"` | ||||
DataDate string `xorm:"NULL"` | DataDate string `xorm:"NULL"` | ||||
CloudBrainTaskNum int `xorm:"NOT NULL DEFAULT 0"` | |||||
GpuDebugJob int `xorm:"NOT NULL DEFAULT 0"` | |||||
NpuDebugJob int `xorm:"NOT NULL DEFAULT 0"` | |||||
GpuTrainJob int `xorm:"NOT NULL DEFAULT 0"` | |||||
NpuTrainJob int `xorm:"NOT NULL DEFAULT 0"` | |||||
NpuInferenceJob int `xorm:"NOT NULL DEFAULT 0"` | |||||
GpuBenchMarkJob int `xorm:"NOT NULL DEFAULT 0"` | |||||
CloudBrainRunTime int `xorm:"NOT NULL DEFAULT 0"` | |||||
CommitDatasetNum int `xorm:"NOT NULL DEFAULT 0"` | |||||
UserIndex float64 `xorm:"NOT NULL DEFAULT 0"` | |||||
UserLocation string `xorm:"NULL"` | |||||
} | } | ||||
type UserBusinessAnalysisLastMonth struct { | type UserBusinessAnalysisLastMonth struct { | ||||
@@ -132,6 +156,18 @@ type UserBusinessAnalysisLastMonth struct { | |||||
//user | //user | ||||
Name string `xorm:"NOT NULL"` | Name string `xorm:"NOT NULL"` | ||||
DataDate string `xorm:"NULL"` | DataDate string `xorm:"NULL"` | ||||
CloudBrainTaskNum int `xorm:"NOT NULL DEFAULT 0"` | |||||
GpuDebugJob int `xorm:"NOT NULL DEFAULT 0"` | |||||
NpuDebugJob int `xorm:"NOT NULL DEFAULT 0"` | |||||
GpuTrainJob int `xorm:"NOT NULL DEFAULT 0"` | |||||
NpuTrainJob int `xorm:"NOT NULL DEFAULT 0"` | |||||
NpuInferenceJob int `xorm:"NOT NULL DEFAULT 0"` | |||||
GpuBenchMarkJob int `xorm:"NOT NULL DEFAULT 0"` | |||||
CloudBrainRunTime int `xorm:"NOT NULL DEFAULT 0"` | |||||
CommitDatasetNum int `xorm:"NOT NULL DEFAULT 0"` | |||||
UserIndex float64 `xorm:"NOT NULL DEFAULT 0"` | |||||
UserLocation string `xorm:"NULL"` | |||||
} | } | ||||
type UserBusinessAnalysisCurrentMonth struct { | type UserBusinessAnalysisCurrentMonth struct { | ||||
@@ -176,6 +212,18 @@ type UserBusinessAnalysisCurrentMonth struct { | |||||
//user | //user | ||||
Name string `xorm:"NOT NULL"` | Name string `xorm:"NOT NULL"` | ||||
DataDate string `xorm:"NULL"` | DataDate string `xorm:"NULL"` | ||||
CloudBrainTaskNum int `xorm:"NOT NULL DEFAULT 0"` | |||||
GpuDebugJob int `xorm:"NOT NULL DEFAULT 0"` | |||||
NpuDebugJob int `xorm:"NOT NULL DEFAULT 0"` | |||||
GpuTrainJob int `xorm:"NOT NULL DEFAULT 0"` | |||||
NpuTrainJob int `xorm:"NOT NULL DEFAULT 0"` | |||||
NpuInferenceJob int `xorm:"NOT NULL DEFAULT 0"` | |||||
GpuBenchMarkJob int `xorm:"NOT NULL DEFAULT 0"` | |||||
CloudBrainRunTime int `xorm:"NOT NULL DEFAULT 0"` | |||||
CommitDatasetNum int `xorm:"NOT NULL DEFAULT 0"` | |||||
UserIndex float64 `xorm:"NOT NULL DEFAULT 0"` | |||||
UserLocation string `xorm:"NULL"` | |||||
} | } | ||||
type UserBusinessAnalysisCurrentWeek struct { | type UserBusinessAnalysisCurrentWeek struct { | ||||
@@ -220,6 +268,18 @@ type UserBusinessAnalysisCurrentWeek struct { | |||||
//user | //user | ||||
Name string `xorm:"NOT NULL"` | Name string `xorm:"NOT NULL"` | ||||
DataDate string `xorm:"NULL"` | DataDate string `xorm:"NULL"` | ||||
CloudBrainTaskNum int `xorm:"NOT NULL DEFAULT 0"` | |||||
GpuDebugJob int `xorm:"NOT NULL DEFAULT 0"` | |||||
NpuDebugJob int `xorm:"NOT NULL DEFAULT 0"` | |||||
GpuTrainJob int `xorm:"NOT NULL DEFAULT 0"` | |||||
NpuTrainJob int `xorm:"NOT NULL DEFAULT 0"` | |||||
NpuInferenceJob int `xorm:"NOT NULL DEFAULT 0"` | |||||
GpuBenchMarkJob int `xorm:"NOT NULL DEFAULT 0"` | |||||
CloudBrainRunTime int `xorm:"NOT NULL DEFAULT 0"` | |||||
CommitDatasetNum int `xorm:"NOT NULL DEFAULT 0"` | |||||
UserIndex float64 `xorm:"NOT NULL DEFAULT 0"` | |||||
UserLocation string `xorm:"NULL"` | |||||
} | } | ||||
type UserBusinessAnalysisYesterday struct { | type UserBusinessAnalysisYesterday struct { | ||||
@@ -264,4 +324,30 @@ type UserBusinessAnalysisYesterday struct { | |||||
//user | //user | ||||
Name string `xorm:"NOT NULL"` | Name string `xorm:"NOT NULL"` | ||||
DataDate string `xorm:"NULL"` | DataDate string `xorm:"NULL"` | ||||
CloudBrainTaskNum int `xorm:"NOT NULL DEFAULT 0"` | |||||
GpuDebugJob int `xorm:"NOT NULL DEFAULT 0"` | |||||
NpuDebugJob int `xorm:"NOT NULL DEFAULT 0"` | |||||
GpuTrainJob int `xorm:"NOT NULL DEFAULT 0"` | |||||
NpuTrainJob int `xorm:"NOT NULL DEFAULT 0"` | |||||
NpuInferenceJob int `xorm:"NOT NULL DEFAULT 0"` | |||||
GpuBenchMarkJob int `xorm:"NOT NULL DEFAULT 0"` | |||||
CloudBrainRunTime int `xorm:"NOT NULL DEFAULT 0"` | |||||
CommitDatasetNum int `xorm:"NOT NULL DEFAULT 0"` | |||||
UserIndex float64 `xorm:"NOT NULL DEFAULT 0"` | |||||
UserLocation string `xorm:"NULL"` | |||||
} | |||||
type UserAnalysisPara struct { | |||||
Key string `xorm:"NOT NULL"` | |||||
Value float64 `xorm:"NOT NULL DEFAULT 0"` | |||||
} | |||||
type UserMetrics struct { | |||||
CountDate int64 `xorm:"pk"` | |||||
ActivateRegistUser int `xorm:"NOT NULL DEFAULT 0"` | |||||
NotActivateRegistUser int `xorm:"NOT NULL DEFAULT 0"` | |||||
HasActivityUser int `xorm:"NOT NULL DEFAULT 0"` | |||||
TotalActivateRegistUser int `xorm:"NOT NULL DEFAULT 0"` | |||||
TotalHasActivityUser int `xorm:"NOT NULL DEFAULT 0"` | |||||
} | } |
@@ -21,7 +21,7 @@ const ( | |||||
CodeMountPath = "/code" | CodeMountPath = "/code" | ||||
DataSetMountPath = "/dataset" | DataSetMountPath = "/dataset" | ||||
ModelMountPath = "/model" | ModelMountPath = "/model" | ||||
LogFile = "log.txt" | |||||
LogFile = "log.txt" | |||||
BenchMarkMountPath = "/benchmark" | BenchMarkMountPath = "/benchmark" | ||||
BenchMarkResourceID = 1 | BenchMarkResourceID = 1 | ||||
Snn4imagenetMountPath = "/snn4imagenet" | Snn4imagenetMountPath = "/snn4imagenet" | ||||
@@ -291,16 +291,16 @@ func GenerateTask(ctx *context.Context, displayJobName, jobName, image, command, | |||||
IsLatestVersion: "1", | IsLatestVersion: "1", | ||||
VersionCount: versionCount, | VersionCount: versionCount, | ||||
BranchName: branchName, | BranchName: branchName, | ||||
BootFile: bootFile, | |||||
DatasetName: datasetName, | |||||
Parameters: params, | |||||
BootFile: bootFile, | |||||
DatasetName: datasetName, | |||||
Parameters: params, | |||||
}) | }) | ||||
if err != nil { | if err != nil { | ||||
return err | return err | ||||
} | } | ||||
task, err := models.GetCloudbrainByName(jobName) | |||||
task, err := models.GetCloudbrainByJobID(jobID) | |||||
if err != nil { | if err != nil { | ||||
log.Error("GetCloudbrainByName failed: %v", err.Error()) | log.Error("GetCloudbrainByName failed: %v", err.Error()) | ||||
return err | return err | ||||
@@ -440,8 +440,10 @@ func RestartTask(ctx *context.Context, task *models.Cloudbrain, newID *string) e | |||||
return err | return err | ||||
} | } | ||||
idString := strconv.FormatInt(newTask.ID, 10) | |||||
*newID = idString | |||||
stringId := strconv.FormatInt(newTask.ID, 10) | |||||
*newID = stringId | |||||
notification.NotifyOtherTask(ctx.User, ctx.Repo.Repository, stringId, task.DisplayJobName, models.ActionCreateDebugGPUTask) | |||||
return nil | return nil | ||||
} | } |
@@ -185,6 +185,17 @@ func registerHandleSummaryStatistic() { | |||||
}) | }) | ||||
} | } | ||||
func registerHandleOrgStatistic() { | |||||
RegisterTaskFatal("handle_org_statistic", &BaseConfig{ | |||||
Enabled: true, | |||||
RunAtStart: false, | |||||
Schedule: "0 0 2 * * ?", | |||||
}, func(ctx context.Context, _ *models.User, _ Config) error { | |||||
models.UpdateOrgStatistics() | |||||
return nil | |||||
}) | |||||
} | |||||
func registerSyncCloudbrainStatus() { | func registerSyncCloudbrainStatus() { | ||||
RegisterTaskFatal("sync_cloudbrain_status", &BaseConfig{ | RegisterTaskFatal("sync_cloudbrain_status", &BaseConfig{ | ||||
Enabled: true, | Enabled: true, | ||||
@@ -215,4 +226,5 @@ func initBasicTasks() { | |||||
registerHandleSummaryStatistic() | registerHandleSummaryStatistic() | ||||
registerSyncCloudbrainStatus() | registerSyncCloudbrainStatus() | ||||
registerHandleOrgStatistic() | |||||
} | } |
@@ -493,6 +493,11 @@ static.encyclopediascount=Encyclopedias Count | |||||
static.createrepocount=Create Repo Count | static.createrepocount=Create Repo Count | ||||
static.openiindex=OpenI Index | static.openiindex=OpenI Index | ||||
static.registdate=Regist Date | static.registdate=Regist Date | ||||
static.CloudBrainTaskNum=CloudBrain Task Count | |||||
static.CloudBrainRunTime=CloudBrain Run Time | |||||
static.CommitDatasetNum=Commit Dataset Count | |||||
static.CommitModelCount=Commit Model Count | |||||
static.UserIndex=User Index | |||||
static.countdate=Count Date | static.countdate=Count Date | ||||
static.all=All | static.all=All | ||||
static.public.user_business_analysis_current_month=Current_Month | static.public.user_business_analysis_current_month=Current_Month | ||||
@@ -911,7 +916,9 @@ language_other = Other | |||||
datasets = Datasets | datasets = Datasets | ||||
datasets.desc = Enable Dataset | datasets.desc = Enable Dataset | ||||
cloudbrain_helper=Use GPU/NPU resources to open notebooks, model training tasks, etc. | cloudbrain_helper=Use GPU/NPU resources to open notebooks, model training tasks, etc. | ||||
cloudbrain.exitinfo=Exit Information | |||||
cloudbrain.platform=Platform | |||||
cloudbrain.endtime=End Time | |||||
model_manager = Model | model_manager = Model | ||||
model_noright=No right | model_noright=No right | ||||
model_rename=Duplicate model name, please modify model name. | model_rename=Duplicate model name, please modify model name. | ||||
@@ -2191,6 +2198,16 @@ customize = Customize | |||||
selected_project=Selected Projects | selected_project=Selected Projects | ||||
fold = Fold | fold = Fold | ||||
unfold = Unfold | unfold = Unfold | ||||
org_member = Member | |||||
org_members = Members | |||||
org_team = Team | |||||
org_teams = Teams | |||||
org_repository = Repository | |||||
org_repositories = Repositories | |||||
star = Star Top10 | |||||
member = Members Top10 | |||||
active = Active Top10 | |||||
form.name_reserved = The organization name '%s' is reserved. | form.name_reserved = The organization name '%s' is reserved. | ||||
form.name_pattern_not_allowed = The pattern '%s' is not allowed in an organization name. | form.name_pattern_not_allowed = The pattern '%s' is not allowed in an organization name. | ||||
@@ -496,6 +496,11 @@ static.encyclopediascount=百科页面贡献次数 | |||||
static.createrepocount=创建项目数 | static.createrepocount=创建项目数 | ||||
static.openiindex=OpenI指数 | static.openiindex=OpenI指数 | ||||
static.registdate=用户注册时间 | static.registdate=用户注册时间 | ||||
static.CloudBrainTaskNum=云脑任务数 | |||||
static.CloudBrainRunTime=云脑运行时间(小时) | |||||
static.CommitDatasetNum=上传(提交)数据集文件数 | |||||
static.CommitModelCount=提交模型数 | |||||
static.UserIndex=用户指数 | |||||
static.countdate=系统统计时间 | static.countdate=系统统计时间 | ||||
static.all=所有 | static.all=所有 | ||||
static.public.user_business_analysis_current_month=本月 | static.public.user_business_analysis_current_month=本月 | ||||
@@ -958,7 +963,9 @@ cloudbrain_jobname_err=只能以小写字母或数字开头且只包含小写字 | |||||
cloudbrain_query_fail=查询云脑任务失败。 | cloudbrain_query_fail=查询云脑任务失败。 | ||||
cloudbrain.mirror_tag = 镜像标签 | cloudbrain.mirror_tag = 镜像标签 | ||||
cloudbrain.mirror_description = 镜像描述 | cloudbrain.mirror_description = 镜像描述 | ||||
cloudbrain.exitinfo=退出信息 | |||||
cloudbrain.platform=平台 | |||||
cloudbrain.endtime=结束时间 | |||||
record_begintime_get_err=无法获取统计开始时间。 | record_begintime_get_err=无法获取统计开始时间。 | ||||
parameter_is_wrong=输入参数错误,请检查输入参数。 | parameter_is_wrong=输入参数错误,请检查输入参数。 | ||||
total_count_get_error=查询总页数失败。 | total_count_get_error=查询总页数失败。 | ||||
@@ -2196,6 +2203,16 @@ customize = 自定义 | |||||
selected_project=精选项目 | selected_project=精选项目 | ||||
fold = 收起 | fold = 收起 | ||||
unfold = 展开 | unfold = 展开 | ||||
org_member = 成员 | |||||
org_members = 成员 | |||||
org_team = 团队 | |||||
org_teams = 团队 | |||||
org_repository = 项目 | |||||
org_repositories = 项目 | |||||
star = 点赞榜 | |||||
member = 成员榜 | |||||
active = 活跃榜 | |||||
form.name_reserved=组织名称 '%s' 是被保留的。 | form.name_reserved=组织名称 '%s' 是被保留的。 | ||||
form.name_pattern_not_allowed=组织名称中不允许使用 "%s"。 | form.name_pattern_not_allowed=组织名称中不允许使用 "%s"。 | ||||
@@ -547,6 +547,8 @@ func RegisterRoutes(m *macaron.Macaron) { | |||||
}) | }) | ||||
}, operationReq) | }, operationReq) | ||||
m.Get("/query_user_metrics", operationReq, repo_ext.QueryMetrics) | |||||
m.Get("/query_user_rank_list", operationReq, repo_ext.QueryRankingList) | |||||
m.Get("/query_user_static_page", operationReq, repo_ext.QueryUserStaticDataPage) | m.Get("/query_user_static_page", operationReq, repo_ext.QueryUserStaticDataPage) | ||||
m.Get("/query_user_current_month", operationReq, repo_ext.QueryUserStaticCurrentMonth) | m.Get("/query_user_current_month", operationReq, repo_ext.QueryUserStaticCurrentMonth) | ||||
m.Get("/query_user_current_week", operationReq, repo_ext.QueryUserStaticCurrentWeek) | m.Get("/query_user_current_week", operationReq, repo_ext.QueryUserStaticCurrentWeek) | ||||
@@ -65,7 +65,7 @@ func GetCloudbrainTask(ctx *context.APIContext) { | |||||
log.Error("GetJob failed:", err) | log.Error("GetJob failed:", err) | ||||
return | return | ||||
} | } | ||||
result, err := models.ConvertToJobResultPayload(jobResult.Payload) | |||||
result, _ := models.ConvertToJobResultPayload(jobResult.Payload) | |||||
if err != nil { | if err != nil { | ||||
ctx.NotFound(err) | ctx.NotFound(err) | ||||
log.Error("ConvertToJobResultPayload failed:", err) | log.Error("ConvertToJobResultPayload failed:", err) | ||||
@@ -49,7 +49,7 @@ func Home(ctx *context.Context) { | |||||
ctx.HTML(200, tplHome) | ctx.HTML(200, tplHome) | ||||
} | } | ||||
func setRecommendURL(ctx *context.Context) { | |||||
func setRecommendURLOnly(ctx *context.Context) { | |||||
addr := setting.RecommentRepoAddr[10:] | addr := setting.RecommentRepoAddr[10:] | ||||
start := strings.Index(addr, "/") | start := strings.Index(addr, "/") | ||||
end := strings.Index(addr, "raw") | end := strings.Index(addr, "raw") | ||||
@@ -58,7 +58,10 @@ func setRecommendURL(ctx *context.Context) { | |||||
} else { | } else { | ||||
ctx.Data["RecommendURL"] = setting.RecommentRepoAddr | ctx.Data["RecommendURL"] = setting.RecommentRepoAddr | ||||
} | } | ||||
} | |||||
func setRecommendURL(ctx *context.Context) { | |||||
setRecommendURLOnly(ctx) | |||||
ctx.Data["page_title"] = ctx.Tr("home.page_title") | ctx.Data["page_title"] = ctx.Tr("home.page_title") | ||||
ctx.Data["page_small_title"] = ctx.Tr("home.page_small_title") | ctx.Data["page_small_title"] = ctx.Tr("home.page_small_title") | ||||
ctx.Data["page_description"] = ctx.Tr("home.page_description") | ctx.Data["page_description"] = ctx.Tr("home.page_description") | ||||
@@ -441,17 +444,39 @@ func ExploreOrganizations(ctx *context.Context) { | |||||
ctx.Data["PageIsExploreOrganizations"] = true | ctx.Data["PageIsExploreOrganizations"] = true | ||||
ctx.Data["IsRepoIndexerEnabled"] = setting.Indexer.RepoIndexerEnabled | ctx.Data["IsRepoIndexerEnabled"] = setting.Indexer.RepoIndexerEnabled | ||||
visibleTypes := []structs.VisibleType{structs.VisibleTypePublic} | |||||
if ctx.User != nil { | |||||
visibleTypes = append(visibleTypes, structs.VisibleTypeLimited, structs.VisibleTypePrivate) | |||||
N := 10 | |||||
starInfo, err := models.FindTopNStarsOrgs(N) | |||||
if err != nil { | |||||
log.Error("GetStarOrgInfos failed:%v", err.Error(), ctx.Data["MsgID"]) | |||||
ctx.ServerError("GetStarOrgInfos", err) | |||||
return | |||||
} | |||||
memberInfo, err := models.FindTopNMembersOrgs(N) | |||||
if err != nil { | |||||
log.Error("GetMemberOrgInfos failed:%v", err.Error(), ctx.Data["MsgID"]) | |||||
ctx.ServerError("GetMemberOrgInfos", err) | |||||
return | |||||
} | |||||
openIInfo, err := models.FindTopNOpenIOrgs(N) | |||||
if err != nil { | |||||
log.Error("GetOpenIOrgInfos failed:%v", err.Error(), ctx.Data["MsgID"]) | |||||
ctx.ServerError("GetOpenIOrgInfos", err) | |||||
return | |||||
} | } | ||||
RenderUserSearch(ctx, &models.SearchUserOptions{ | |||||
Actor: ctx.User, | |||||
Type: models.UserTypeOrganization, | |||||
ListOptions: models.ListOptions{PageSize: setting.UI.ExplorePagingNum}, | |||||
Visible: visibleTypes, | |||||
}, tplExploreOrganizations) | |||||
recommendOrgs, err := GetRecommendOrg() | |||||
if err != nil { | |||||
log.Error("GetRecommendOrgInfos failed:%v", err.Error(), ctx.Data["MsgID"]) | |||||
ctx.ServerError("GetRecommendOrgInfos", err) | |||||
return | |||||
} | |||||
setRecommendURLOnly(ctx) | |||||
ctx.Data["RecommendOrgs"] = recommendOrgs | |||||
ctx.Data["StarOrgs"] = starInfo | |||||
ctx.Data["MemberOrgs"] = memberInfo | |||||
ctx.Data["ActiveOrgs"] = openIInfo | |||||
ctx.HTML(http.StatusOK, tplExploreOrganizations) | |||||
} | } | ||||
// ExploreCode render explore code page | // ExploreCode render explore code page | ||||
@@ -583,12 +608,12 @@ func NotFound(ctx *context.Context) { | |||||
ctx.NotFound("home.NotFound", nil) | ctx.NotFound("home.NotFound", nil) | ||||
} | } | ||||
func RecommendOrgFromPromote(ctx *context.Context) { | |||||
func GetRecommendOrg() ([]map[string]interface{}, error) { | |||||
url := setting.RecommentRepoAddr + "organizations" | url := setting.RecommentRepoAddr + "organizations" | ||||
result, err := repository.RecommendFromPromote(url) | result, err := repository.RecommendFromPromote(url) | ||||
if err != nil { | if err != nil { | ||||
ctx.ServerError("500", err) | |||||
return | |||||
return nil, err | |||||
} | } | ||||
resultOrg := make([]map[string]interface{}, 0) | resultOrg := make([]map[string]interface{}, 0) | ||||
for _, userName := range result { | for _, userName := range result { | ||||
@@ -598,6 +623,7 @@ func RecommendOrgFromPromote(ctx *context.Context) { | |||||
userMap["Name"] = user.Name | userMap["Name"] = user.Name | ||||
userMap["Description"] = user.Description | userMap["Description"] = user.Description | ||||
userMap["FullName"] = user.FullName | userMap["FullName"] = user.FullName | ||||
userMap["HomeLink"] = user.HomeLink() | |||||
userMap["ID"] = user.ID | userMap["ID"] = user.ID | ||||
userMap["Avatar"] = user.RelAvatarLink() | userMap["Avatar"] = user.RelAvatarLink() | ||||
userMap["NumRepos"] = user.NumRepos | userMap["NumRepos"] = user.NumRepos | ||||
@@ -608,7 +634,15 @@ func RecommendOrgFromPromote(ctx *context.Context) { | |||||
log.Info("query user error," + err.Error()) | log.Info("query user error," + err.Error()) | ||||
} | } | ||||
} | } | ||||
return resultOrg, nil | |||||
} | |||||
func RecommendOrgFromPromote(ctx *context.Context) { | |||||
resultOrg, err := GetRecommendOrg() | |||||
if err != nil { | |||||
ctx.ServerError("500", err) | |||||
return | |||||
} | |||||
ctx.JSON(200, resultOrg) | ctx.JSON(200, resultOrg) | ||||
} | } | ||||
@@ -45,6 +45,8 @@ func RegisterRoutes(m *macaron.Macaron) { | |||||
m.Post("/manager/flush-queues", bind(private.FlushOptions{}), FlushQueues) | m.Post("/manager/flush-queues", bind(private.FlushOptions{}), FlushQueues) | ||||
m.Post("/tool/update_all_repo_commit_cnt", UpdateAllRepoCommitCnt) | m.Post("/tool/update_all_repo_commit_cnt", UpdateAllRepoCommitCnt) | ||||
m.Post("/tool/repo_stat/:date", RepoStatisticManually) | m.Post("/tool/repo_stat/:date", RepoStatisticManually) | ||||
m.Get("/tool/org_stat", OrgStatisticManually) | |||||
m.Post("/tool/update_repo_visit/:date", UpdateRepoVisit) | m.Post("/tool/update_repo_visit/:date", UpdateRepoVisit) | ||||
m.Post("/task/history_handle/duration", repo.HandleTaskWithNoDuration) | m.Post("/task/history_handle/duration", repo.HandleTaskWithNoDuration) | ||||
@@ -45,6 +45,10 @@ func RepoStatisticManually(ctx *macaron.Context) { | |||||
repo.TimingCountDataByDate(date) | repo.TimingCountDataByDate(date) | ||||
} | } | ||||
func OrgStatisticManually() { | |||||
models.UpdateOrgStatistics() | |||||
} | |||||
func UpdateRepoVisit(ctx *macaron.Context) { | func UpdateRepoVisit(ctx *macaron.Context) { | ||||
date := ctx.Params("date") | date := ctx.Params("date") | ||||
log.Info("date(%s)", date) | log.Info("date(%s)", date) | ||||
@@ -2,11 +2,9 @@ package repo | |||||
import ( | import ( | ||||
"bufio" | "bufio" | ||||
"code.gitea.io/gitea/modules/timeutil" | |||||
"encoding/json" | "encoding/json" | ||||
"errors" | "errors" | ||||
"fmt" | "fmt" | ||||
"github.com/unknwon/i18n" | |||||
"io" | "io" | ||||
"net/http" | "net/http" | ||||
"os" | "os" | ||||
@@ -16,6 +14,9 @@ import ( | |||||
"strings" | "strings" | ||||
"time" | "time" | ||||
"code.gitea.io/gitea/modules/timeutil" | |||||
"github.com/unknwon/i18n" | |||||
"code.gitea.io/gitea/models" | "code.gitea.io/gitea/models" | ||||
"code.gitea.io/gitea/modules/auth" | "code.gitea.io/gitea/modules/auth" | ||||
"code.gitea.io/gitea/modules/base" | "code.gitea.io/gitea/modules/base" | ||||
@@ -400,18 +401,22 @@ func cloudBrainShow(ctx *context.Context, tpName base.TplName, jobType models.Jo | |||||
if jobType == models.JobTypeTrain { | if jobType == models.JobTypeTrain { | ||||
task, err = models.GetCloudbrainByJobID(ctx.Params(":jobid")) | task, err = models.GetCloudbrainByJobID(ctx.Params(":jobid")) | ||||
} else { | } else { | ||||
task, err = models.GetCloudbrainByID(ctx.Params(":id")) | |||||
task, err = models.GetCloudbrainByIDWithDeleted(ctx.Params(":id")) | |||||
} | } | ||||
if err != nil { | if err != nil { | ||||
log.Info("error:" + err.Error()) | log.Info("error:" + err.Error()) | ||||
ctx.Data["error"] = err.Error() | ctx.Data["error"] = err.Error() | ||||
return | |||||
} | } | ||||
result, err := cloudbrain.GetJob(task.JobID) | result, err := cloudbrain.GetJob(task.JobID) | ||||
if err != nil { | if err != nil { | ||||
log.Info("error:" + err.Error()) | log.Info("error:" + err.Error()) | ||||
ctx.Data["error"] = err.Error() | ctx.Data["error"] = err.Error() | ||||
return | |||||
} | } | ||||
if result != nil { | if result != nil { | ||||
jobRes, _ := models.ConvertToJobResultPayload(result.Payload) | jobRes, _ := models.ConvertToJobResultPayload(result.Payload) | ||||
jobRes.Resource.Memory = strings.ReplaceAll(jobRes.Resource.Memory, "Mi", "MB") | jobRes.Resource.Memory = strings.ReplaceAll(jobRes.Resource.Memory, "Mi", "MB") | ||||
@@ -426,6 +431,15 @@ func cloudBrainShow(ctx *context.Context, tpName base.TplName, jobType models.Jo | |||||
ctx.Data["resource_type"] = resourceType.Value | ctx.Data["resource_type"] = resourceType.Value | ||||
} | } | ||||
} | } | ||||
} else { | |||||
if gpuInfos == nil { | |||||
json.Unmarshal([]byte(setting.GpuTypes), &gpuInfos) | |||||
} | |||||
for _, resourceType := range gpuInfos.GpuInfo { | |||||
if resourceType.Queue == jobRes.Config.GpuType { | |||||
ctx.Data["resource_type"] = resourceType.Value | |||||
} | |||||
} | |||||
} | } | ||||
taskRoles := jobRes.TaskRoles | taskRoles := jobRes.TaskRoles | ||||
if jobRes.JobStatus.State != string(models.JobFailed) { | if jobRes.JobStatus.State != string(models.JobFailed) { | ||||
@@ -436,9 +450,15 @@ func cloudBrainShow(ctx *context.Context, tpName base.TplName, jobType models.Jo | |||||
task.ContainerID = taskRes.TaskStatuses[0].ContainerID | task.ContainerID = taskRes.TaskStatuses[0].ContainerID | ||||
task.ContainerIp = taskRes.TaskStatuses[0].ContainerIP | task.ContainerIp = taskRes.TaskStatuses[0].ContainerIP | ||||
models.ParseAndSetDurationFromCloudBrainOne(jobRes, task) | models.ParseAndSetDurationFromCloudBrainOne(jobRes, task) | ||||
err = models.UpdateJob(task) | |||||
if err != nil { | |||||
ctx.Data["error"] = err.Error() | |||||
if task.DeletedAt.IsZero() { //normal record | |||||
err = models.UpdateJob(task) | |||||
if err != nil { | |||||
ctx.Data["error"] = err.Error() | |||||
return | |||||
} | |||||
} else { //deleted record | |||||
} | } | ||||
} else { | } else { | ||||
task.Status = jobRes.JobStatus.State | task.Status = jobRes.JobStatus.State | ||||
@@ -455,7 +475,9 @@ func cloudBrainShow(ctx *context.Context, tpName base.TplName, jobType models.Jo | |||||
ctx.Data["result"] = jobRes | ctx.Data["result"] = jobRes | ||||
} else { | } else { | ||||
log.Info("error:" + err.Error()) | log.Info("error:" + err.Error()) | ||||
return | |||||
} | } | ||||
user, err := models.GetUserByID(task.UserID) | user, err := models.GetUserByID(task.UserID) | ||||
if err == nil { | if err == nil { | ||||
task.User = user | task.User = user | ||||
@@ -510,6 +532,12 @@ func cloudBrainShow(ctx *context.Context, tpName base.TplName, jobType models.Jo | |||||
} | } | ||||
} | } | ||||
attachment, err := models.GetAttachmentByUUID(task.Uuid) | |||||
if err == nil { | |||||
ctx.Data["datasetname"] = attachment.Name | |||||
} else { | |||||
ctx.Data["datasetname"] = "" | |||||
} | |||||
ctx.Data["task"] = task | ctx.Data["task"] = task | ||||
ctx.Data["jobName"] = task.JobName | ctx.Data["jobName"] = task.JobName | ||||
@@ -518,6 +546,9 @@ func cloudBrainShow(ctx *context.Context, tpName base.TplName, jobType models.Jo | |||||
version_list_task = append(version_list_task, task) | version_list_task = append(version_list_task, task) | ||||
ctx.Data["version_list_task"] = version_list_task | ctx.Data["version_list_task"] = version_list_task | ||||
ctx.Data["debugListType"] = debugListType | ctx.Data["debugListType"] = debugListType | ||||
ctx.Data["code_path"] = cloudbrain.CodeMountPath | |||||
ctx.Data["dataset_path"] = cloudbrain.DataSetMountPath | |||||
ctx.Data["model_path"] = cloudbrain.ModelMountPath | |||||
ctx.Data["canDownload"] = cloudbrain.CanDeleteJob(ctx, task) | ctx.Data["canDownload"] = cloudbrain.CanDeleteJob(ctx, task) | ||||
ctx.HTML(200, tpName) | ctx.HTML(200, tpName) | ||||
} | } | ||||
@@ -2,6 +2,7 @@ package repo | |||||
import ( | import ( | ||||
"archive/zip" | "archive/zip" | ||||
"code.gitea.io/gitea/modules/notification" | |||||
"code.gitea.io/gitea/modules/timeutil" | "code.gitea.io/gitea/modules/timeutil" | ||||
"encoding/json" | "encoding/json" | ||||
"errors" | "errors" | ||||
@@ -430,7 +431,7 @@ func NotebookManage(ctx *context.Context) { | |||||
Uuid: task.Uuid, | Uuid: task.Uuid, | ||||
Image: task.Image, | Image: task.Image, | ||||
ComputeResource: task.ComputeResource, | ComputeResource: task.ComputeResource, | ||||
Description: task.Description, | |||||
Description: task.Description, | |||||
} | } | ||||
err = models.RestartCloudbrain(task, newTask) | err = models.RestartCloudbrain(task, newTask) | ||||
@@ -441,6 +442,7 @@ func NotebookManage(ctx *context.Context) { | |||||
break | break | ||||
} | } | ||||
ID = strconv.FormatInt(newTask.ID, 10) | ID = strconv.FormatInt(newTask.ID, 10) | ||||
notification.NotifyOtherTask(ctx.User, ctx.Repo.Repository, ID, task.DisplayJobName, models.ActionCreateDebugNPUTask) | |||||
} else { | } else { | ||||
task.Status = res.Status | task.Status = res.Status | ||||
if task.EndTime == 0 && models.IsModelArtsDebugJobTerminal(task.Status) { | if task.EndTime == 0 && models.IsModelArtsDebugJobTerminal(task.Status) { | ||||
@@ -54,7 +54,12 @@ func queryUserDataPage(ctx *context.Context, tableName string, queryObj interfac | |||||
"N1": ctx.Tr("user.static.createrepocount"), | "N1": ctx.Tr("user.static.createrepocount"), | ||||
"O1": ctx.Tr("user.static.openiindex"), | "O1": ctx.Tr("user.static.openiindex"), | ||||
"P1": ctx.Tr("user.static.registdate"), | "P1": ctx.Tr("user.static.registdate"), | ||||
"Q1": ctx.Tr("user.static.countdate"), | |||||
"Q1": ctx.Tr("user.static.CloudBrainTaskNum"), | |||||
"R1": ctx.Tr("user.static.CloudBrainRunTime"), | |||||
"S1": ctx.Tr("user.static.CommitDatasetNum"), | |||||
"T1": ctx.Tr("user.static.CommitModelCount"), | |||||
"U1": ctx.Tr("user.static.UserIndex"), | |||||
"V1": ctx.Tr("user.static.countdate"), | |||||
} | } | ||||
for k, v := range dataHeader { | for k, v := range dataHeader { | ||||
//设置单元格的值 | //设置单元格的值 | ||||
@@ -89,8 +94,14 @@ func queryUserDataPage(ctx *context.Context, tableName string, queryObj interfac | |||||
formatTime := userRecord.RegistDate.Format("2006-01-02 15:04:05") | formatTime := userRecord.RegistDate.Format("2006-01-02 15:04:05") | ||||
xlsx.SetCellValue(sheetName, "P"+rows, formatTime[0:len(formatTime)-3]) | xlsx.SetCellValue(sheetName, "P"+rows, formatTime[0:len(formatTime)-3]) | ||||
xlsx.SetCellValue(sheetName, "Q"+rows, userRecord.CloudBrainTaskNum) | |||||
xlsx.SetCellValue(sheetName, "R"+rows, fmt.Sprintf("%.2f", float64(userRecord.CloudBrainRunTime)/3600)) | |||||
xlsx.SetCellValue(sheetName, "S"+rows, userRecord.CommitDatasetNum) | |||||
xlsx.SetCellValue(sheetName, "T"+rows, userRecord.CommitModelCount) | |||||
xlsx.SetCellValue(sheetName, "U"+rows, fmt.Sprintf("%.2f", userRecord.UserIndex)) | |||||
formatTime = userRecord.DataDate | formatTime = userRecord.DataDate | ||||
xlsx.SetCellValue(sheetName, "Q"+rows, formatTime) | |||||
xlsx.SetCellValue(sheetName, "V"+rows, formatTime) | |||||
} | } | ||||
indexTotal += PAGE_SIZE | indexTotal += PAGE_SIZE | ||||
@@ -115,6 +126,30 @@ func queryUserDataPage(ctx *context.Context, tableName string, queryObj interfac | |||||
} | } | ||||
} | } | ||||
func QueryMetrics(ctx *context.Context) { | |||||
startDate := ctx.Query("startDate") | |||||
endDate := ctx.Query("endDate") | |||||
startTime, _ := time.ParseInLocation("2006-01-02", startDate, time.Local) | |||||
endTime, _ := time.ParseInLocation("2006-01-02", endDate, time.Local) | |||||
result, count := models.QueryMetrics(startTime.Unix(), endTime.Unix()) | |||||
mapInterface := make(map[string]interface{}) | |||||
mapInterface["data"] = result | |||||
mapInterface["count"] = count | |||||
ctx.JSON(http.StatusOK, mapInterface) | |||||
} | |||||
func QueryRankingList(ctx *context.Context) { | |||||
key := ctx.Query("key") | |||||
tableName := ctx.Query("tableName") | |||||
limit := ctx.QueryInt("limit") | |||||
result, count := models.QueryRankList(key, tableName, limit) | |||||
mapInterface := make(map[string]interface{}) | |||||
mapInterface["data"] = result | |||||
mapInterface["count"] = count | |||||
ctx.JSON(http.StatusOK, mapInterface) | |||||
} | |||||
func QueryUserStaticCurrentMonth(ctx *context.Context) { | func QueryUserStaticCurrentMonth(ctx *context.Context) { | ||||
queryUserDataPage(ctx, "public.user_business_analysis_current_month", new(models.UserBusinessAnalysisCurrentMonth)) | queryUserDataPage(ctx, "public.user_business_analysis_current_month", new(models.UserBusinessAnalysisCurrentMonth)) | ||||
} | } | ||||
@@ -221,7 +256,12 @@ func QueryUserStaticDataPage(ctx *context.Context) { | |||||
"N1": ctx.Tr("user.static.createrepocount"), | "N1": ctx.Tr("user.static.createrepocount"), | ||||
"O1": ctx.Tr("user.static.openiindex"), | "O1": ctx.Tr("user.static.openiindex"), | ||||
"P1": ctx.Tr("user.static.registdate"), | "P1": ctx.Tr("user.static.registdate"), | ||||
"Q1": ctx.Tr("user.static.countdate"), | |||||
"Q1": ctx.Tr("user.static.CloudBrainTaskNum"), | |||||
"R1": ctx.Tr("user.static.CloudBrainRunTime"), | |||||
"S1": ctx.Tr("user.static.CommitDatasetNum"), | |||||
"T1": ctx.Tr("user.static.CommitModelCount"), | |||||
"U1": ctx.Tr("user.static.UserIndex"), | |||||
"V1": ctx.Tr("user.static.countdate"), | |||||
} | } | ||||
for k, v := range dataHeader { | for k, v := range dataHeader { | ||||
//设置单元格的值 | //设置单元格的值 | ||||
@@ -249,9 +289,13 @@ func QueryUserStaticDataPage(ctx *context.Context) { | |||||
formatTime := userRecord.RegistDate.Format("2006-01-02 15:04:05") | formatTime := userRecord.RegistDate.Format("2006-01-02 15:04:05") | ||||
xlsx.SetCellValue(sheetName, "P"+rows, formatTime[0:len(formatTime)-3]) | xlsx.SetCellValue(sheetName, "P"+rows, formatTime[0:len(formatTime)-3]) | ||||
xlsx.SetCellValue(sheetName, "Q"+rows, userRecord.CloudBrainTaskNum) | |||||
xlsx.SetCellValue(sheetName, "R"+rows, fmt.Sprintf("%.2f", float64(userRecord.CloudBrainRunTime)/3600)) | |||||
xlsx.SetCellValue(sheetName, "S"+rows, userRecord.CommitDatasetNum) | |||||
xlsx.SetCellValue(sheetName, "T"+rows, userRecord.CommitModelCount) | |||||
xlsx.SetCellValue(sheetName, "U"+rows, fmt.Sprintf("%.2f", userRecord.UserIndex)) | |||||
formatTime = userRecord.DataDate | formatTime = userRecord.DataDate | ||||
xlsx.SetCellValue(sheetName, "Q"+rows, formatTime+" 00:01") | |||||
xlsx.SetCellValue(sheetName, "V"+rows, formatTime) | |||||
} | } | ||||
//设置默认打开的表单 | //设置默认打开的表单 | ||||
@@ -247,7 +247,11 @@ func renderDirectory(ctx *context.Context, treeLink string) { | |||||
ctx.Data["ReadmeInList"] = true | ctx.Data["ReadmeInList"] = true | ||||
ctx.Data["ReadmeExist"] = true | ctx.Data["ReadmeExist"] = true | ||||
ctx.Data["FileIsSymlink"] = readmeFile.isSymlink | ctx.Data["FileIsSymlink"] = readmeFile.isSymlink | ||||
ctx.Data["ReadmeName"] = readmeFile.name | |||||
if ctx.Repo.TreePath == "" { | |||||
ctx.Data["ReadmeRelativePath"] = readmeFile.name | |||||
} else { | |||||
ctx.Data["ReadmeRelativePath"] = ctx.Repo.TreePath + "/" + readmeFile.name | |||||
} | |||||
if ctx.Repo.CanEnableEditor() { | if ctx.Repo.CanEnableEditor() { | ||||
ctx.Data["CanEditFile"] = true | ctx.Data["CanEditFile"] = true | ||||
@@ -579,11 +583,11 @@ func safeURL(address string) string { | |||||
} | } | ||||
type ContributorInfo struct { | type ContributorInfo struct { | ||||
UserInfo *models.User // nil for contributor who is not a registered user | |||||
RelAvatarLink string `json:"rel_avatar_link"` | |||||
UserName string `json:"user_name"` | |||||
Email string `json:"email"` | |||||
CommitCnt int `json:"commit_cnt"` | |||||
UserInfo *models.User // nil for contributor who is not a registered user | |||||
RelAvatarLink string `json:"rel_avatar_link"` | |||||
UserName string `json:"user_name"` | |||||
Email string `json:"email"` | |||||
CommitCnt int `json:"commit_cnt"` | |||||
} | } | ||||
type GetContributorsInfo struct { | type GetContributorsInfo struct { | ||||
@@ -642,7 +646,7 @@ func Home(ctx *context.Context) { | |||||
existedContributorInfo.CommitCnt += c.CommitCnt | existedContributorInfo.CommitCnt += c.CommitCnt | ||||
} else { | } else { | ||||
var newContributor = &ContributorInfo{ | var newContributor = &ContributorInfo{ | ||||
user, "", "",c.Email, c.CommitCnt, | |||||
user, "", "", c.Email, c.CommitCnt, | |||||
} | } | ||||
count++ | count++ | ||||
contributorInfos = append(contributorInfos, newContributor) | contributorInfos = append(contributorInfos, newContributor) | ||||
@@ -839,7 +843,7 @@ func renderCode(ctx *context.Context) { | |||||
compareInfo, err = baseGitRepo.GetCompareInfo(ctx.Repo.Repository.RepoPath(), ctx.Repo.BranchName, ctx.Repo.Repository.BaseRepo.DefaultBranch) | compareInfo, err = baseGitRepo.GetCompareInfo(ctx.Repo.Repository.RepoPath(), ctx.Repo.BranchName, ctx.Repo.Repository.BaseRepo.DefaultBranch) | ||||
ctx.Data["UpstreamSameBranchName"] = false | ctx.Data["UpstreamSameBranchName"] = false | ||||
} | } | ||||
if err==nil && compareInfo != nil { | |||||
if err == nil && compareInfo != nil { | |||||
if compareInfo.Commits != nil { | if compareInfo.Commits != nil { | ||||
log.Info("compareInfoCommits数量:%d", compareInfo.Commits.Len()) | log.Info("compareInfoCommits数量:%d", compareInfo.Commits.Len()) | ||||
ctx.Data["FetchUpstreamCnt"] = compareInfo.Commits.Len() | ctx.Data["FetchUpstreamCnt"] = compareInfo.Commits.Len() | ||||
@@ -950,7 +954,7 @@ func ContributorsAPI(ctx *context.Context) { | |||||
} else { | } else { | ||||
// new committer info | // new committer info | ||||
var newContributor = &ContributorInfo{ | var newContributor = &ContributorInfo{ | ||||
user, user.RelAvatarLink(),user.Name, user.Email,c.CommitCnt, | |||||
user, user.RelAvatarLink(), user.Name, user.Email, c.CommitCnt, | |||||
} | } | ||||
count++ | count++ | ||||
contributorInfos = append(contributorInfos, newContributor) | contributorInfos = append(contributorInfos, newContributor) | ||||
@@ -963,7 +967,7 @@ func ContributorsAPI(ctx *context.Context) { | |||||
existedContributorInfo.CommitCnt += c.CommitCnt | existedContributorInfo.CommitCnt += c.CommitCnt | ||||
} else { | } else { | ||||
var newContributor = &ContributorInfo{ | var newContributor = &ContributorInfo{ | ||||
user, "", "",c.Email,c.CommitCnt, | |||||
user, "", "", c.Email, c.CommitCnt, | |||||
} | } | ||||
count++ | count++ | ||||
contributorInfos = append(contributorInfos, newContributor) | contributorInfos = append(contributorInfos, newContributor) | ||||
@@ -81,7 +81,7 @@ | |||||
<span class="fitted" style="width: 90%;vertical-align: middle;">{{.DisplayJobName}}</span> | <span class="fitted" style="width: 90%;vertical-align: middle;">{{.DisplayJobName}}</span> | ||||
</a> | </a> | ||||
{{else if eq .JobType "TRAIN"}} | {{else if eq .JobType "TRAIN"}} | ||||
<a class="title" href="{{AppSubUrl}}/{{.Repo.OwnerName}}/{{.Repo.Name}}/modelarts/train-job/{{$JobID}}" title="{{.DisplayJobName}}" style="font-size: 14px;"> | |||||
<a class="title" href="{{AppSubUrl}}/{{.Repo.OwnerName}}/{{.Repo.Name}}{{if eq .ComputeResource "CPU/GPU"}}/cloudbrain{{else}}/modelarts{{end}}/train-job/{{$JobID}}" title="{{.DisplayJobName}}" style="font-size: 14px;"> | |||||
<span class="fitted" style="width: 90%;vertical-align: middle;">{{.DisplayJobName}}</span> | <span class="fitted" style="width: 90%;vertical-align: middle;">{{.DisplayJobName}}</span> | ||||
</a> | </a> | ||||
{{else if eq .JobType "BENCHMARK"}} | {{else if eq .JobType "BENCHMARK"}} | ||||
@@ -155,13 +155,13 @@ | |||||
</a> | </a> | ||||
</form> | </form> | ||||
{{else}} | {{else}} | ||||
<a style="padding: 0.5rem 1rem;" id="ai-stop-{{$JobID}}" class="ui basic ai_stop_version {{if eq .Status "KILLED" "FAILED" "START_FAILED" "KILLING" "COMPLETED"}}disabled {{else}} blue {{end}}button" data-repopath="{{.Repo.OwnerName}}/{{.Repo.Name}}/modelarts/{{if eq .JobType "INFERENCE"}}inference-job{{else}}train-job{{end}}" data-jobid="{{$JobID}}" data-version="{{.VersionName}}" > | |||||
<a style="padding: 0.5rem 1rem;" id="ai-stop-{{$JobID}}" class="ui basic ai_stop_version {{if eq .Status "KILLED" "FAILED" "START_FAILED" "KILLING" "COMPLETED" "SUCCEEDED"}}disabled {{else}} blue {{end}}button" data-repopath="{{.Repo.OwnerName}}/{{.Repo.Name}}{{if eq .ComputeResource "CPU/GPU"}}/cloudbrain/train-job{{else}}/modelarts/{{if eq .JobType "INFERENCE"}}inference-job{{else}}train-job{{end}}{{end}}" data-jobid="{{$JobID}}" data-version="{{.VersionName}}" > | |||||
{{$.i18n.Tr "repo.stop"}} | {{$.i18n.Tr "repo.stop"}} | ||||
</a> | </a> | ||||
{{end}} | {{end}} | ||||
</div> | </div> | ||||
<!-- 删除任务 --> | <!-- 删除任务 --> | ||||
<form class="ui compact buttons" id="delForm-{{$JobID}}" action='{{AppSubUrl}}/{{.Repo.OwnerName}}/{{.Repo.Name}}{{if eq .JobType "BENCHMARK"}}/cloudbrain/benchmark{{else if eq .JobType "DEBUG"}}{{if eq .ComputeResource "NPU"}}/modelarts/notebook{{else}}/cloudbrain{{end}}{{else if eq .JobType "TRAIN"}}/modelarts/train-job{{end}}/{{$JobID}}/del?isadminpage=true' method="post"> | |||||
<form class="ui compact buttons" id="delForm-{{$JobID}}" action='{{AppSubUrl}}/{{.Repo.OwnerName}}/{{.Repo.Name}}{{if eq .JobType "BENCHMARK"}}/cloudbrain/benchmark{{else if eq .JobType "DEBUG"}}{{if eq .ComputeResource "NPU"}}/modelarts/notebook{{else}}/cloudbrain{{end}}{{else if eq .JobType "TRAIN"}}{{if eq .ComputeResource "NPU"}}/modelarts/notebook{{else}}/cloudbrain{{end}}/train-job{{end}}/{{$JobID}}/del?isadminpage=true' method="post"> | |||||
{{$.CsrfTokenHtml}} | {{$.CsrfTokenHtml}} | ||||
<a style="padding: 0.5rem 1rem;margin-left:0.2rem" id="ai-delete-{{$JobID}}" data-repopath="{{.Repo.OwnerName}}/{{.Repo.Name}}/modelarts/inference-job/{{$JobID}}/del_version?isadminpage=true" data-version="{{.VersionName}}" class="ui basic ai_delete blue button" style="border-radius: .28571429rem;"> | <a style="padding: 0.5rem 1rem;margin-left:0.2rem" id="ai-delete-{{$JobID}}" data-repopath="{{.Repo.OwnerName}}/{{.Repo.Name}}/modelarts/inference-job/{{$JobID}}/del_version?isadminpage=true" data-version="{{.VersionName}}" class="ui basic ai_delete blue button" style="border-radius: .28571429rem;"> | ||||
{{$.i18n.Tr "repo.delete"}} | {{$.i18n.Tr "repo.delete"}} | ||||
@@ -1,68 +1,251 @@ | |||||
<link rel="stylesheet" href="/swiper/swiper-bundle.min.css"> | |||||
<link rel="stylesheet" href="/css/git.openi.css"> | |||||
<script src="/swiper/swiper-bundle.min.js"></script> | |||||
<script src="/self/js/jquery.min.js" type="text/javascript"></script> | |||||
{{template "base/head" .}} | {{template "base/head" .}} | ||||
<div class="explore users"> | <div class="explore users"> | ||||
{{template "explore/search" .}} | |||||
<div class="ui container"> | |||||
<div class="ui grid"> | |||||
{{template "explore/navbar" .}} | |||||
<div class="sixteen wide mobile ten wide tablet ten wide computer column"> | |||||
<h2 class="ui left floated medium header"> | |||||
{{.i18n.Tr "explore.organizations"}} | |||||
</h2> | |||||
<div class="ui right floated secondary filter menu"> | |||||
<!-- Sort --> | |||||
<div class="ui right dropdown type jump item"> | |||||
<span class="text"> | |||||
{{.i18n.Tr "repo.issues.filter_sort"}} | |||||
<i class="dropdown icon"></i> | |||||
</span> | |||||
<div class="menu"> | |||||
<a class="{{if eq .SortType "newest"}}active{{end}} item" href="{{$.Link}}?sort=newest&q={{$.Keyword}}&tab={{$.TabName}}">{{.i18n.Tr "repo.issues.filter_sort.latest"}}</a> | |||||
<a class="{{if eq .SortType "oldest"}}active{{end}} item" href="{{$.Link}}?sort=oldest&q={{$.Keyword}}&tab={{$.TabName}}">{{.i18n.Tr "repo.issues.filter_sort.oldest"}}</a> | |||||
<a class="{{if eq .SortType "alphabetically"}}active{{end}} item" href="{{$.Link}}?sort=alphabetically&q={{$.Keyword}}&tab={{$.TabName}}">{{.i18n.Tr "repo.issues.label.filter_sort.alphabetically"}}</a> | |||||
<a class="{{if eq .SortType "reversealphabetically"}}active{{end}} item" href="{{$.Link}}?sort=reversealphabetically&q={{$.Keyword}}&tab={{$.TabName}}">{{.i18n.Tr "repo.issues.label.filter_sort.reverse_alphabetically"}}</a> | |||||
<a class="{{if eq .SortType "recentupdate"}}active{{end}} item" href="{{$.Link}}?sort=recentupdate&q={{$.Keyword}}&tab={{$.TabName}}">{{.i18n.Tr "repo.issues.filter_sort.recentupdate"}}</a> | |||||
<a class="{{if eq .SortType "leastupdate"}}active{{end}} item" href="{{$.Link}}?sort=leastupdate&q={{$.Keyword}}&tab={{$.TabName}}">{{.i18n.Tr "repo.issues.filter_sort.leastupdate"}}</a> | |||||
</div> | |||||
<!-- {{template "explore/search" .}} --> | |||||
<div class="repos--seach"> | |||||
<div class="ui container"> | |||||
<div class="ui two column centered grid"> | |||||
<div class="fourteen wide mobile ten wide tablet ten wide computer column ui form ignore-dirty" > | |||||
<div class="ui fluid action input" id="search_all"> | |||||
<input id = 'value_s' name="q" value="{{.Keyword}}" placeholder="{{.i18n.Tr "explore.search"}}..." onkeydown="if(event.keyCode==13){all_search();}" autofocus> | |||||
<input type="hidden" name="tab" value="{{$.TabName}}"> | |||||
<button class="ui green button" onclick="all_search()">{{.i18n.Tr "explore.search"}}</button> | |||||
</div> | </div> | ||||
</div> | </div> | ||||
</div> | |||||
</div> | |||||
</div> | |||||
<div class="ui clearing divider"></div> | |||||
<div class="ui user list"> | |||||
{{range .Users}} | |||||
<div class="item"> | |||||
<img class="ui avatar image" src="{{.RelAvatarLink}}"> | |||||
<div class="content"> | |||||
<span class="header"> | |||||
<a href="{{.HomeLink}}">{{.Name}}</a> {{.FullName}} | |||||
{{if .Visibility.IsPrivate}} | |||||
<span class="text gold">{{svg "octicon-lock" 16}}</span> | |||||
{{end}} | |||||
</span> | |||||
<div class="description"> | |||||
{{if .Location}} | |||||
{{svg "octicon-location" 16}} {{.Location}} | |||||
{{end}} | |||||
{{if and .Website}} | |||||
{{svg "octicon-link" 16}} | |||||
<a href="{{.Website}}" rel="nofollow">{{.Website}}</a> | |||||
{{end}} | |||||
{{svg "octicon-clock" 16}} {{$.i18n.Tr "user.join_on"}} {{.CreatedUnix.FormatShort}} | |||||
</div> | |||||
</div> | |||||
<div class="ui container homeorg"> | |||||
<div class="ui center aligned header"> | |||||
<h1 class="title_re"> | |||||
{{$.i18n.Tr "home.page_recommend_org"}} | |||||
</h1> | |||||
<p class="re_con"> {{$.i18n.Tr "home.page_recommend_org_desc"}}<a href="{{.RecommendURL}}"> {{$.i18n.Tr "home.page_recommend_org_commit"}}</a></p> | |||||
</div> | |||||
<div class="sixteen wide tablet sixteen wide computer column"> | |||||
<div class="homeorg-list" > | |||||
<div class="swiper-wrapper" id="recommendorg" style="height:auto"> | |||||
{{range .RecommendOrgs}} | |||||
<div class="swiper-slide"> | |||||
<a href="{{.HomeLink}}" class= "ui fluid card"> | |||||
<div class="content"> | |||||
<div class= "ui small header"> | |||||
<img class="ui image" src="{{.Avatar}}" > | |||||
<div class="content nowrap"> | |||||
<span class="ui blue"> {{.Name}} </span> {{.FullName}} | |||||
<div class="sub header"> | |||||
<span> | |||||
{{.NumRepos}} | |||||
{{if le .NumRepos 1}} | |||||
{{$.i18n.Tr "org.org_repository"}} | |||||
{{else}} | |||||
{{$.i18n.Tr "org.org_repositories"}} | |||||
{{end}} | |||||
</span> | |||||
. <span> | |||||
{{.NumMembers}} | |||||
{{if le .NumRepos 1}} | |||||
{{$.i18n.Tr "org.org_member"}} | |||||
{{else}} | |||||
{{$.i18n.Tr "org.org_members"}} | |||||
{{end}} | |||||
</span> | |||||
.<span> | |||||
{{.NumTeams}} | |||||
{{if le .NumRepos 1}} | |||||
{{$.i18n.Tr "org.org_team"}} | |||||
{{else}} | |||||
{{$.i18n.Tr "org.org_teams"}} | |||||
{{end}} | |||||
</span> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
</a> | |||||
</div> | </div> | ||||
{{else}} | |||||
<div>{{$.i18n.Tr "explore.org_no_results"}}</div> | |||||
{{end}} | {{end}} | ||||
</div> | </div> | ||||
{{template "base/paginate" .}} | |||||
<div class="swiper-pagination"></div> | |||||
</div> | </div> | ||||
<div class="sixteen wide mobile six wide tablet three wide computer column"> | |||||
{{template "explore/repo_right" .}} | |||||
</div> | |||||
</div> | |||||
<div class="ui container homeorg"> | |||||
<div class="content_top10"> | |||||
<div class="ui three doubling cards"> | |||||
<div class="card_list" > | |||||
<div class="list_title star_title"> | |||||
<p class="p_text"> <i class="ri-star-line"> </i>{{$.i18n.Tr "org.star"}}</p> | |||||
</div> | |||||
<li style="list-style:none"> | |||||
{{ range $i,$user :=.StarOrgs}} | |||||
<ul class="orgs" style="display: flex;"> | |||||
{{if eq $i 0}} | |||||
<div class="org_icon"> | |||||
<svg width="1em" height="1em" viewBox="0 0 32 32" class="contribution-item-img__2-fih"><defs><path id="rank1_svg__a" d="M13.69 20V9.616h-1.598l-3.139 2.61 1.027 1.218 1.95-1.804V20z"></path></defs><g fill="none" fill-rule="evenodd"><path d="M0 0h32v32H0z"></path><g transform="translate(4 2.667)"><path fill="#D16C11" d="M0 0h6.976l5.49 7.642L17.063 0H24L12 16z"></path><circle fill="#F7C049" cx="12" cy="14.667" r="12"></circle><circle fill="#FEE6AD" cx="12" cy="14.667" r="9.333"></circle><g fill-rule="nonzero"><use fill="#FFF" xlink:href="#rank1_svg__a"></use><use fill="#D74D03" xlink:href="#rank1_svg__a"></use></g></g></g></svg> | |||||
</div> | |||||
{{else if eq $i 1}} | |||||
<div class="org_icon"> | |||||
<svg width="1em" height="1em" viewBox="0 0 32 32" class="contribution-item-img__2-fih"><g transform="translate(4 2.667)" fill="none" fill-rule="evenodd"><path fill="#305269" d="M0 0h6.976l5.49 7.642L17.063 0H24L12 16z"></path><circle fill="#BDD8F0" cx="12" cy="14.667" r="12"></circle><circle fill="#E1E9FC" cx="12" cy="14.667" r="9.333"></circle><path d="M15.817 20v-1.584h-4.81l3.212-2.977c.469-.43.853-.883 1.151-1.357.298-.474.447-1.039.447-1.694 0-.499-.088-.934-.264-1.305a2.525 2.525 0 00-.718-.917 3.169 3.169 0 00-1.064-.543 4.531 4.531 0 00-1.312-.183c-.47 0-.905.064-1.306.19-.4.128-.753.314-1.056.558-.303.244-.55.55-.74.917-.191.366-.306.79-.345 1.268l1.848.147c.059-.43.23-.772.513-1.027.284-.254.646-.381 1.086-.381.205 0 .398.032.579.095.18.064.34.154.477.272a1.262 1.262 0 01.455.997c0 .176-.035.345-.103.506a2.52 2.52 0 01-.257.462 3.476 3.476 0 01-.345.418c-.127.132-.249.257-.366.374l-4.034 3.901V20h6.952z" fill="#305269" fill-rule="nonzero"></path></g></svg> | |||||
</div> | |||||
{{else if eq $i 2}} | |||||
<div class="org_icon"> | |||||
<svg width="1em" height="1em" viewBox="0 0 32 32" class="contribution-item-img__2-fih"><g transform="translate(4 2.667)" fill="none" fill-rule="evenodd"><path fill="#865B45" d="M0 0h6.976l5.49 7.642L17.063 0H24L12 16z"></path><circle fill="#E7C5AC" cx="12" cy="14.667" r="12"></circle><circle fill="#FEDDC7" cx="12" cy="14.667" r="9.333"></circle><path d="M12.239 20.176c.46 0 .902-.066 1.327-.198.425-.132.8-.328 1.122-.587.323-.259.58-.579.77-.96.19-.382.286-.822.286-1.32 0-.646-.171-1.203-.513-1.672-.343-.47-.846-.753-1.511-.851v-.03c.557-.136.992-.422 1.305-.857.313-.435.47-.932.47-1.489 0-.46-.09-.863-.272-1.21a2.547 2.547 0 00-.726-.865 3.232 3.232 0 00-1.056-.521 4.521 4.521 0 00-1.276-.176 4.52 4.52 0 00-1.1.132 3.404 3.404 0 00-.968.403 2.79 2.79 0 00-.762.697 3.181 3.181 0 00-.499.997l1.863.499c.127-.362.33-.643.608-.843.279-.2.594-.301.946-.301.44 0 .797.127 1.071.381.274.255.41.582.41.983 0 .313-.058.562-.175.748a1.17 1.17 0 01-.462.425 1.903 1.903 0 01-.646.191 6.09 6.09 0 01-.74.044h-.455v1.584h.425c.264 0 .533.02.807.059.274.039.52.115.74.227.22.112.402.274.543.484.142.21.213.482.213.814a1.533 1.533 0 01-.52 1.18 1.772 1.772 0 01-.558.33 1.88 1.88 0 01-.667.118c-.47 0-.841-.117-1.115-.352s-.464-.567-.572-.997l-1.877.498c.117.43.288.8.513 1.108.225.308.491.56.8.755.307.196.652.34 1.033.433a5.13 5.13 0 001.218.139z" fill="#865B45" fill-rule="nonzero"></path></g></svg> | |||||
</div> | |||||
{{else }} | |||||
<div class="org_icon org_icon_num" > | |||||
{{Add $i 1}} | |||||
</div> | |||||
{{end}} | |||||
<li class="li_avatar"> | |||||
<img class="ui avatar image" src="{{$user.RelAvatarLink}}" > | |||||
</li> | |||||
<li class="li_name"> | |||||
<p class="org_line_hight">{{$user.Name}}</p> | |||||
</li> | |||||
<ul> | |||||
<li class="li_score" > | |||||
<i class="ri-star-line org_line_hight org_icon_color"></i> <p class="p_score">{{$user.Score}}</p> | |||||
</li> | |||||
</ul> | |||||
</ul> | |||||
{{end}} | |||||
</li> | |||||
</div> | |||||
<div class="card_list" > | |||||
<div class="list_title star_title"> | |||||
<p class="p_text"> <i class="ri-user-2-line"> </i>{{$.i18n.Tr "org.member"}}</p> | |||||
</div> | |||||
<li style="list-style:none"> | |||||
{{ range $i,$user :=.StarOrgs}} | |||||
<ul class="orgs" style="display: flex;"> | |||||
{{if eq $i 0}} | |||||
<div class="org_icon"> | |||||
<svg width="1em" height="1em" viewBox="0 0 32 32" class="contribution-item-img__2-fih"><defs><path id="rank1_svg__a" d="M13.69 20V9.616h-1.598l-3.139 2.61 1.027 1.218 1.95-1.804V20z"></path></defs><g fill="none" fill-rule="evenodd"><path d="M0 0h32v32H0z"></path><g transform="translate(4 2.667)"><path fill="#D16C11" d="M0 0h6.976l5.49 7.642L17.063 0H24L12 16z"></path><circle fill="#F7C049" cx="12" cy="14.667" r="12"></circle><circle fill="#FEE6AD" cx="12" cy="14.667" r="9.333"></circle><g fill-rule="nonzero"><use fill="#FFF" xlink:href="#rank1_svg__a"></use><use fill="#D74D03" xlink:href="#rank1_svg__a"></use></g></g></g></svg> | |||||
</div> | |||||
{{else if eq $i 1}} | |||||
<div class="org_icon"> | |||||
<svg width="1em" height="1em" viewBox="0 0 32 32" class="contribution-item-img__2-fih"><g transform="translate(4 2.667)" fill="none" fill-rule="evenodd"><path fill="#305269" d="M0 0h6.976l5.49 7.642L17.063 0H24L12 16z"></path><circle fill="#BDD8F0" cx="12" cy="14.667" r="12"></circle><circle fill="#E1E9FC" cx="12" cy="14.667" r="9.333"></circle><path d="M15.817 20v-1.584h-4.81l3.212-2.977c.469-.43.853-.883 1.151-1.357.298-.474.447-1.039.447-1.694 0-.499-.088-.934-.264-1.305a2.525 2.525 0 00-.718-.917 3.169 3.169 0 00-1.064-.543 4.531 4.531 0 00-1.312-.183c-.47 0-.905.064-1.306.19-.4.128-.753.314-1.056.558-.303.244-.55.55-.74.917-.191.366-.306.79-.345 1.268l1.848.147c.059-.43.23-.772.513-1.027.284-.254.646-.381 1.086-.381.205 0 .398.032.579.095.18.064.34.154.477.272a1.262 1.262 0 01.455.997c0 .176-.035.345-.103.506a2.52 2.52 0 01-.257.462 3.476 3.476 0 01-.345.418c-.127.132-.249.257-.366.374l-4.034 3.901V20h6.952z" fill="#305269" fill-rule="nonzero"></path></g></svg> | |||||
</div> | |||||
{{else if eq $i 2}} | |||||
<div class="org_icon"> | |||||
<svg width="1em" height="1em" viewBox="0 0 32 32" class="contribution-item-img__2-fih"><g transform="translate(4 2.667)" fill="none" fill-rule="evenodd"><path fill="#865B45" d="M0 0h6.976l5.49 7.642L17.063 0H24L12 16z"></path><circle fill="#E7C5AC" cx="12" cy="14.667" r="12"></circle><circle fill="#FEDDC7" cx="12" cy="14.667" r="9.333"></circle><path d="M12.239 20.176c.46 0 .902-.066 1.327-.198.425-.132.8-.328 1.122-.587.323-.259.58-.579.77-.96.19-.382.286-.822.286-1.32 0-.646-.171-1.203-.513-1.672-.343-.47-.846-.753-1.511-.851v-.03c.557-.136.992-.422 1.305-.857.313-.435.47-.932.47-1.489 0-.46-.09-.863-.272-1.21a2.547 2.547 0 00-.726-.865 3.232 3.232 0 00-1.056-.521 4.521 4.521 0 00-1.276-.176 4.52 4.52 0 00-1.1.132 3.404 3.404 0 00-.968.403 2.79 2.79 0 00-.762.697 3.181 3.181 0 00-.499.997l1.863.499c.127-.362.33-.643.608-.843.279-.2.594-.301.946-.301.44 0 .797.127 1.071.381.274.255.41.582.41.983 0 .313-.058.562-.175.748a1.17 1.17 0 01-.462.425 1.903 1.903 0 01-.646.191 6.09 6.09 0 01-.74.044h-.455v1.584h.425c.264 0 .533.02.807.059.274.039.52.115.74.227.22.112.402.274.543.484.142.21.213.482.213.814a1.533 1.533 0 01-.52 1.18 1.772 1.772 0 01-.558.33 1.88 1.88 0 01-.667.118c-.47 0-.841-.117-1.115-.352s-.464-.567-.572-.997l-1.877.498c.117.43.288.8.513 1.108.225.308.491.56.8.755.307.196.652.34 1.033.433a5.13 5.13 0 001.218.139z" fill="#865B45" fill-rule="nonzero"></path></g></svg> | |||||
</div> | |||||
{{else }} | |||||
<div class="org_icon org_icon_num" > | |||||
{{Add $i 1}} | |||||
</div> | |||||
{{end}} | |||||
<li class="li_avatar"> | |||||
<img class="ui avatar image" src="{{$user.RelAvatarLink}}" > | |||||
</li> | |||||
<li class="li_name"> | |||||
<p class="org_line_hight">{{$user.Name}}</p> | |||||
</li> | |||||
<ul> | |||||
<li class="li_score"> | |||||
<i class="ri-user-2-line org_line_hight org_icon_color"></i> <p class="p_score">{{$user.Score}}</p> | |||||
</li> | |||||
</ul> | |||||
</ul> | |||||
{{end}} | |||||
</li> | |||||
</div> | |||||
<div class="card_list" > | |||||
<div class="list_title star_title"> | |||||
<p class="p_text"> <i class="ri-blaze-fill"> </i>{{$.i18n.Tr "org.active"}}</p> | |||||
</div> | |||||
<li style="list-style:none"> | |||||
{{ range $i,$user :=.StarOrgs}} | |||||
<ul class="orgs" style="display: flex;"> | |||||
{{if eq $i 0}} | |||||
<div class="org_icon"> | |||||
<svg width="1em" height="1em" viewBox="0 0 32 32" class="contribution-item-img__2-fih"><defs><path id="rank1_svg__a" d="M13.69 20V9.616h-1.598l-3.139 2.61 1.027 1.218 1.95-1.804V20z"></path></defs><g fill="none" fill-rule="evenodd"><path d="M0 0h32v32H0z"></path><g transform="translate(4 2.667)"><path fill="#D16C11" d="M0 0h6.976l5.49 7.642L17.063 0H24L12 16z"></path><circle fill="#F7C049" cx="12" cy="14.667" r="12"></circle><circle fill="#FEE6AD" cx="12" cy="14.667" r="9.333"></circle><g fill-rule="nonzero"><use fill="#FFF" xlink:href="#rank1_svg__a"></use><use fill="#D74D03" xlink:href="#rank1_svg__a"></use></g></g></g></svg> | |||||
</div> | |||||
{{else if eq $i 1}} | |||||
<div class="org_icon"> | |||||
<svg width="1em" height="1em" viewBox="0 0 32 32" class="contribution-item-img__2-fih"><g transform="translate(4 2.667)" fill="none" fill-rule="evenodd"><path fill="#305269" d="M0 0h6.976l5.49 7.642L17.063 0H24L12 16z"></path><circle fill="#BDD8F0" cx="12" cy="14.667" r="12"></circle><circle fill="#E1E9FC" cx="12" cy="14.667" r="9.333"></circle><path d="M15.817 20v-1.584h-4.81l3.212-2.977c.469-.43.853-.883 1.151-1.357.298-.474.447-1.039.447-1.694 0-.499-.088-.934-.264-1.305a2.525 2.525 0 00-.718-.917 3.169 3.169 0 00-1.064-.543 4.531 4.531 0 00-1.312-.183c-.47 0-.905.064-1.306.19-.4.128-.753.314-1.056.558-.303.244-.55.55-.74.917-.191.366-.306.79-.345 1.268l1.848.147c.059-.43.23-.772.513-1.027.284-.254.646-.381 1.086-.381.205 0 .398.032.579.095.18.064.34.154.477.272a1.262 1.262 0 01.455.997c0 .176-.035.345-.103.506a2.52 2.52 0 01-.257.462 3.476 3.476 0 01-.345.418c-.127.132-.249.257-.366.374l-4.034 3.901V20h6.952z" fill="#305269" fill-rule="nonzero"></path></g></svg> | |||||
</div> | |||||
{{else if eq $i 2}} | |||||
<div class="org_icon"> | |||||
<svg width="1em" height="1em" viewBox="0 0 32 32" class="contribution-item-img__2-fih"><g transform="translate(4 2.667)" fill="none" fill-rule="evenodd"><path fill="#865B45" d="M0 0h6.976l5.49 7.642L17.063 0H24L12 16z"></path><circle fill="#E7C5AC" cx="12" cy="14.667" r="12"></circle><circle fill="#FEDDC7" cx="12" cy="14.667" r="9.333"></circle><path d="M12.239 20.176c.46 0 .902-.066 1.327-.198.425-.132.8-.328 1.122-.587.323-.259.58-.579.77-.96.19-.382.286-.822.286-1.32 0-.646-.171-1.203-.513-1.672-.343-.47-.846-.753-1.511-.851v-.03c.557-.136.992-.422 1.305-.857.313-.435.47-.932.47-1.489 0-.46-.09-.863-.272-1.21a2.547 2.547 0 00-.726-.865 3.232 3.232 0 00-1.056-.521 4.521 4.521 0 00-1.276-.176 4.52 4.52 0 00-1.1.132 3.404 3.404 0 00-.968.403 2.79 2.79 0 00-.762.697 3.181 3.181 0 00-.499.997l1.863.499c.127-.362.33-.643.608-.843.279-.2.594-.301.946-.301.44 0 .797.127 1.071.381.274.255.41.582.41.983 0 .313-.058.562-.175.748a1.17 1.17 0 01-.462.425 1.903 1.903 0 01-.646.191 6.09 6.09 0 01-.74.044h-.455v1.584h.425c.264 0 .533.02.807.059.274.039.52.115.74.227.22.112.402.274.543.484.142.21.213.482.213.814a1.533 1.533 0 01-.52 1.18 1.772 1.772 0 01-.558.33 1.88 1.88 0 01-.667.118c-.47 0-.841-.117-1.115-.352s-.464-.567-.572-.997l-1.877.498c.117.43.288.8.513 1.108.225.308.491.56.8.755.307.196.652.34 1.033.433a5.13 5.13 0 001.218.139z" fill="#865B45" fill-rule="nonzero"></path></g></svg> | |||||
</div> | |||||
{{else }} | |||||
<div class="org_icon org_icon_num" > | |||||
{{Add $i 1}} | |||||
</div> | |||||
{{end}} | |||||
<li class="li_avatar"> | |||||
<img class="ui avatar image" src="{{$user.RelAvatarLink}}" > | |||||
</li> | |||||
<li class="li_name"> | |||||
<p class="org_line_hight">{{$user.Name}}</p> | |||||
</li> | |||||
</ul> | |||||
{{end}} | |||||
</li> | |||||
</div> | |||||
</div> | </div> | ||||
</div> | </div> | ||||
</div> | </div> | ||||
</div> | </div> | ||||
{{template "base/footer" .}} | {{template "base/footer" .}} | ||||
<script> | |||||
function all_search(){ | |||||
var inputValue = document.getElementById("value_s").value; | |||||
console.log("Keyword",inputValue) | |||||
sessionStorage.setItem("keyword",inputValue); | |||||
sessionStorage.setItem("tableName","org"); | |||||
sessionStorage.setItem("specifySearch",true); | |||||
sessionStorage.setItem("sortBy","default"); | |||||
sessionStorage.setItem("ascending","false"); | |||||
window.open("/all/search/"); | |||||
} | |||||
window.onload = function() { | |||||
var swiperOrg = new Swiper(".homeorg-list", { | |||||
slidesPerView: 1, | |||||
slidesPerColumn: 3, | |||||
slidesPerColumnFill:'row', | |||||
spaceBetween: 15, | |||||
pagination: { | |||||
el: ".swiper-pagination", | |||||
clickable: true, | |||||
}, | |||||
autoplay: { | |||||
delay: 4500, | |||||
disableOnInteraction: false, | |||||
}, | |||||
breakpoints: { | |||||
768: { | |||||
slidesPerView: 3, | |||||
}, | |||||
1024: { | |||||
slidesPerView: 4, | |||||
}, | |||||
}, | |||||
}); | |||||
} | |||||
</script> |
@@ -281,7 +281,7 @@ td, th { | |||||
</tr> | </tr> | ||||
<tr class="ti-no-ng-animate"> | <tr class="ti-no-ng-animate"> | ||||
<td class="ti-no-ng-animate ti-text-form-label text-width80"> | <td class="ti-no-ng-animate ti-text-form-label text-width80"> | ||||
镜像 | |||||
{{.i18n.Tr "cloudbrain.mirror"}} | |||||
</td> | </td> | ||||
<td class="ti-text-form-content"> | <td class="ti-text-form-content"> | ||||
@@ -292,7 +292,8 @@ td, th { | |||||
</tr> | </tr> | ||||
<tr class="ti-no-ng-animate"> | <tr class="ti-no-ng-animate"> | ||||
<td class="ti-no-ng-animate ti-text-form-label text-width80"> | <td class="ti-no-ng-animate ti-text-form-label text-width80"> | ||||
类型 | |||||
{{.i18n.Tr "repo.cloudbrain.benchmark.evaluate_type"}} | |||||
</td> | </td> | ||||
<td class="ti-text-form-content"> | <td class="ti-text-form-content"> | ||||
@@ -313,7 +314,7 @@ td, th { | |||||
<tr class="ti-no-ng-animate"> | <tr class="ti-no-ng-animate"> | ||||
<td class="ti-no-ng-animate ti-text-form-label text-width80"> | <td class="ti-no-ng-animate ti-text-form-label text-width80"> | ||||
训练程序 | |||||
{{.i18n.Tr "repo.cloudbrain.benchmark.evaluate_train"}} | |||||
</td> | </td> | ||||
<td class="ti-text-form-content"> | <td class="ti-text-form-content"> | ||||
@@ -324,7 +325,7 @@ td, th { | |||||
</tr> | </tr> | ||||
<tr class="ti-no-ng-animate"> | <tr class="ti-no-ng-animate"> | ||||
<td class="ti-no-ng-animate ti-text-form-label text-width80"> | <td class="ti-no-ng-animate ti-text-form-label text-width80"> | ||||
测试程序 | |||||
{{.i18n.Tr "repo.cloudbrain.benchmark.evaluate_test"}} | |||||
</td> | </td> | ||||
<td class="ti-text-form-content"> | <td class="ti-text-form-content"> | ||||
@@ -360,7 +361,7 @@ td, th { | |||||
<tr class="ti-no-ng-animate"> | <tr class="ti-no-ng-animate"> | ||||
<td class="ti-no-ng-animate ti-text-form-label text-width80"> | <td class="ti-no-ng-animate ti-text-form-label text-width80"> | ||||
创建者 | |||||
{{$.i18n.Tr "repo.cloudbrain_creator"}} | |||||
</td> | </td> | ||||
<td class="ti-text-form-content"> | <td class="ti-text-form-content"> | ||||
@@ -371,7 +372,7 @@ td, th { | |||||
</tr> | </tr> | ||||
<tr class="ti-no-ng-animate"> | <tr class="ti-no-ng-animate"> | ||||
<td class="ti-no-ng-animate ti-text-form-label text-width80"> | <td class="ti-no-ng-animate ti-text-form-label text-width80"> | ||||
子类型 | |||||
{{$.i18n.Tr "repo.cloudbrain.benchmark.evaluate_child_type"}} | |||||
</td> | </td> | ||||
<td class="ti-text-form-content"> | <td class="ti-text-form-content"> | ||||
@@ -1,108 +1,501 @@ | |||||
{{template "base/head" .}} | {{template "base/head" .}} | ||||
<style> | |||||
.according-panel-heading{ | |||||
box-sizing: border-box; | |||||
padding: 8px 16px; | |||||
color: #252b3a; | |||||
background-color: #f2f5fc; | |||||
line-height: 1.5; | |||||
cursor: pointer; | |||||
-moz-user-select: none; | |||||
-webkit-user-select: none; | |||||
-ms-user-select: none; | |||||
-khtml-user-select: none; | |||||
user-select: none; | |||||
} | |||||
.accordion-panel-title { | |||||
margin-top: 0; | |||||
margin-bottom: 0; | |||||
color: #252b3a; | |||||
} | |||||
.accordion-panel-title-content{ | |||||
vertical-align: middle; | |||||
display: inline-block; | |||||
width: calc(100% - 32px); | |||||
cursor: default; | |||||
} | |||||
.acc-margin-bottom { | |||||
margin-bottom: 5px; | |||||
} | |||||
.title_text { | |||||
font-size: 12px; | |||||
} | |||||
.ac-display-inblock { | |||||
display: inline-block; | |||||
} | |||||
.cti-mgRight-sm { | |||||
margin-right: 8px; | |||||
} | |||||
.ac-text-normal { | |||||
font-size: 14px; | |||||
color: #575d6c; | |||||
} | |||||
.uc-accordionTitle-black { | |||||
color: #333; | |||||
} | |||||
.accordion-border{ | |||||
border:1px solid #cce2ff; | |||||
} | |||||
.padding0{ | |||||
padding: 0 !important; | |||||
} | |||||
.content-pad{ | |||||
padding: 15px 35px; | |||||
} | |||||
.content-margin{ | |||||
margin:10px 5px ; | |||||
} | |||||
.tab_2_content { | |||||
min-height: 560px; | |||||
margin-left: 10px; | |||||
} | |||||
.ac-grid { | |||||
display: block; | |||||
*zoom: 1; | |||||
} | |||||
.ac-grid-col { | |||||
float: left; | |||||
width: 100%; | |||||
} | |||||
.ac-grid-col2 .ac-grid-col { | |||||
width: 50%; | |||||
} | |||||
.ti-form { | |||||
text-align: left; | |||||
max-width: 100%; | |||||
vertical-align: middle; | |||||
} | |||||
.ti-form>tbody { | |||||
font-size: 12px; | |||||
} | |||||
.ti-form>tbody, .ti-form>tbody>tr { | |||||
vertical-align: inherit; | |||||
} | |||||
.info_text { | |||||
padding-bottom: 20px; | |||||
padding-right: 20px; | |||||
font-size: 12px; | |||||
} | |||||
.ti-text-form-label { | |||||
padding-bottom: 20px; | |||||
padding-right: 20px; | |||||
color: #8a8e99; | |||||
font-size: 12px; | |||||
white-space: nowrap !important; | |||||
width: 80px; | |||||
line-height: 30px; | |||||
} | |||||
.ti-text-form-content{ | |||||
line-height: 30px; | |||||
padding-bottom: 20px; | |||||
} | |||||
.ti-form>tbody>tr>td { | |||||
vertical-align: top; | |||||
white-space: normal; | |||||
} | |||||
td, th { | |||||
padding: 0; | |||||
} | |||||
.ac-grid-col .text-span { | |||||
width: 450px; | |||||
overflow: hidden; | |||||
text-overflow: ellipsis; | |||||
white-space: nowrap; | |||||
} | |||||
.redo-color{ | |||||
color: #3291F8; | |||||
} | |||||
.ti-action-menu-item:not(:last-child){ | |||||
margin-right: 10px; | |||||
padding-right: 11px; | |||||
text-decoration: none!important; | |||||
color: #526ecc; | |||||
cursor: pointer; | |||||
display: inline-block; | |||||
-moz-user-select: none; | |||||
-webkit-user-select: none; | |||||
-ms-user-select: none; | |||||
-khtml-user-select: none; | |||||
user-select: none; | |||||
position: relative; | |||||
} | |||||
.ti-action-menu-item:not(:last-child):after { | |||||
content: ""; | |||||
display: inline-block; | |||||
position: absolute; | |||||
height: 12px; | |||||
right: 0; | |||||
top: 50%; | |||||
-webkit-transform: translateY(-6px); | |||||
-ms-transform: translateY(-6px); | |||||
-o-transform: translateY(-6px); | |||||
transform: translateY(-6px); | |||||
border-right: 1px solid #dfe1e6; | |||||
} | |||||
.text-width80{ | |||||
width: 100px; | |||||
line-height: 30px; | |||||
} | |||||
.border-according{ | |||||
border: 1px solid #dfe1e6; | |||||
} | |||||
.disabled { | |||||
cursor: default; | |||||
pointer-events: none; | |||||
color: rgba(0,0,0,.6) !important; | |||||
opacity: .45 !important; | |||||
} | |||||
.pad20{ | |||||
border:0px !important; | |||||
} | |||||
.model_file_bread{ | |||||
margin-bottom: -0.5rem !important; | |||||
padding-left: 1rem; | |||||
padding-top: 0.5rem ; | |||||
} | |||||
</style> | |||||
<div id="mask"> | |||||
<div id="loadingPage"> | |||||
<div class="rect1"></div> | |||||
<div class="rect2"></div> | |||||
<div class="rect3"></div> | |||||
<div class="rect4"></div> | |||||
<div class="rect5"></div> | |||||
</div> | |||||
</div> | |||||
<div class="repository"> | <div class="repository"> | ||||
{{template "repo/header" .}} | {{template "repo/header" .}} | ||||
<div class="repository new repo ui middle very relaxed page grid"> | |||||
<div class="column"> | |||||
{{template "base/alert" .}} | |||||
<div class="ui container"> | |||||
<h4 class="ui header" id="vertical-segment"> | <h4 class="ui header" id="vertical-segment"> | ||||
<div class="ui breadcrumb"> | |||||
<a class="section" href="{{.RepoLink}}/debugjob?debugListType=all"> | |||||
{{.i18n.Tr "repo.cloudbrain"}} | |||||
</a> | |||||
<div class="divider"> / </div> | |||||
<a class="section backTodeBug" href="{{.RepoLink}}/debugjob?debugListType={{if eq $.debugListType "NPU"}}NPU{{else if eq $.debugListType "CPU/GPU"}}CPU/GPU{{else}}all{{end}}"> | |||||
{{$.i18n.Tr "repo.modelarts.notebook"}} | |||||
</a> | |||||
<div class="divider"> / </div> | |||||
{{with .task}} | |||||
<div class="active section">{{.DisplayJobName}}</div> | |||||
{{end}} | |||||
</div> | |||||
<div class="ui breadcrumb"> | |||||
<a class="section" href="{{.RepoLink}}/debugjob?debugListType=all"> | |||||
{{.i18n.Tr "repo.cloudbrain"}} | |||||
</a> | |||||
<div class="divider"> / </div> | |||||
<a class="section backTodeBug" href="{{.RepoLink}}/debugjob?debugListType={{if eq $.debugListType "NPU"}}NPU{{else if eq $.debugListType "CPU/GPU"}}CPU/GPU{{else}}all{{end}}"> | |||||
{{$.i18n.Tr "repo.modelarts.notebook"}} | |||||
</a> | |||||
<div class="divider"> / </div> | |||||
<div class="active section">{{.displayJobName}}</div> | |||||
</div> | |||||
</h4> | </h4> | ||||
<div> | |||||
<div class="ui yellow segment"> | |||||
{{with .task}} | |||||
<p>任务名称: {{.DisplayJobName}}</p> | |||||
{{end}} | |||||
</div> | |||||
<div class="ui green segment"> | |||||
<p>任务结果:</p> | |||||
{{with .taskRes}} | |||||
{{range .TaskStatuses}} | |||||
<table class="ui celled striped table"> | |||||
<tbody> | |||||
<tr> | |||||
<td class="four wide"> 状态 </td> | |||||
<td> {{.State}} </td> | |||||
</tr> | |||||
</tbody> | |||||
</table> | |||||
{{end}} | |||||
{{end}} | |||||
</div> | |||||
<div class="ui blue segment"> | |||||
{{with .result}} | |||||
<table class="ui celled striped table"> | |||||
<thead> | |||||
<tr> <th colspan="2"> 硬件信息 </th> </tr> | |||||
</thead> | |||||
<tbody> | |||||
<tr> | |||||
<td class="four wide"> CPU </td> | |||||
<td>{{.Resource.CPU}}</td> | |||||
</tr> | |||||
<tr> | |||||
<td> Memory </td> | |||||
<td>{{.Resource.Memory}}</td> | |||||
</tr> | |||||
<tr> | |||||
<td> NvidiaComGpu </td> | |||||
<td>{{.Resource.NvidiaComGpu}}</td> | |||||
</tr> | |||||
</tbody> | |||||
</table> | |||||
<table class="ui celled striped table"> | |||||
<thead> | |||||
<tr> <th colspan="2"> 调试信息 </th> </tr> | |||||
</thead> | |||||
<tbody> | |||||
<tr> | |||||
<td class="four wide"> 平台 </td> | |||||
<td> {{.Platform}} </td> | |||||
</tr> | |||||
<tr> | |||||
<td> 开始时间 </td> | |||||
{{if not (eq $.task.StartTime 0)}} | |||||
<td>{{TimeSinceUnix1 $.task.StartTime}}</td> | |||||
{{else}} | |||||
<td>无<td> | |||||
{{end}} | |||||
</tr> | |||||
<tr> | |||||
<td> 结束时间 </td> | |||||
{{if not (eq $.task.EndTime 0)}} | |||||
<td>{{TimeSinceUnix1 $.task.EndTime}}</td> | |||||
{{else}} | |||||
<td>无<td> | |||||
{{end}} | |||||
</tr> | |||||
<tr> | |||||
<td> ExitCode </td> | |||||
<td>{{.JobStatus.AppExitCode}}</td> | |||||
</tr> | |||||
<tr> | |||||
<td> 退出信息 </td> | |||||
<td>{{.JobStatus.AppExitDiagnostics | nl2br}}</td> | |||||
</tr> | |||||
</tbody> | |||||
</table> | |||||
{{end}} | |||||
</div> | |||||
{{range $k ,$v := .version_list_task}} | |||||
<div class="ui accordion border-according" id="accordion{{.VersionName}}" data-repopath="{{$.RepoRelPath}}" data-jobid="{{.JobID}}" data-version="{{.VersionName}}"> | |||||
<input type="hidden" id="jobId_input" name="jobId_input" value="{{.JobID}}"> | |||||
<div class="{{if eq $k 0}}active{{end}} title padding0"> | |||||
<div class="according-panel-heading"> | |||||
<div class="accordion-panel-title"> | |||||
<i class="dropdown icon"></i> | |||||
<span class="accordion-panel-title-content"> | |||||
<span> | |||||
<div class="ac-display-inblock title_text acc-margin-bottom"> | |||||
<span class="cti-mgRight-sm"> | |||||
{{if not (eq .StartTime 0)}} | |||||
<td>{{TimeSinceUnix1 .StartTime}}</td> | |||||
{{else}} | |||||
<td>{{TimeSinceUnix1 .CreatedUnix}}<td> | |||||
{{end}} | |||||
</span> | |||||
<span class="cti-mgRight-sm">{{$.i18n.Tr "repo.modelarts.status"}}: | |||||
<span id="{{.VersionName}}-status-span"><i id="icon" style="vertical-align: middle;" class="{{.Status}}"></i><span id="text" style="margin-left: 0.4em;font-size: 12px;">{{.Status}}</span></span> | |||||
</span> | |||||
<span class="cti-mgRight-sm">{{$.i18n.Tr "repo.modelarts.train_job.dura_time"}}:</span> | |||||
<span class="cti-mgRight-sm uc-accordionTitle-black" id="{{.VersionName}}-duration-span">{{$.duration}}</span> | |||||
</div> | |||||
</span> | |||||
</span> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
<div class="{{if eq $k 0}}active{{end}} content"> | |||||
<div class="content-pad"> | |||||
<div class="ui pointing secondary menu" style="border-bottom: 1px solid rgba(34,36,38,.15);"> | |||||
<a class="active item" data-tab="first{{$k}}">{{$.i18n.Tr "repo.modelarts.train_job.config"}}</a> | |||||
</div> | |||||
<div class="ui tab active" data-tab="first{{$k}}"> | |||||
<div style="padding-top: 10px;"> | |||||
<div class="tab_2_content"> | |||||
<div class="ac-grid ac-grid-col2"> | |||||
<div class="ac-grid-col"> | |||||
<table class="ti-form"> | |||||
<tbody class="ti-text-form"> | |||||
<tr class="ti-no-ng-animate"> | |||||
<td class="ti-no-ng-animate ti-text-form-label text-width80"> | |||||
{{$.i18n.Tr "repo.cloudbrain_task"}} | |||||
</td> | |||||
<td class="ti-text-form-content"> | |||||
<div class="text-span text-span-w"> | |||||
{{.DisplayJobName}} | |||||
</div> | |||||
</td> | |||||
</tr> | |||||
<tr class="ti-no-ng-animate"> | |||||
<td class="ti-no-ng-animate ti-text-form-label text-width80"> | |||||
{{$.i18n.Tr "repo.modelarts.status"}} | |||||
</td> | |||||
<td class="ti-text-form-content"> | |||||
<div class="text-span text-span-w" id="{{.VersionName}}-status"> | |||||
{{.Status}} | |||||
</div> | |||||
</td> | |||||
</tr> | |||||
<tr class="ti-no-ng-animate"> | |||||
<td class="ti-no-ng-animate ti-text-form-label text-width80"> | |||||
{{$.i18n.Tr "repo.modelarts.train_job.start_time"}} | |||||
</td> | |||||
<td class="ti-text-form-content"> | |||||
<div class="text-span text-span-w"> | |||||
<span style="font-size: 12px;" class=""> | |||||
{{if not (eq .StartTime 0)}} | |||||
{{TimeSinceUnix1 .StartTime}} | |||||
{{else}} | |||||
{{TimeSinceUnix1 .CreatedUnix}} | |||||
{{end}} | |||||
</span> | |||||
</div> | |||||
</td> | |||||
</tr> | |||||
<tr class="ti-no-ng-animate"> | |||||
<td class="ti-no-ng-animate ti-text-form-label text-width80"> | |||||
{{$.i18n.Tr "repo.modelarts.train_job.dura_time"}} | |||||
</td> | |||||
<td class="ti-text-form-content"> | |||||
<div class="text-span text-span-w" id="{{.VersionName}}-duration"> | |||||
{{$.duration}} | |||||
</div> | |||||
</td> | |||||
</tr> | |||||
<tr class="ti-no-ng-animate"> | |||||
<td class="ti-no-ng-animate ti-text-form-label text-width80"> | |||||
{{$.i18n.Tr "cloudbrain.mirror"}} | |||||
</td> | |||||
<td class="ti-text-form-content"> | |||||
<div class="text-span text-span-w" id="{{.VersionName}}-mirror"> | |||||
{{.Image}} | |||||
</div> | |||||
</td> | |||||
</tr> | |||||
<tr class="ti-no-ng-animate"> | |||||
<td class="ti-no-ng-animate ti-text-form-label text-width80"> | |||||
{{$.i18n.Tr "cloudbrain.dataset_storage_path"}} | |||||
</td> | |||||
<td class="ti-text-form-content"> | |||||
<div class="text-span text-span-w" id="dataset_storage_path"> | |||||
{{$.dataset_path}} | |||||
</div> | |||||
</td> | |||||
</tr> | |||||
<tr class="ti-no-ng-animate"> | |||||
<td class="ti-no-ng-animate ti-text-form-label text-width80"> | |||||
{{$.i18n.Tr "cloudbrain.code_storage_path"}} | |||||
</td> | |||||
<td class="ti-text-form-content"> | |||||
<div class="text-span text-span-w" id="code_storage_path"> | |||||
{{$.code_path}} | |||||
</div> | |||||
</td> | |||||
</tr> | |||||
</tbody> | |||||
</table> | |||||
</div> | |||||
<div class="ac-grid-col"> | |||||
<table class="ti-form"> | |||||
<tbody class="ti-text-form"> | |||||
<tr class="ti-no-ng-animate"> | |||||
<td class="ti-no-ng-animate ti-text-form-label text-width80"> | |||||
{{$.i18n.Tr "repo.cloudbrain.platform"}} | |||||
</td> | |||||
<td class="ti-text-form-content"> | |||||
<div class="text-span text-span-w"> | |||||
{{$.result.Platform}} | |||||
</div> | |||||
</td> | |||||
</tr> | |||||
<tr class="ti-no-ng-animate"> | |||||
<td class="ti-no-ng-animate ti-text-form-label text-width80"> | |||||
ExitCode | |||||
</td> | |||||
<td class="ti-text-form-content"> | |||||
<div class="text-span text-span-w"> | |||||
{{$.result.JobStatus.AppExitCode}} | |||||
</div> | |||||
</td> | |||||
</tr> | |||||
<tr class="ti-no-ng-animate"> | |||||
<td class="ti-no-ng-animate ti-text-form-label text-width80"> | |||||
{{$.i18n.Tr "repo.cloudbrain.endtime"}} | |||||
</td> | |||||
<td class="ti-text-form-content"> | |||||
<div class="text-span text-span-w" id="{{.VersionName}}-BenchmarkTypeName"> | |||||
{{if not (eq .StartTime 0)}} | |||||
{{TimeSinceUnix1 .EndTime}} | |||||
{{else}} | |||||
-- | |||||
{{end}} | |||||
</div> | |||||
</td> | |||||
</tr> | |||||
<tr class="ti-no-ng-animate"> | |||||
<td class="ti-no-ng-animate ti-text-form-label text-width80"> | |||||
{{$.i18n.Tr "repo.modelarts.train_job.dataset"}} | |||||
</td> | |||||
<td class="ti-text-form-content"> | |||||
<div class="text-span text-span-w" id="{{.VersionName}}-BenchmarkTypeName"> | |||||
{{$.datasetname}} | |||||
</div> | |||||
</td> | |||||
</tr> | |||||
<tr class="ti-no-ng-animate"> | |||||
<td class="ti-no-ng-animate ti-text-form-label text-width80"> | |||||
{{$.i18n.Tr "repo.modelarts.train_job.standard"}} | |||||
</td> | |||||
<td class="ti-text-form-content"> | |||||
<div class="text-span text-span-w"> | |||||
{{$.resource_spec}} | |||||
</div> | |||||
</td> | |||||
</tr> | |||||
<tr class="ti-no-ng-animate"> | |||||
<td class="ti-no-ng-animate ti-text-form-label text-width80"> | |||||
{{$.i18n.Tr "repo.cloudbrain_creator"}} | |||||
</td> | |||||
<td class="ti-text-form-content"> | |||||
<div class="text-span text-span-w" id="{{.VersionName}}-mirror"> | |||||
{{.User.Name}} | |||||
</div> | |||||
</td> | |||||
</tr> | |||||
<tr class="ti-no-ng-animate"> | |||||
<td class="ti-no-ng-animate ti-text-form-label text-width80"> | |||||
{{$.i18n.Tr "cloudbrain.model_storage_path"}} | |||||
</td> | |||||
<td class="ti-text-form-content"> | |||||
<div class="text-span text-span-w" id="model_storage_path"> | |||||
{{$.model_path}} | |||||
</div> | |||||
</td> | |||||
</tr> | |||||
</tbody> | |||||
</table> | |||||
</div> | |||||
</div> | |||||
<div class="ac-grid ac-grid-col2"> | |||||
<div class="ac-grid-col"> | |||||
<span class="ti-text-form-label">{{$.i18n.Tr "repo.cloudbrain.exitinfo"}}</span> | |||||
</div> | |||||
</div> | |||||
<div class="ac-grid-col"> | |||||
<span class="info_text"> | |||||
{{$.result.JobStatus.AppExitDiagnostics}} | |||||
</span> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
</div> | </div> | ||||
{{end}} {{template "base/paginate" .}} | |||||
</div> | |||||
<!-- 确认模态框 --> | |||||
<div id="deletemodel"> | |||||
<div class="ui basic modal"> | |||||
<div class="ui icon header"> | |||||
<i class="trash icon"></i> {{.i18n.Tr "cloudbrain.delete_task"}} | |||||
</div> | |||||
<div class="content"> | |||||
<p>{{.i18n.Tr "cloudbrain.task_delete_confirm"}}</p> | |||||
</div> | |||||
<div class="actions"> | |||||
<div class="ui red basic inverted cancel button"> | |||||
<i class="remove icon"></i> {{.i18n.Tr "cloudbrain.operate_cancel"}} | |||||
</div> | |||||
<div class="ui green basic inverted ok button"> | |||||
<i class="checkmark icon"></i> {{.i18n.Tr "cloudbrain.operate_confirm"}} | |||||
</div> | |||||
</div> | |||||
</div> | |||||
</div> | </div> | ||||
</div> | |||||
</div> | </div> | ||||
{{template "base/footer" .}} | {{template "base/footer" .}} | ||||
<script> | |||||
$('.menu .item').tab() | |||||
$(document).ready(function(){ | |||||
$('.ui.accordion').accordion({selector:{trigger:'.icon'}}); | |||||
}); | |||||
$(document).ready(function(){ | |||||
$('.secondary.menu .item').tab(); | |||||
}); | |||||
let userName | |||||
let repoPath | |||||
let jobName | |||||
$(document).ready(function(){ | |||||
let url = window.location.href; | |||||
let urlArr = url.split('/') | |||||
userName = urlArr.slice(-5)[0] | |||||
repoPath = urlArr.slice(-4)[0] | |||||
jobName = urlArr.slice(-1)[0] | |||||
}) | |||||
function loadLog(version_name){ | |||||
document.getElementById("mask").style.display = "block" | |||||
$.get(`/api/v1/repos/${userName}/${repoPath}/cloudbrain/${jobName}/log?version_name=${version_name}&lines=50&order=asc`, (data) => { | |||||
$('input[name=end_line]').val(data.EndLine) | |||||
$('input[name=start_line]').val(data.StartLine) | |||||
$(`#log_file${version_name}`).text(data.Content) | |||||
document.getElementById("mask").style.display = "none" | |||||
}).fail(function(err) { | |||||
console.log(err); | |||||
document.getElementById("mask").style.display = "none" | |||||
}); | |||||
} | |||||
</script> |
@@ -131,7 +131,7 @@ | |||||
<a style="margin-left:30px;" href="{{.RepoLink}}/datasets/edit/{{.dataset.ID}}" class="ui primary basic mini {{if not $.CanWrite}} disabled {{end}} button">{{.i18n.Tr "repo.modelarts.modify"}}</a> | <a style="margin-left:30px;" href="{{.RepoLink}}/datasets/edit/{{.dataset.ID}}" class="ui primary basic mini {{if not $.CanWrite}} disabled {{end}} button">{{.i18n.Tr "repo.modelarts.modify"}}</a> | ||||
</span> | </span> | ||||
</div> | </div> | ||||
{{if and (.dataset.Category) (.dataset.Task) (.dataset.License)}} | |||||
{{if or (.dataset.Category) (.dataset.Task) (.dataset.License)}} | |||||
<div class="column thirteen wide"> | <div class="column thirteen wide"> | ||||
{{if .dataset.Category}} | {{if .dataset.Category}} | ||||
{{$category := .dataset.Category}} | {{$category := .dataset.Category}} | ||||
@@ -40,7 +40,7 @@ | |||||
<div class="ui right file-actions"> | <div class="ui right file-actions"> | ||||
{{if .Repository.CanEnableEditor}} | {{if .Repository.CanEnableEditor}} | ||||
{{if .CanEditFile}} | {{if .CanEditFile}} | ||||
<a href="{{.RepoLink}}/_edit/{{EscapePound .BranchName}}/{{EscapePound .ReadmeName}}"><span class="btn-octicon poping up" data-content="{{.EditFileTooltip}}" data-position="bottom center" data-variation="tiny inverted">{{svg "octicon-pencil" 16}}</span></a> | |||||
<a href="{{.RepoLink}}/_edit/{{EscapePound .BranchName}}/{{EscapePound .ReadmeRelativePath}}"><span class="btn-octicon poping up" data-content="{{.EditFileTooltip}}" data-position="bottom center" data-variation="tiny inverted">{{svg "octicon-pencil" 16}}</span></a> | |||||
{{else}} | {{else}} | ||||
<span class="btn-octicon poping up disabled" data-content="{{.EditFileTooltip}}" data-position="bottom center" data-variation="tiny inverted">{{svg "octicon-pencil" 16}}</span> | <span class="btn-octicon poping up disabled" data-content="{{.EditFileTooltip}}" data-position="bottom center" data-variation="tiny inverted">{{svg "octicon-pencil" 16}}</span> | ||||
{{end}} | {{end}} | ||||
@@ -48,7 +48,7 @@ | |||||
</div> | </div> | ||||
</div> | </div> | ||||
{{end}} | {{end}} | ||||
{{if not .ReadmeInList}} | {{if not .ReadmeInList}} | ||||
<div class="file-header-right"> | <div class="file-header-right"> | ||||
<div class="ui right file-actions"> | <div class="ui right file-actions"> | ||||
@@ -133,8 +133,44 @@ | |||||
<template slot-scope="scope"> | <template slot-scope="scope"> | ||||
{{scope.row.RegistDate | transformTimestamp}} | {{scope.row.RegistDate | transformTimestamp}} | ||||
</template> | </template> | ||||
</el-table-column> | |||||
<el-table-column | |||||
prop="CloudBrainTaskNum" | |||||
label="云脑任务数" | |||||
width="120px" | |||||
align="center"> | |||||
</el-table-column> | </el-table-column> | ||||
<el-table-column | <el-table-column | ||||
prop="CloudBrainRunTime" | |||||
label="云脑运行时间(小时)" | |||||
width="120px" | |||||
align="center"> | |||||
<template slot-scope="scope"> | |||||
{{scope.row.CloudBrainRunTime | roundingToHour}} | |||||
</template> | |||||
</el-table-column> | |||||
<el-table-column | |||||
prop="CommitDatasetNum" | |||||
label="上传(提交)数据集文件数" | |||||
width="120px" | |||||
align="center"> | |||||
</el-table-column> | |||||
<el-table-column | |||||
prop="CommitModelCount" | |||||
label="提交模型数" | |||||
width="120px" | |||||
align="center"> | |||||
</el-table-column> | |||||
<el-table-column | |||||
prop="UserIndex" | |||||
label="用户指数" | |||||
width="120px" | |||||
align="center"> | |||||
<template slot-scope="scope"> | |||||
{{scope.row.UserIndex | rounding}} | |||||
</template> | |||||
</el-table-column> | |||||
<el-table-column | |||||
prop="DataDate" | prop="DataDate" | ||||
label="系统统计时间" | label="系统统计时间" | ||||
width="120px" | width="120px" | ||||
@@ -178,7 +214,7 @@ | |||||
value_time: '', | value_time: '', | ||||
search:'', | search:'', | ||||
data:'', | data:'', | ||||
columns: [{title: 'ID',key: 'ID'},{title: '用户名',key: 'Name'},{title: 'PR数',key: 'CodeMergeCount'},{title: 'commit数',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: 'commit数',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:'CloudBrainTaskNum'},{title:'云脑运行时间(小时)',key:'CloudBrainRunTime'},{title:'上传(提交)数据集文件数',key:'CommitDatasetNum'},{title:'提交模型数',key:'CommitModelCount'},{title:'用户指数',key:'UserIndex'},{title:'系统统计时间',key:'CountDate'}], | |||||
blob:'', | blob:'', | ||||
fileName:'', | fileName:'', | ||||
dynamic:7, | dynamic:7, | ||||
@@ -351,6 +387,12 @@ | |||||
}, | }, | ||||
filters:{ | filters:{ | ||||
rounding (value) { | |||||
return Number(value).toFixed(2) | |||||
}, | |||||
roundingToHour (value) { | |||||
return (Number(value)/3600).toFixed(2) | |||||
}, | |||||
transformTimestamp(timestamp){ | transformTimestamp(timestamp){ | ||||
let a = new Date(timestamp*1000); | let a = new Date(timestamp*1000); | ||||
const date = new Date(a); | const date = new Date(a); | ||||
@@ -811,6 +811,89 @@ display: block; | |||||
box-shadow: -15px 0px 10px #fff; | box-shadow: -15px 0px 10px #fff; | ||||
} | } | ||||
.content_top10{ | |||||
padding:10px; | |||||
padding-top:0px; | |||||
} | |||||
.re_con{ | |||||
color: rgba(136, 136, 136, 100); | |||||
font-size: 14px; | |||||
text-align: center; | |||||
font-family: SourceHanSansSC-light; | |||||
} | |||||
.title_re{ | |||||
margin-top: 50px !important; | |||||
} | |||||
.card_list { | |||||
width: calc(33.33333333333333% - 2em); | |||||
margin-left: 1em; | |||||
margin-right: 1em | |||||
} | |||||
.list_title{ | |||||
height: 52px; | |||||
text-align: center | |||||
} | |||||
.star_title{ | |||||
background-color: #3291F8; | |||||
} | |||||
.memb_title{ | |||||
background-color: #706FE3; | |||||
} | |||||
.act_title{ | |||||
background-color: #13C28D; | |||||
} | |||||
.p_text{ | |||||
line-height: 50px; | |||||
text-align:left; | |||||
padding-left:15px; | |||||
font-size:18px; | |||||
color:#FFFFFF; | |||||
} | |||||
.orgs { | |||||
display: flex; | |||||
flex-flow: row wrap; | |||||
padding: 0; | |||||
margin-top:20px | |||||
} | |||||
.orgs li { | |||||
display: flex; | |||||
border-bottom: 0!important; | |||||
padding: 3px!important; | |||||
} | |||||
.p_score{ | |||||
line-height: 28px; | |||||
width: 100%; | |||||
/* padding-right: 20px; */ | |||||
text-align: right; | |||||
} | |||||
.org_line_hight{ | |||||
line-height: 28px; | |||||
} | |||||
.org_icon{ | |||||
margin-top: 10px; | |||||
margin-right: 10px; | |||||
padding-left: 15px; | |||||
} | |||||
.org_icon_num{ | |||||
margin-left: 2px; | |||||
margin-right: 13px; | |||||
} | |||||
.org_icon_color{ | |||||
color: #FA8C16; | |||||
} | |||||
.li_name{ | |||||
list-style:none; | |||||
width: 55%; | |||||
} | |||||
.li_avatar{ | |||||
list-style: none; | |||||
width: 10%; | |||||
} | |||||
.li_score{ | |||||
list-style:none; | |||||
margin-left: 2px; | |||||
} | |||||
/**seach**/ | /**seach**/ | ||||
/**搜索导航条适配窄屏**/ | /**搜索导航条适配窄屏**/ | ||||
.seachnav{ | .seachnav{ | ||||