Skip to content

Commit 9a3432b

Browse files
authored
batchsign & batchstat support output to file (#403)
1 parent 4f8719b commit 9a3432b

File tree

18 files changed

+128
-49
lines changed

18 files changed

+128
-49
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ src/test/
1010
src/.qshell
1111
marker.go
1212
marker_test.go
13+
build.sh
14+
build_local.sh
1315

1416
# Folders
1517
_obj

cmd/root.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,15 @@ package cmd
22

33
import (
44
"fmt"
5+
"os"
6+
7+
"github.com/spf13/cobra"
8+
59
"github.com/qiniu/qshell/v2/docs"
610
"github.com/qiniu/qshell/v2/iqshell"
711
"github.com/qiniu/qshell/v2/iqshell/common/config"
812
"github.com/qiniu/qshell/v2/iqshell/common/data"
913
"github.com/qiniu/qshell/v2/iqshell/common/version"
10-
"github.com/spf13/cobra"
11-
"os"
1214
)
1315

1416
const (

cmd/rsbatch.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
package cmd
22

33
import (
4+
"github.com/spf13/cobra"
5+
46
"github.com/qiniu/qshell/v2/docs"
57
"github.com/qiniu/qshell/v2/iqshell"
68
"github.com/qiniu/qshell/v2/iqshell/storage/object/batch"
79
"github.com/qiniu/qshell/v2/iqshell/storage/object/operations"
8-
"github.com/spf13/cobra"
910
)
1011

1112
var batchStatCmdBuilder = func(cfg *iqshell.Config) *cobra.Command {
@@ -28,6 +29,7 @@ var batchStatCmdBuilder = func(cfg *iqshell.Config) *cobra.Command {
2829
setBatchCmdWorkerCountIncreasePeriodFlags(cmd, &info.BatchInfo)
2930
setBatchCmdSuccessExportFileFlags(cmd, &info.BatchInfo)
3031
setBatchCmdFailExportFileFlags(cmd, &info.BatchInfo)
32+
setBatchCmdResultExportFileFlags(cmd, &info.BatchInfo)
3133
setBatchCmdForceFlags(cmd, &info.BatchInfo)
3234
setBatchCmdEnableRecordFlags(cmd, &info.BatchInfo)
3335
setBatchCmdRecordRedoWhileErrorFlags(cmd, &info.BatchInfo)
@@ -257,6 +259,7 @@ var batchSignCmdBuilder = func(cfg *iqshell.Config) *cobra.Command {
257259
},
258260
}
259261
setBatchCmdInputFileFlags(cmd, &info.BatchInfo)
262+
setBatchCmdResultExportFileFlags(cmd, &info.BatchInfo)
260263
setBatchCmdEnableRecordFlags(cmd, &info.BatchInfo)
261264
setBatchCmdRecordRedoWhileErrorFlags(cmd, &info.BatchInfo)
262265
cmd.Flags().StringVarP(&info.Deadline, "deadline", "e", "3600", "deadline in seconds, default 3600")
@@ -340,6 +343,9 @@ func setBatchCmdOverwriteFlags(cmd *cobra.Command, info *batch.Info) {
340343
cmd.Flags().BoolVarP(&info.Overwrite, "overwrite", "w", false, "overwrite mode")
341344
_ = cmd.Flags().MarkShorthandDeprecated("overwrite", "deprecated and use --overwrite instead")
342345
}
346+
func setBatchCmdResultExportFileFlags(cmd *cobra.Command, info *batch.Info) {
347+
cmd.Flags().StringVarP(&info.ResultExportFilePath, "outfile", "o", "", "specifies the file path where the results is saved")
348+
}
343349

344350
func init() {
345351
registerLoader(rsBatchCmdLoader)

cmd_test/fop_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ func TestFopNoExistBucket(t *testing.T) {
3434

3535
func TestFopNoExistKey(t *testing.T) {
3636
_, errs := test.RunCmdWithError("pfop", test.Bucket, test.KeyNotExist, fopObjectValue)
37-
if !strings.Contains(errs, "invalid_param") {
37+
if !strings.Contains(errs, "NotFound") {
3838
t.Fail()
3939
}
4040
}

cmd_test/sign_test.go

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@
33
package cmd
44

55
import (
6-
"github.com/qiniu/qshell/v2/cmd_test/test"
6+
"path/filepath"
77
"testing"
8+
9+
"github.com/qiniu/qshell/v2/cmd_test/test"
810
)
911

1012
func TestBatchSign(t *testing.T) {
@@ -13,14 +15,32 @@ func TestBatchSign(t *testing.T) {
1315
t.Fatal("create batch sign config file error:", err)
1416
}
1517

16-
result, errs := test.RunCmdWithError("batchsign", "-i", path)
18+
resultDir, err := test.ResultPath()
19+
if err != nil {
20+
t.Fatal("get result dir error:", err)
21+
}
22+
23+
resultLogPath := filepath.Join(resultDir, "batch_result.txt")
24+
25+
result, errs := test.RunCmdWithError("batchsign",
26+
"-i", path,
27+
"--outfile", resultLogPath,
28+
)
1729
if len(errs) > 0 {
1830
t.Fail()
1931
}
2032

2133
if len(result) == 0 {
2234
t.Fail()
2335
}
36+
37+
defer func() {
38+
test.RemoveFile(resultLogPath)
39+
}()
40+
41+
if !test.IsFileHasContent(resultLogPath) {
42+
t.Fatal("batch result: output to file error: file empty")
43+
}
2444
}
2545

2646
func TestBatchSignDocument(t *testing.T) {

cmd_test/status_test.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,11 @@
33
package cmd
44

55
import (
6-
"github.com/qiniu/qshell/v2/cmd_test/test"
76
"path/filepath"
87
"strings"
98
"testing"
9+
10+
"github.com/qiniu/qshell/v2/cmd_test/test"
1011
)
1112

1213
func TestStatus(t *testing.T) {
@@ -76,6 +77,7 @@ func TestBatchStatus(t *testing.T) {
7677

7778
successLogPath := filepath.Join(resultDir, "batch_success.txt")
7879
failLogPath := filepath.Join(resultDir, "batch_fail.txt")
80+
resultLogPath := filepath.Join(resultDir, "batch_result.txt")
7981

8082
path, err := test.CreateFileWithContent("batch_status.txt", batchConfig)
8183
if err != nil {
@@ -86,13 +88,15 @@ func TestBatchStatus(t *testing.T) {
8688
"-i", path,
8789
"--success-list", successLogPath,
8890
"--failure-list", failLogPath,
91+
"--outfile", resultLogPath,
8992
"--worker", "4",
9093
"--min-worker", "10",
9194
"--worker-count-increase-period", "50",
9295
"-y")
9396
defer func() {
9497
test.RemoveFile(successLogPath)
9598
test.RemoveFile(failLogPath)
99+
test.RemoveFile(resultLogPath)
96100
}()
97101

98102
if !test.IsFileHasContent(successLogPath) {
@@ -102,6 +106,10 @@ func TestBatchStatus(t *testing.T) {
102106
if !test.IsFileHasContent(failLogPath) {
103107
t.Fatal("batch result: fail log to file error: file empty")
104108
}
109+
110+
if !test.IsFileHasContent(resultLogPath) {
111+
t.Fatal("batch result: output to file error: file empty")
112+
}
105113
}
106114

107115
func TestBatchStatusDocument(t *testing.T) {

docs/batchsign.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ $ qshell batchsign --doc
2424
```
2525
<PublicUrl> // 资源外链
2626
```
27+
- -o/--outfile:指定一个文件,把签名结果导入到此文件中【可选】
2728
- -e/--deadline:接受一个过时的 deadline 参数,如果没有指定该参数,默认为 3600s 。【必选】
2829
- --enable-record:记录任务执行状态,当下次执行命令时会检测任务执行的状态并跳过已执行的任务。 【可选】
2930
- --record-redo-while-error:依赖于 --enable-record;命令重新执行时,命令中所有任务会从头到尾重新执行;每个任务执行前会根据记录先查看当前任务是否已经执行,如果任务已执行且失败,则再执行一次;默认为 false,当任务执行失败则跳过不再重新执行。 【可选】

docs/batchstat.md

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ $ qshell batchstat --doc
3030
- -y/--force:该选项控制工具的默认行为。默认情况下,对于批量操作,工具会要求使用者输入一个验证码,确认下要进行批量文件操作了,避免操作失误的发生。如果不需要这个验证码的提示过程可以使用此选项。【可选】
3131
- -s/--success-list:该选项指定一个文件,程序会把操作成功的资源信息导入到该文件;默认不导出。【可选】
3232
- -e/--failure-list:该选项指定一个文件,程序会把操作失败的资源信息加上错误信息导入该文件;默认不导出。【可选】
33+
- -o/--outfile:该选项指定一个文件,把 stat 结果导入到此文件中。注:输出的内容顺序和 input file 内容的顺序会有不同【可选】
3334
- -c/--worker:该选项可以定义 Batch 任务并发数;1 路并发单次操作对象数为 250 ,如果配置为 10 并发,则 10 路并发单次操作对象数为 2500,此值需要和七牛对您的操作上限相吻合,否则会出现非预期错误,正常情况不需要调节此值,如果需要请谨慎调节;默认为 4。【可选】
3435
- --min-worker:最小 Batch 任务并发数;当并发设置过高时,会触发超限错误,为了缓解此问题,qshell 会自动减小并发度,此值为减小的最低值。默认:1【可选】
3536
- --worker-count-increase-period:为了尽可能快的完成操作 qshell 会周期性尝试增加并发度,此值为尝试增加并发数的周期,单位:秒,最小 10,默认 60。【可选】
@@ -50,17 +51,24 @@ RclviFDHaQAUl3aL46jKRskUWbg=/FpwH76F3yfYmFKoPDjoSNWzeLKYp/000005.ts
5051

5152
- 使用如下命令进行批量查询
5253
```
53-
$ qshell batchstat 7qiniu -i listFile
54+
$ qshell batchstat 7qiniu --silence -y -i listFile
5455
```
5556

56-
- 输出 Key、Fsize、Hash、MimeType、PutTime 以 `\t` 分隔:
57+
- 输出 Key、Fsize、Hash、MimeType、PutTime、User`\t` 分隔:
5758
```
58-
RclviFDHaQAUl3aL46jKRskUWbg=/FpwH76F3yfYmFKoPDjoSNWzeLKYp/000000.ts 92308 Fk8Uf2SHbQ4S2-cXHINuRc_rooNA video/mp2t 15003760414606314
59-
RclviFDHaQAUl3aL46jKRskUWbg=/FpwH76F3yfYmFKoPDjoSNWzeLKYp/000001.ts 91556 FpJP2nfipuLVc6QGvvcb868Rd0pO video/mp2t 15003760414789673
60-
RclviFDHaQAUl3aL46jKRskUWbg=/FpwH76F3yfYmFKoPDjoSNWzeLKYp/000002.ts 92496 FvBjZPch6cf52t2x0ZQBngqS1KTp video/mp2t 15003760417159000
61-
RclviFDHaQAUl3aL46jKRskUWbg=/FpwH76F3yfYmFKoPDjoSNWzeLKYp/000003.ts 92308 FoEgsbzdrcLuj_Fo5FeTI3w1jFHJ video/mp2t 15003760419154144
62-
RclviFDHaQAUl3aL46jKRskUWbg=/FpwH76F3yfYmFKoPDjoSNWzeLKYp/000004.ts 92308 FkYNctlf1JOGcJa-WzWgxsqcBjX6 video/mp2t 15003760422258065
63-
RclviFDHaQAUl3aL46jKRskUWbg=/FpwH76F3yfYmFKoPDjoSNWzeLKYp/000005.ts 92120 Fh4Fwhu3dMUGbd3jE5OmRtfVZLv4 video/mp2t 15003760423842522
59+
RclviFDHaQAUl3aL46jKRskUWbg=/FpwH76F3yfYmFKoPDjoSNWzeLKYp/000000.ts 92308 Fk8Uf2SHbQ4S2-cXHINuRc_rooNA video/mp2t 15003760414606314 0
60+
RclviFDHaQAUl3aL46jKRskUWbg=/FpwH76F3yfYmFKoPDjoSNWzeLKYp/000001.ts 91556 FpJP2nfipuLVc6QGvvcb868Rd0pO video/mp2t 15003760414789673 0
61+
RclviFDHaQAUl3aL46jKRskUWbg=/FpwH76F3yfYmFKoPDjoSNWzeLKYp/000002.ts 92496 FvBjZPch6cf52t2x0ZQBngqS1KTp video/mp2t 15003760417159000 0
62+
RclviFDHaQAUl3aL46jKRskUWbg=/FpwH76F3yfYmFKoPDjoSNWzeLKYp/000003.ts 92308 FoEgsbzdrcLuj_Fo5FeTI3w1jFHJ video/mp2t 15003760419154144 0
63+
RclviFDHaQAUl3aL46jKRskUWbg=/FpwH76F3yfYmFKoPDjoSNWzeLKYp/000004.ts 92308 FkYNctlf1JOGcJa-WzWgxsqcBjX6 video/mp2t 15003760422258065 0
64+
RclviFDHaQAUl3aL46jKRskUWbg=/FpwH76F3yfYmFKoPDjoSNWzeLKYp/000005.ts 92120 Fh4Fwhu3dMUGbd3jE5OmRtfVZLv4 video/mp2t 15003760423842522 0
65+
--------------- Batch Result ---------------
66+
Total: 6
67+
Success: 6
68+
Failure: 0
69+
Skipped: 0
70+
Duration: 1s
71+
--------------------------------------------
6472
```
6573

6674
# 注意

docs/expire.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,6 @@ $ qshell expire --doc
3131
# 示例
3232
修改 `if-pbl` 空间中 `qiniu.png` 图片的过期时间为:`3天后自动删除`
3333
```
34-
$ qshell chtype if-pbl qiniu.png 3
34+
$ qshell expire if-pbl qiniu.png 3
3535
```
3636
输入该命令,后该文件就已经被修改为 3 天后自动删除了。

iqshell/common/client/client.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,15 @@ var defaultClient = storage.Client{
1313
Transport: &http.Transport{
1414
Proxy: http.ProxyFromEnvironment,
1515
DialContext: (&net.Dialer{
16-
Timeout: 10 * time.Second,
17-
KeepAlive: 10 * time.Second,
16+
Timeout: 20 * time.Second,
17+
KeepAlive: 20 * time.Second,
1818
}).DialContext,
1919
ForceAttemptHTTP2: true,
20-
MaxIdleConns: 4000,
20+
MaxIdleConns: 2000,
2121
MaxIdleConnsPerHost: 1000,
2222
ResponseHeaderTimeout: 60 * time.Second,
23-
IdleConnTimeout: 10 * time.Second,
24-
TLSHandshakeTimeout: 10 * time.Second,
23+
IdleConnTimeout: 15 * time.Second,
24+
TLSHandshakeTimeout: 15 * time.Second,
2525
ExpectContinueTimeout: 1 * time.Second,
2626
},
2727
},

0 commit comments

Comments
 (0)