in oss/lib/du.go [165:261]
func (duc *DuCommand) RunCommand() error {
// clear for go tests
duc.duOption.countTypeMap = make(map[string]int64)
duc.duOption.sizeTypeMap = make(map[string]int64)
duc.duOption.totalObjectCount = 0
duc.duOption.sumObjectSize = 0
duc.duOption.totalPartCount = 0
duc.duOption.sumPartSize = 0
blockSizeMap := make(map[string]int64)
blockSizeMap["byte"] = 1
blockSizeMap["KB"] = 1024
blockSizeMap["MB"] = 1024 * 1024
blockSizeMap["GB"] = 1024 * 1024 * 1024
blockSizeMap["TB"] = 1024 * 1024 * 1024 * 1024
encodingType, _ := GetString(OptionEncodingType, duc.command.options)
srcBucketUrL, err := GetCloudUrl(duc.command.args[0], encodingType)
if err != nil {
return err
}
payer, _ := GetString(OptionRequestPayer, duc.command.options)
if payer != "" {
if strings.ToLower(payer) != strings.ToLower(string(oss.Requester)) &&
strings.ToLower(payer) != strings.ToLower(string(oss.BucketOwner)) {
return fmt.Errorf("option payer value must be %s or %s",
strings.ToLower(string(oss.Requester)), strings.ToLower(string(oss.BucketOwner)))
}
}
allVersions, _ := GetBool(OptionAllversions, duc.command.options)
strBlockSize, _ := GetString(OptionBlockSize, duc.command.options)
strBlockSize = strings.ToUpper(strBlockSize)
if strBlockSize == "" {
strBlockSize = "byte"
}
if strBlockSize != "byte" && strBlockSize != "KB" && strBlockSize != "MB" && strBlockSize != "GB" && strBlockSize != "TB" {
return fmt.Errorf("-B value must be KB, MB, GB or TB")
}
duc.duOption.displayUnit = strBlockSize
duc.duOption.blockSize = blockSizeMap[strBlockSize]
duc.duOption.bucketName = srcBucketUrL.bucket
duc.duOption.object = srcBucketUrL.object
duc.duOption.payer = payer
bucket, err := duc.command.ossBucket(duc.duOption.bucketName)
if err != nil {
return err
}
// first:get all object size
if allVersions {
err = duc.getAllObjectVersionsSize(bucket)
} else {
err = duc.getAllObjectSize(bucket)
}
if err != nil {
return err
}
printHeader := false
for k, v := range duc.duOption.countTypeMap {
if !printHeader {
fmt.Printf("\r ")
fmt.Printf("\r%-14s\t%-20s\t%-30s\n", "storage class", "object count", "sum size(byte)")
fmt.Printf("----------------------------------------------------------\n")
printHeader = true
}
fmt.Printf("%-14s\t%-20d\t%-30d\n", k, v, duc.duOption.sizeTypeMap[k])
}
if !printHeader {
fmt.Printf("\r")
} else {
fmt.Printf("----------------------------------------------------------\n")
}
fmt.Printf("%-20s%-20d\t%-23s%d\n", "total object count:", duc.duOption.totalObjectCount, "total object sum size:", duc.duOption.sumObjectSize)
//second:get all part size
err = duc.GetAllPartSize(bucket)
if err != nil {
return err
}
fmt.Printf("\r ")
fmt.Printf("\r%-20s%-20d\t%-23s%d\n\n", "total part count:", duc.duOption.totalPartCount, "total part sum size:", duc.duOption.sumPartSize)
if duc.duOption.blockSize == int64(1) {
displaySize := (duc.duOption.sumObjectSize + duc.duOption.sumPartSize) / duc.duOption.blockSize
fmt.Printf("total du size(%s):%d\n", duc.duOption.displayUnit, displaySize)
} else {
displaySize := float64(duc.duOption.sumObjectSize+duc.duOption.sumPartSize) / float64(duc.duOption.blockSize)
fmt.Printf("total du size(%s):%.4f\n", duc.duOption.displayUnit, displaySize)
}
return nil
}