Skip to content

Commit a2fc38b

Browse files
authored
perf(disk-usage): concurrently get details (#1326)
1 parent e0414e7 commit a2fc38b

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

55 files changed

+837
-225
lines changed

drivers/115/driver.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,4 +245,17 @@ func (d *Pan115) DeleteOfflineTasks(ctx context.Context, hashes []string, delete
245245
return d.client.DeleteOfflineTasks(hashes, deleteFiles)
246246
}
247247

248+
func (d *Pan115) GetDetails(ctx context.Context) (*model.StorageDetails, error) {
249+
info, err := d.client.GetInfo()
250+
if err != nil {
251+
return nil, err
252+
}
253+
return &model.StorageDetails{
254+
DiskUsage: model.DiskUsage{
255+
TotalSpace: uint64(info.SpaceInfo.AllTotal.Size),
256+
FreeSpace: uint64(info.SpaceInfo.AllRemain.Size),
257+
},
258+
}, nil
259+
}
260+
248261
var _ driver.Driver = (*Pan115)(nil)

drivers/123/driver.go

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,6 @@ func (d *Pan123) Link(ctx context.Context, file model.Obj, args model.LinkArgs)
7474
"type": f.Type,
7575
}
7676
resp, err := d.Request(DownloadInfo, http.MethodPost, func(req *resty.Request) {
77-
7877
req.SetBody(data)
7978
}, nil)
8079
if err != nil {
@@ -254,4 +253,18 @@ func (d *Pan123) APIRateLimit(ctx context.Context, api string) error {
254253
return limiter.Wait(ctx)
255254
}
256255

256+
func (d *Pan123) GetDetails(ctx context.Context) (*model.StorageDetails, error) {
257+
userInfo, err := d.getUserInfo(ctx)
258+
if err != nil {
259+
return nil, err
260+
}
261+
total := userInfo.Data.SpacePermanent + userInfo.Data.SpaceTemp
262+
return &model.StorageDetails{
263+
DiskUsage: model.DiskUsage{
264+
TotalSpace: total,
265+
FreeSpace: total - userInfo.Data.SpaceUsed,
266+
},
267+
}, nil
268+
}
269+
257270
var _ driver.Driver = (*Pan123)(nil)

drivers/123/types.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,3 +122,14 @@ type S3PreSignedURLs struct {
122122
PreSignedUrls map[string]string `json:"presignedUrls"`
123123
} `json:"data"`
124124
}
125+
126+
type UserInfoResp struct {
127+
Data struct {
128+
Uid int64 `json:"UID"`
129+
Nickname string `json:"Nickname"`
130+
SpaceUsed uint64 `json:"SpaceUsed"`
131+
SpacePermanent uint64 `json:"SpacePermanent"`
132+
SpaceTemp uint64 `json:"SpaceTemp"`
133+
FileCount int `json:"FileCount"`
134+
} `json:"data"`
135+
}

drivers/123/util.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ const (
4343
S3Auth = MainApi + "/file/s3_upload_object/auth"
4444
UploadCompleteV2 = MainApi + "/file/upload_complete/v2"
4545
S3Complete = MainApi + "/file/s3_complete_multipart_upload"
46-
//AuthKeySalt = "8-8D$sL8gPjom7bk#cY"
46+
// AuthKeySalt = "8-8D$sL8gPjom7bk#cY"
4747
)
4848

4949
func signPath(path string, os string, version string) (k string, v string) {
@@ -282,3 +282,14 @@ func (d *Pan123) getFiles(ctx context.Context, parentId string, name string) ([]
282282
}
283283
return res, nil
284284
}
285+
286+
func (d *Pan123) getUserInfo(ctx context.Context) (*UserInfoResp, error) {
287+
var resp UserInfoResp
288+
_, err := d.Request(UserInfo, http.MethodGet, func(req *resty.Request) {
289+
req.SetContext(ctx)
290+
}, &resp)
291+
if err != nil {
292+
return nil, err
293+
}
294+
return &resp, nil
295+
}

drivers/123_open/driver.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ func (d *Open123) Link(ctx context.Context, file model.Obj, args model.LinkArgs)
8484
}, nil
8585
}
8686

87-
uid, err := d.getUID()
87+
uid, err := d.getUID(ctx)
8888
if err != nil {
8989
return nil, err
9090
}
@@ -215,7 +215,7 @@ func (d *Open123) Put(ctx context.Context, dstDir model.Obj, file model.FileStre
215215
}
216216

217217
func (d *Open123) GetDetails(ctx context.Context) (*model.StorageDetails, error) {
218-
userInfo, err := d.getUserInfo()
218+
userInfo, err := d.getUserInfo(ctx)
219219
if err != nil {
220220
return nil, err
221221
}
@@ -229,5 +229,7 @@ func (d *Open123) GetDetails(ctx context.Context) (*model.StorageDetails, error)
229229
}, nil
230230
}
231231

232-
var _ driver.Driver = (*Open123)(nil)
233-
var _ driver.PutResult = (*Open123)(nil)
232+
var (
233+
_ driver.Driver = (*Open123)(nil)
234+
_ driver.PutResult = (*Open123)(nil)
235+
)

drivers/123_open/util.go

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package _123_open
22

33
import (
4+
"context"
45
"crypto/md5"
56
"encoding/json"
67
"errors"
@@ -18,7 +19,7 @@ import (
1819
log "github.com/sirupsen/logrus"
1920
)
2021

21-
var ( //不同情况下获取的AccessTokenQPS限制不同 如下模块化易于拓展
22+
var ( // 不同情况下获取的AccessTokenQPS限制不同 如下模块化易于拓展
2223
Api = "https://open-api.123pan.com"
2324

2425
AccessToken = InitApiInfo(Api+"/api/v1/access_token", 1)
@@ -82,7 +83,6 @@ func (d *Open123) Request(apiInfo *ApiInfo, method string, callback base.ReqCall
8283
return nil, errors.New(baseResp.Message)
8384
}
8485
}
85-
8686
}
8787

8888
func (d *Open123) flushAccessToken() error {
@@ -148,21 +148,23 @@ func (d *Open123) SignURL(originURL, privateKey string, uid uint64, validDuratio
148148
return objURL.String(), nil
149149
}
150150

151-
func (d *Open123) getUserInfo() (*UserInfoResp, error) {
151+
func (d *Open123) getUserInfo(ctx context.Context) (*UserInfoResp, error) {
152152
var resp UserInfoResp
153153

154-
if _, err := d.Request(UserInfo, http.MethodGet, nil, &resp); err != nil {
154+
if _, err := d.Request(UserInfo, http.MethodGet, func(req *resty.Request) {
155+
req.SetContext(ctx)
156+
}, &resp); err != nil {
155157
return nil, err
156158
}
157159

158160
return &resp, nil
159161
}
160162

161-
func (d *Open123) getUID() (uint64, error) {
163+
func (d *Open123) getUID(ctx context.Context) (uint64, error) {
162164
if d.UID != 0 {
163165
return d.UID, nil
164166
}
165-
resp, err := d.getUserInfo()
167+
resp, err := d.getUserInfo(ctx)
166168
if err != nil {
167169
return 0, err
168170
}
@@ -184,7 +186,6 @@ func (d *Open123) getFiles(parentFileId int64, limit int, lastFileId int64) (*Fi
184186
"searchData": "",
185187
})
186188
}, &resp)
187-
188189
if err != nil {
189190
return nil, err
190191
}

drivers/139/driver.go

Lines changed: 47 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,8 @@ func (d *Yun139) Init(ctx context.Context) error {
5454
"userInfo": base.Json{
5555
"userType": 1,
5656
"accountType": 1,
57-
"accountName": d.Account},
57+
"accountName": d.Account,
58+
},
5859
"modAddrType": 1,
5960
}, &resp)
6061
if err != nil {
@@ -732,7 +733,7 @@ func (d *Yun139) Put(ctx context.Context, dstDir model.Obj, stream model.FileStr
732733
"manualRename": 2,
733734
"operation": 0,
734735
"path": path.Join(dstDir.GetPath(), dstDir.GetID()),
735-
"seqNo": random.String(32), //序列号不能为空
736+
"seqNo": random.String(32), // 序列号不能为空
736737
"totalSize": reportSize,
737738
"uploadContentList": []base.Json{{
738739
"contentName": stream.GetName(),
@@ -834,4 +835,48 @@ func (d *Yun139) Other(ctx context.Context, args model.OtherArgs) (interface{},
834835
}
835836
}
836837

838+
func (d *Yun139) GetDetails(ctx context.Context) (*model.StorageDetails, error) {
839+
if d.UserDomainID == "" {
840+
return nil, errs.NotImplement
841+
}
842+
var total, free uint64
843+
if d.isFamily() {
844+
diskInfo, err := d.getFamilyDiskInfo(ctx)
845+
if err != nil {
846+
return nil, err
847+
}
848+
totalMb, err := strconv.ParseUint(diskInfo.Data.DiskSize, 10, 64)
849+
if err != nil {
850+
return nil, fmt.Errorf("failed convert disk size into integer: %+v", err)
851+
}
852+
usedMb, err := strconv.ParseUint(diskInfo.Data.UsedSize, 10, 64)
853+
if err != nil {
854+
return nil, fmt.Errorf("failed convert used size into integer: %+v", err)
855+
}
856+
total = totalMb * 1024 * 1024
857+
free = total - (usedMb * 1024 * 1024)
858+
} else {
859+
diskInfo, err := d.getPersonalDiskInfo(ctx)
860+
if err != nil {
861+
return nil, err
862+
}
863+
totalMb, err := strconv.ParseUint(diskInfo.Data.DiskSize, 10, 64)
864+
if err != nil {
865+
return nil, fmt.Errorf("failed convert disk size into integer: %+v", err)
866+
}
867+
freeMb, err := strconv.ParseUint(diskInfo.Data.FreeDiskSize, 10, 64)
868+
if err != nil {
869+
return nil, fmt.Errorf("failed convert free size into integer: %+v", err)
870+
}
871+
total = totalMb * 1024 * 1024
872+
free = freeMb * 1024 * 1024
873+
}
874+
return &model.StorageDetails{
875+
DiskUsage: model.DiskUsage{
876+
TotalSpace: total,
877+
FreeSpace: free,
878+
},
879+
}, nil
880+
}
881+
837882
var _ driver.Driver = (*Yun139)(nil)

drivers/139/meta.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ type Addition struct {
1111
driver.RootID
1212
Type string `json:"type" type:"select" options:"personal_new,family,group,personal" default:"personal_new"`
1313
CloudID string `json:"cloud_id"`
14+
UserDomainID string `json:"user_domain_id" help:"ud_id in Cookie, fill in to show disk usage"`
1415
CustomUploadPartSize int64 `json:"custom_upload_part_size" type:"number" default:"0" help:"0 for auto"`
1516
ReportRealSize bool `json:"report_real_size" type:"bool" default:"true" help:"Enable to report the real file size during upload"`
1617
UseLargeThumbnail bool `json:"use_large_thumbnail" type:"bool" default:"false" help:"Enable to use large thumbnail for images"`

drivers/139/types.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -312,3 +312,20 @@ type RefreshTokenResp struct {
312312
AccessToken string `xml:"accessToken"`
313313
Desc string `xml:"desc"`
314314
}
315+
316+
type PersonalDiskInfoResp struct {
317+
BaseResp
318+
Data struct {
319+
FreeDiskSize string `json:"freeDiskSize"`
320+
DiskSize string `json:"diskSize"`
321+
IsInfinitePicStorage *bool `json:"isInfinitePicStorage"`
322+
} `json:"data"`
323+
}
324+
325+
type FamilyDiskInfoResp struct {
326+
BaseResp
327+
Data struct {
328+
UsedSize string `json:"usedSize"`
329+
DiskSize string `json:"diskSize"`
330+
} `json:"data"`
331+
}

0 commit comments

Comments
 (0)