157 lines
4.4 KiB
Go
157 lines
4.4 KiB
Go
package main
|
|
|
|
import (
|
|
"flag"
|
|
"fmt"
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
// paramConfig 设置并返回配置文件路径的命令行参数。
|
|
// 该函数接收一个 flag.FlagSet 指针作为参数,用于注册 "-config" 标志,
|
|
// 默认值为 "cfg.toml",返回存储配置文件路径的字符串指针。
|
|
func paramConfig(fs *flag.FlagSet) *string {
|
|
return fs.String("config", "cfg.toml", "Config file.")
|
|
}
|
|
func paramMap(fs *flag.FlagSet) *string {
|
|
return fs.String("map", "", "target map setting")
|
|
}
|
|
|
|
func paramSourcePath(fs *flag.FlagSet) *string {
|
|
return fs.String("source", "", "Source path or filename")
|
|
}
|
|
|
|
func paramSourceConvertedPath(fs *flag.FlagSet) *string {
|
|
return fs.String("source", "", "Source path of the converted files")
|
|
}
|
|
|
|
func paramTaskDesc(fs *flag.FlagSet) *string {
|
|
return fs.String("desc", "", "Task description")
|
|
}
|
|
|
|
func paramDestPath(fs *flag.FlagSet) *string {
|
|
return fs.String("dest", "", "Destination path or filename")
|
|
}
|
|
|
|
func paramOutputHashFile(fs *flag.FlagSet) *string {
|
|
return fs.String("hashfile", "", "Output hash file")
|
|
}
|
|
|
|
func paramInputHashFile(fs *flag.FlagSet) *string {
|
|
return fs.String("hashfile", "", "Input hash file")
|
|
}
|
|
|
|
func paramFilterStatus(fs *flag.FlagSet) *string {
|
|
return fs.String("status", "", "Filter status. enums 'all', 'waiting', 'running', 'success', 'fail', 'deleted'")
|
|
}
|
|
|
|
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 paramSha256(fs *flag.FlagSet) *string {
|
|
return fs.String("sha256", "", "Task SHA256 hash")
|
|
}
|
|
|
|
func paramBatchSize(fs *flag.FlagSet) *uint {
|
|
return fs.Uint("batchsize", 10000, "Batch size to sync")
|
|
}
|
|
|
|
func paramBlockSize(fs *flag.FlagSet) *string {
|
|
return fs.String("blocksize", "50M", "Block size to make hash. using size mode K, M, G, T")
|
|
}
|
|
|
|
func paramClear(fs *flag.FlagSet) *bool {
|
|
return fs.Bool("clear", false, "Clear all data before write")
|
|
}
|
|
|
|
func paramDataSpaceId(fs *flag.FlagSet) *string {
|
|
return fs.String("ds", "", "Data space ID")
|
|
}
|
|
|
|
func paramTargets(fs *flag.FlagSet) *string {
|
|
return fs.String("targets", "", "Target IDs. Use commas to separate multiple IDs")
|
|
}
|
|
|
|
func paramListBinds(fs *flag.FlagSet) *bool {
|
|
return fs.Bool("b", false, "List Binds")
|
|
}
|
|
|
|
func paramTarget(fs *flag.FlagSet) *string {
|
|
return fs.String("target", "", "Target ID")
|
|
}
|
|
|
|
func paramAccount(fs *flag.FlagSet) *int64 {
|
|
return fs.Int64("account", 0, "Advertiser ID")
|
|
}
|
|
|
|
func paramAccounts(fs *flag.FlagSet) *string {
|
|
return fs.String("accounts", "", "Advertiser IDs. Use commas to separate multiple IDs")
|
|
}
|
|
|
|
func paramAds(fs *flag.FlagSet) *string {
|
|
return fs.String("ads", "", "AdGroup IDs. Use commas to separate multiple IDs")
|
|
}
|
|
|
|
func paramIdType(fs *flag.FlagSet) *int {
|
|
return fs.Int("idtype", 0, "ID Type. empty is Automatic matching, 1=AdGroup, 3=Account")
|
|
}
|
|
|
|
func paramIDs(fs *flag.FlagSet) *string {
|
|
return fs.String("ids", "", "IDs for delete. Use commas to separate multiple IDs")
|
|
}
|
|
|
|
func paramLua(fs *flag.FlagSet) *string {
|
|
return fs.String("lua", "", "LUA file name")
|
|
}
|
|
|
|
func paramDid(fs *flag.FlagSet) *string {
|
|
return fs.String("did", "", "device md5 (lower case)")
|
|
}
|
|
|
|
func paramOS(fs *flag.FlagSet) *uint {
|
|
return fs.Uint("os", 2, "1=iOS, 2=Android, default=2")
|
|
}
|
|
|
|
// 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)
|
|
}
|
|
}
|