1
0
mirror of https://github.com/haiwen/seafile-server.git synced 2025-09-01 23:46:53 +00:00

send event (#490)

* send event

* send event
This commit is contained in:
Xiangyue Cai
2021-09-17 11:07:38 +08:00
committed by GitHub
parent 7f09cff78c
commit 88e917c58e
4 changed files with 75 additions and 18 deletions

View File

@@ -299,6 +299,14 @@ func doFile(rsp http.ResponseWriter, r *http.Request, repo *repomgr.Repo, fileID
} }
} }
if operation != "view" {
oper := "web-file-download"
if operation == "download-link" {
oper = "link-file-download"
}
sendStatisticMsg(repo.StoreID, user, oper, file.FileSize)
}
return nil return nil
} }
@@ -446,6 +454,12 @@ func doFileRange(rsp http.ResponseWriter, r *http.Request, repo *repomgr.Repo, f
} }
} }
oper := "web-file-download"
if operation == "download-link" {
oper = "link-file-download"
}
sendStatisticMsg(repo.StoreID, user, oper, file.FileSize)
return nil return nil
} }
@@ -632,6 +646,8 @@ func doBlock(rsp http.ResponseWriter, r *http.Request, repo *repomgr.Repo, fileI
log.Printf("fatild to write block %s to response: %v", blkID, err) log.Printf("fatild to write block %s to response: %v", blkID, err)
} }
sendStatisticMsg(repo.StoreID, user, "web-file-download", uint64(size))
return nil return nil
} }
@@ -1670,7 +1686,7 @@ func genCommitNeedRetry(repo *repomgr.Repo, base *commitmgr.Commit, commit *comm
mergedCommit = commit mergedCommit = commit
} }
err = updateBranch(repoID, mergedCommit.CommitID, currentHead.CommitID) err = updateBranch(repoID, mergedCommit.CommitID, currentHead.CommitID, commit.CommitID)
if err != nil { if err != nil {
return true, nil return true, nil
} }
@@ -1693,7 +1709,7 @@ func genMergeDesc(repo *repomgr.Repo, mergedRoot, p1Root, p2Root string) string
return desc return desc
} }
func updateBranch(repoID, newCommitID, oldCommitID string) error { func updateBranch(repoID, newCommitID, oldCommitID, secondParentID string) error {
var commitID string var commitID string
name := "master" name := "master"
var sqlStr string var sqlStr string
@@ -1730,6 +1746,34 @@ func updateBranch(repoID, newCommitID, oldCommitID string) error {
trans.Commit() trans.Commit()
if secondParentID != "" {
if err := onBranchUpdated(repoID, secondParentID, false); err != nil {
return err
}
}
if err := onBranchUpdated(repoID, newCommitID, true); err != nil {
return err
}
return nil
}
func onBranchUpdated(repoID string, commitID string, updateRepoInfo bool) error {
if updateRepoInfo {
if err := repomgr.UpdateRepoInfo(repoID, commitID); err != nil {
return err
}
}
isVirtual, err := repomgr.IsVirtualRepo(repoID)
if err != nil {
return err
}
if isVirtual {
return nil
}
publishUpdateEvent(repoID, commitID)
return nil return nil
} }

View File

@@ -427,8 +427,7 @@ func DelUploadTmpFile(repoID, filePath string) error {
return nil return nil
} }
// SetRepoCommitToDb updates the table of RepoInfo. func setRepoCommitToDb(repoID, repoName string, updateTime int64, version int, isEncrypted string, lastModifier string) error {
func SetRepoCommitToDb(repoID, repoName string, updateTime int64, version int, isEncrypted string, lastModifier string) error {
var exists int var exists int
var encrypted int var encrypted int
@@ -641,3 +640,15 @@ func GetRepoOwner(repoID string) (string, error) {
return owner, nil return owner, nil
} }
func UpdateRepoInfo(repoID, commitID string) error {
head, err := commitmgr.Load(repoID, commitID)
if err != nil {
err := fmt.Errorf("failed to get commit %s:%s", repoID, commitID)
return err
}
setRepoCommitToDb(repoID, head.RepoName, head.Ctime, head.Version, head.Encrypted, head.CreatorName)
return nil
}

View File

@@ -42,6 +42,7 @@ const (
permExpireTime = 7200 permExpireTime = 7200
virtualRepoExpireTime = 7200 virtualRepoExpireTime = 7200
syncAPICleaningIntervalSec = 300 syncAPICleaningIntervalSec = 300
maxObjectPackSize = 1 << 20 // 1MB
) )
var ( var (
@@ -473,6 +474,7 @@ func packFSCB(rsp http.ResponseWriter, r *http.Request) *appError {
return &appError{nil, err.Error(), http.StatusBadRequest} return &appError{nil, err.Error(), http.StatusBadRequest}
} }
var totalSize int
var data bytes.Buffer var data bytes.Buffer
for i := 0; i < len(fsIDList); i++ { for i := 0; i < len(fsIDList); i++ {
if !isObjectIDValid(fsIDList[i]) { if !isObjectIDValid(fsIDList[i]) {
@@ -489,6 +491,11 @@ func packFSCB(rsp http.ResponseWriter, r *http.Request) *appError {
binary.BigEndian.PutUint32(tmpLen, uint32(tmp.Len())) binary.BigEndian.PutUint32(tmpLen, uint32(tmp.Len()))
data.Write(tmpLen) data.Write(tmpLen)
data.Write(tmp.Bytes()) data.Write(tmp.Bytes())
totalSize += tmp.Len()
if totalSize >= maxObjectPackSize {
break
}
} }
rsp.Header().Set("Content-Length", strconv.Itoa(data.Len())) rsp.Header().Set("Content-Length", strconv.Itoa(data.Len()))
@@ -1128,6 +1135,13 @@ func publishRepoEvent(rData *repoEventData) {
} }
} }
func publishUpdateEvent(repoID string, commitID string) {
buf := fmt.Sprintf("repo-update\t%s\t%s", repoID, commitID)
if _, err := rpcclient.Call("publish_event", seafileServerChannelEvent, buf); err != nil {
log.Printf("Failed to publish event: %v", err)
}
}
func removeSyncAPIExpireCache() { func removeSyncAPIExpireCache() {
deleteTokens := func(key interface{}, value interface{}) bool { deleteTokens := func(key interface{}, value interface{}) bool {
if info, ok := value.(*tokenInfo); ok { if info, ok := value.(*tokenInfo); ok {

View File

@@ -321,24 +321,12 @@ func editRepoNeedRetry(repoID, name, desc, user string) (bool, error) {
return false, err return false, err
} }
err = updateBranch(repoID, commit.CommitID, parent.CommitID) err = updateBranch(repoID, commit.CommitID, parent.CommitID, "")
if err != nil { if err != nil {
return true, nil return true, nil
} }
updateRepoInfo(repoID, commit.CommitID) repomgr.UpdateRepoInfo(repoID, commit.CommitID)
return true, nil return true, nil
} }
func updateRepoInfo(repoID, commitID string) error {
head, err := commitmgr.Load(repoID, commitID)
if err != nil {
err := fmt.Errorf("failed to get commit %s:%s", repoID, commitID)
return err
}
repomgr.SetRepoCommitToDb(repoID, head.RepoName, head.Ctime, head.Version, head.Encrypted, head.CreatorName)
return nil
}