增加命令功能
This commit is contained in:
@@ -2,31 +2,50 @@ package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func paramConfig(fs *flag.FlagSet) *string {
|
||||
return fs.String("config", "cfg.toml", "Config file.")
|
||||
}
|
||||
func paramTargets(fs *flag.FlagSet) *string {
|
||||
return fs.String("targets", "", "target setting")
|
||||
func paramMap(fs *flag.FlagSet) *string {
|
||||
return fs.String("map", "", "target map setting")
|
||||
}
|
||||
|
||||
func paramSourcePath(fs *flag.FlagSet) *string {
|
||||
return fs.String("source", "", "Data path source for write command.")
|
||||
return fs.String("source", "", "Source path or filename")
|
||||
}
|
||||
|
||||
func paramDestPath(fs *flag.FlagSet) *string {
|
||||
return fs.String("dest", "", "Data path destination for write command.")
|
||||
return fs.String("dest", "", "Destination path or filename")
|
||||
}
|
||||
|
||||
func paramAppid(fs *flag.FlagSet) *string {
|
||||
return fs.String("appid", "", "Wechat appid")
|
||||
}
|
||||
|
||||
func paramUserids(fs *flag.FlagSet) *string {
|
||||
return fs.String("userids", "", "Device ID or Wechat UserID, separated by comma")
|
||||
}
|
||||
|
||||
func paramBatchSize(fs *flag.FlagSet) *uint {
|
||||
return fs.Uint("batchsize", 10000, "Batch size to sync")
|
||||
}
|
||||
|
||||
func paramBlockSize(fs *flag.FlagSet) uint64 {
|
||||
bsize := fs.String("blocksize", "50M", "Block size to make hash. using size mode K, M, G, T")
|
||||
num, err := ParseByteSize(*bsize)
|
||||
if err != nil {
|
||||
fmt.Println("Error parsing block size", "err", err)
|
||||
fmt.Println("Using default 50M")
|
||||
num = 50 * 1024 * 1024
|
||||
|
||||
}
|
||||
return num
|
||||
}
|
||||
|
||||
func paramAsync(fs *flag.FlagSet) *bool {
|
||||
return fs.Bool("async", false, "Async mode")
|
||||
}
|
||||
@@ -34,3 +53,55 @@ func paramAsync(fs *flag.FlagSet) *bool {
|
||||
func paramClear(fs *flag.FlagSet) *bool {
|
||||
return fs.Bool("clear", false, "Clear all data before write")
|
||||
}
|
||||
|
||||
// ParseByteSize 解析字节大小字符串为字节数
|
||||
func ParseByteSize(sizeStr string) (uint64, error) {
|
||||
sizeStr = strings.TrimSpace(sizeStr)
|
||||
unit := ""
|
||||
numStr := sizeStr
|
||||
// 提取单位
|
||||
if len(sizeStr) > 1 && (sizeStr[len(sizeStr)-1] == 'B' || sizeStr[len(sizeStr)-1] == 'b') {
|
||||
unit = string(sizeStr[len(sizeStr)-2:])
|
||||
numStr = sizeStr[:len(sizeStr)-2]
|
||||
} else if len(sizeStr) > 0 && (sizeStr[len(sizeStr)-1] >= 'A' && sizeStr[len(sizeStr)-1] <= 'Z' ||
|
||||
sizeStr[len(sizeStr)-1] >= 'a' && sizeStr[len(sizeStr)-1] <= 'z') {
|
||||
unit = string(sizeStr[len(sizeStr)-1])
|
||||
numStr = sizeStr[:len(sizeStr)-1]
|
||||
}
|
||||
|
||||
// 解析数字部分
|
||||
num, err := strconv.ParseFloat(numStr, 64)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
// 根据单位计算字节数
|
||||
switch strings.ToUpper(unit) {
|
||||
case "":
|
||||
return uint64(num), nil
|
||||
case "K", "KB":
|
||||
return uint64(num * 1024), nil
|
||||
case "M", "MB":
|
||||
return uint64(num * 1024 * 1024), nil
|
||||
case "G", "GB":
|
||||
return uint64(num * 1024 * 1024 * 1024), nil
|
||||
case "T", "TB":
|
||||
return uint64(num * 1024 * 1024 * 1024 * 1024), nil
|
||||
default:
|
||||
return 0, fmt.Errorf("unknown unit: %s", unit)
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
func main() {
|
||||
sizes := []string{"1K", "2M", "3G", "4T", "5"}
|
||||
for _, sizeStr := range sizes {
|
||||
size, err := ParseByteSize(sizeStr)
|
||||
if err != nil {
|
||||
fmt.Printf("Error parsing %s: %v\n", sizeStr, err)
|
||||
} else {
|
||||
fmt.Printf("%s = %d bytes\n", sizeStr, size)
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user