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:
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user