Skip to content

Commit 4bedd07

Browse files
committed
Add stats command
1 parent 281bb59 commit 4bedd07

6 files changed

Lines changed: 106 additions & 9 deletions

File tree

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ module github.com/DataManager-Go/DataManagerServer
33
go 1.14
44

55
require (
6-
github.com/DataManager-Go/libdatamanager v1.3.6
6+
github.com/DataManager-Go/libdatamanager v1.3.7
77
github.com/JojiiOfficial/configService v0.0.0-20200219132202-6e71512e2e28
88
github.com/JojiiOfficial/gaw v1.2.8
99
github.com/JojiiOfficial/shred v1.2.1

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
22
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
3-
github.com/DataManager-Go/libdatamanager v1.3.6 h1:+hOGZecSTpdskGgo045hfFWqe97hSkHX4EVzN1EyuVI=
4-
github.com/DataManager-Go/libdatamanager v1.3.6/go.mod h1:DjxzXo2LkUjUWk6ihkRpdnGkm3jmKC31oNO0KqmgrTc=
3+
github.com/DataManager-Go/libdatamanager v1.3.7 h1:EzS4jlomalvEE8nNZFLFEdUuwZCm1GmlhhY7l0FupQ4=
4+
github.com/DataManager-Go/libdatamanager v1.3.7/go.mod h1:DjxzXo2LkUjUWk6ihkRpdnGkm3jmKC31oNO0KqmgrTc=
55
github.com/JojiiOfficial/configService v0.0.0-20200219132202-6e71512e2e28 h1:nYoIExG+Z/gSLS9Jbpu6lnrh+m6e9gTxQfGhanTsExE=
66
github.com/JojiiOfficial/configService v0.0.0-20200219132202-6e71512e2e28/go.mod h1:j1kHFoYWAbLRPE5nyAAtODwUc0xwd2+ifPZ3uCAgv/g=
77
github.com/JojiiOfficial/gaw v1.2.8 h1:crLd2hrRvTlCClZDtwqnr8AoVKs3uQAk8B2AdOfUCsg=

handlers/FileHandler.go

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -641,8 +641,3 @@ func FileHandler(handlerData web.HandlerData, w http.ResponseWriter, r *http.Req
641641

642642
return nil
643643
}
644-
645-
// Stats for user
646-
func Stats(handlerData web.HandlerData, w http.ResponseWriter, r *http.Request) error {
647-
return nil
648-
}

handlers/Router.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ var (
8080
Route{
8181
Name: "stats",
8282
Pattern: "/user/stats",
83-
Method: GetMethod,
83+
Method: POSTMethod,
8484
HandlerFunc: Stats,
8585
HandlerType: sessionRequest,
8686
},

handlers/UserHandler.go

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,3 +77,56 @@ func Register(handlerData web.HandlerData, w http.ResponseWriter, r *http.Reques
7777

7878
return nil
7979
}
80+
81+
// Stats for a user
82+
func Stats(handlerData web.HandlerData, w http.ResponseWriter, r *http.Request) error {
83+
var request libdm.StatsRequestStruct
84+
if !readRequestLimited(w, r, &request, handlerData.Config.Webserver.MaxRequestBodyLength) {
85+
return nil
86+
}
87+
88+
// With deleted
89+
totalFileCount, err := handlerData.User.GetTotalFileCount(handlerData.Db)
90+
if err != nil {
91+
return err
92+
}
93+
94+
// Without deleted
95+
fileCount, err := handlerData.User.GetFileCount(handlerData.Db)
96+
if err != nil {
97+
return err
98+
}
99+
100+
totalFileSize, err := handlerData.User.GetTotalFilesize(handlerData.Db)
101+
if err != nil {
102+
return err
103+
}
104+
105+
namespaceCount, err := handlerData.User.GetNamespaceCount(handlerData.Db)
106+
if err != nil {
107+
return err
108+
}
109+
110+
tagCount, err := handlerData.User.GetTagCount(handlerData.Db)
111+
if err != nil {
112+
return err
113+
}
114+
115+
groupCount, err := handlerData.User.GetGroupCount(handlerData.Db)
116+
if err != nil {
117+
return err
118+
}
119+
120+
respones := libdm.StatsResponse{
121+
FilesUploaded: totalFileCount,
122+
FileCount: fileCount,
123+
DeletedFiles: (totalFileCount - fileCount),
124+
NamespaceCount: namespaceCount,
125+
GroupCount: groupCount,
126+
TagCount: tagCount,
127+
TotalFileSize: totalFileSize,
128+
}
129+
130+
sendResponse(w, libdm.ResponseSuccess, "", respones)
131+
return nil
132+
}

models/User.go

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,3 +158,52 @@ func (user *User) GetAllGroups(db *gorm.DB) ([]Group, error) {
158158

159159
return groups, err
160160
}
161+
162+
// GetNamespaceCount return count of users namespaces
163+
func (user *User) GetNamespaceCount(db *gorm.DB) (int64, error) {
164+
var c int64
165+
return c, db.Model(Namespace{}).Where(&Namespace{UserID: user.ID}).Count(&c).Error
166+
}
167+
168+
// GetTotalFileCount return total count of users files (with deletet files)
169+
func (user *User) GetTotalFileCount(db *gorm.DB) (int64, error) {
170+
var c int64
171+
return c, db.Unscoped().Model(File{}).Where(&File{UserID: user.ID}).Count(&c).Error
172+
}
173+
174+
// GetFileCount return count of users files (without deleted files)
175+
func (user *User) GetFileCount(db *gorm.DB) (int64, error) {
176+
var c int64
177+
return c, db.Model(File{}).Where(&File{UserID: user.ID}).Count(&c).Error
178+
}
179+
180+
// GetTotalFilesize return size of all users files
181+
func (user *User) GetTotalFilesize(db *gorm.DB) (int64, error) {
182+
var c int64
183+
184+
rows, err := db.Table("files").Select("sum(file_size)").Where(&File{UserID: user.ID}).Rows()
185+
if err != nil {
186+
return 0, err
187+
}
188+
189+
for rows.Next() {
190+
err := rows.Scan(&c)
191+
if err != nil {
192+
return 0, err
193+
}
194+
}
195+
196+
return c, nil
197+
}
198+
199+
// GetTagCount for user
200+
func (user *User) GetTagCount(db *gorm.DB) (int64, error) {
201+
var c int64
202+
return c, db.Model(Tag{}).Where(&Tag{UserID: user.ID}).Distinct("Name").Count(&c).Error
203+
}
204+
205+
// GetGroupCount for user
206+
func (user *User) GetGroupCount(db *gorm.DB) (int64, error) {
207+
var c int64
208+
return c, db.Model(Group{}).Where(&Group{UserID: user.ID}).Distinct("Name").Count(&c).Error
209+
}

0 commit comments

Comments
 (0)