1
0
mirror of https://github.com/fumiama/paper-manager.git synced 2026-06-13 05:03:16 +08:00

add table visit in user.db

This commit is contained in:
源文雨
2023-03-21 23:19:01 +08:00
parent ddf7182234
commit 6269a9544f
14 changed files with 81 additions and 414 deletions

View File

@@ -384,6 +384,7 @@ func APIHandler(w http.ResponseWriter, r *http.Request) {
}
if h, ok := apimap[r.URL.Path]; ok {
global.UserDB.VisitAPI()
h.handle(w, r)
return
}

View File

@@ -13,6 +13,13 @@ func FileHandler(w http.ResponseWriter, r *http.Request) {
if !utils.IsMethod("GET", w, r) {
return
}
token := r.Header.Get("Authorization")
user := usertokens.Get(token)
if user == nil {
writeresult(w, codeError, nil, errInvalidToken.Error(), typeError)
return
}
global.UserDB.VisitAPI()
if r.URL.Path[0] != '/' {
r.URL.Path = "/" + r.URL.Path
}

View File

@@ -60,8 +60,9 @@ const (
type MessageType uint8
const (
UserTableUser = "user"
UserTableMessage = "msg"
UserTableUser = "user"
UserTableMessage = "msg"
UserTableMonthlyAPIVisit = "visit"
)
var (
@@ -97,6 +98,10 @@ func init() {
if err != nil {
panic(err)
}
err = UserDB.db.Create(UserTableMonthlyAPIVisit, &MonthlyAPIVisit{})
if err != nil {
panic(err)
}
if isinit { // 添加初始账户
UserDB.AddUser(&User{
Role: RoleSuper,
@@ -720,3 +725,50 @@ func (u *UserDatabase) DelMessageByID(id int) (err error) {
u.mu.Unlock()
return
}
// MonthlyAPIVisit counts the api visit history
type MonthlyAPIVisit struct {
YM uint32 // YM is yyyymm
Count uint32 // visit count this mounth
}
// VisitAPI increases count of this mounth by 1
func (u *UserDatabase) VisitAPI() {
now := time.Now()
ym := uint32(now.Year())*100 + uint32(now.Month())
var v MonthlyAPIVisit
u.mu.Lock()
defer u.mu.Unlock()
_ = u.db.Find(UserTableMonthlyAPIVisit, &v, "WHERE YM="+strconv.FormatUint(uint64(ym), 10))
v.YM = ym
v.Count++
err := u.db.Insert(UserTableMonthlyAPIVisit, &v)
if err != nil {
logrus.Warnln("[global.user] insert visit error:", err)
}
}
// GetAnnualAPIVisitCount get the latest 12 mounths' count
func (u *UserDatabase) GetAnnualAPIVisitCount() (cnts [12]uint32) {
var v MonthlyAPIVisit
var yms [12]uint32
now := time.Now()
y100 := uint32(now.Year()) * 100
py100 := uint32(now.Year()-1) * 100
nm := int(now.Month())
for i := 0; i < nm; i++ {
yms[i] = y100 + uint32(i+1)
}
for i := nm; i < 12; i++ {
yms[i] = py100 + uint32(i+1)
}
u.mu.RLock()
defer u.mu.RUnlock()
i := 0
for _, ym := range yms {
_ = u.db.Find(UserTableMonthlyAPIVisit, &v, "WHERE YM="+strconv.FormatUint(uint64(ym), 10))
cnts[i] = v.Count
i++
}
return
}

View File

@@ -33,6 +33,7 @@ func UploadHandler(w http.ResponseWriter, r *http.Request) {
writeresult(w, codeError, nil, errInvalidToken.Error(), typeError)
return
}
global.UserDB.VisitAPI()
ff, h, err := r.FormFile("avatar")
if err == nil {
defer ff.Close()