oss/lib/user_qos.go (155 lines of code) (raw):
package lib
import (
"encoding/xml"
"fmt"
"os"
"strings"
)
var specChineseUserQos = SpecText{
synopsisText: "查询用户的qos配置",
paramText: "[local_file] [options]",
syntaxText: `
ossutil user-qos --method get [local_file] [options]
`,
detailHelpText: `
user-qos命令通过设置method选项值为get可以查询用户的qos配置
用法:
该命令只有一种用法:
1) ossutil user-qos --method get [local_xml_file] [options]
这个命令查询用户的qos配置,如果输入参数local_xml_file,qos配置将输出到该文件,否则输出到屏幕上
`,
sampleText: `
1) 查询用户的qos配置,结果输出到标准输出
ossutil user-qos --method get
2) 查询用户的qos配置,结果输出到本地文件
ossutil user-qos --method get local_xml_file
`,
}
var specEnglishUserQos = SpecText{
synopsisText: "Get user's qos configuration",
paramText: "[local_file] [options]",
syntaxText: `
ossutil user-qos --method get [local_xml_file] [options]
`,
detailHelpText: `
user-qos command can get the user's qos configuration by set method option value to get
Usage:
There are only one usage for this command:
1) ossutil user-qos --method get [local_xml_file] [options]
The command gets the user's qos configuration
If you input parameter local_xml_file,the configuration will be output to local_xml_file
If you don't input parameter local_xml_file,the configuration will be output to stdout
`,
sampleText: `
1) get user's qos configuration to stdout
ossutil user-qos --method get
2) get user's qos configuration to local file
ossutil user-qos --method get local_xml_file
`,
}
type UserQosCommand struct {
command Command
}
var userQosCommand = UserQosCommand{
command: Command{
name: "user-qos",
nameAlias: []string{"user-qos"},
minArgc: 0,
maxArgc: 1,
specChinese: specChineseUserQos,
specEnglish: specEnglishUserQos,
group: GroupTypeNormalCommand,
validOptionNames: []string{
OptionConfigFile,
OptionEndpoint,
OptionAccessKeyID,
OptionAccessKeySecret,
OptionSTSToken,
OptionProxyHost,
OptionProxyUser,
OptionProxyPwd,
OptionLogLevel,
OptionMethod,
OptionPassword,
OptionMode,
OptionECSRoleName,
OptionTokenTimeout,
OptionRamRoleArn,
OptionRoleSessionName,
OptionExternalId,
OptionReadTimeout,
OptionConnectTimeout,
OptionSTSRegion,
OptionSkipVerifyCert,
OptionUserAgent,
OptionSignVersion,
OptionRegion,
OptionCloudBoxID,
OptionForcePathStyle,
},
},
}
// function for FormatHelper interface
func (uqc *UserQosCommand) formatHelpForWhole() string {
return uqc.command.formatHelpForWhole()
}
func (uqc *UserQosCommand) formatIndependHelp() string {
return uqc.command.formatIndependHelp()
}
// Init simulate inheritance, and polymorphism
func (uqc *UserQosCommand) Init(args []string, options OptionMapType) error {
return uqc.command.Init(args, options, uqc)
}
// RunCommand simulate inheritance, and polymorphism
func (uqc *UserQosCommand) RunCommand() error {
strMethod, _ := GetString(OptionMethod, uqc.command.options)
if strMethod == "" {
return fmt.Errorf("--method value is empty")
}
strMethod = strings.ToLower(strMethod)
if strMethod != "get" {
return fmt.Errorf("--method value must be get")
}
return uqc.GetUserQos()
}
func (uqc *UserQosCommand) confirm(str string) bool {
var val string
fmt.Printf(getClearStr(fmt.Sprintf("user qos: overwrite \"%s\"(y or N)? ", str)))
if _, err := fmt.Scanln(&val); err != nil || (strings.ToLower(val) != "yes" && strings.ToLower(val) != "y") {
return false
}
return true
}
func (uqc *UserQosCommand) GetUserQos() error {
client, err := uqc.command.ossClient("")
if err != nil {
return err
}
qosRes, err := client.GetUserQoSInfo()
if err != nil {
return err
}
output, err := xml.MarshalIndent(qosRes, " ", " ")
if err != nil {
return err
}
var outFile *os.File
if len(uqc.command.args) >= 1 {
fileName := uqc.command.args[0]
_, err = os.Stat(fileName)
if err == nil {
bConitnue := uqc.confirm(fileName)
if !bConitnue {
return nil
}
}
outFile, err = os.OpenFile(fileName, os.O_CREATE|os.O_TRUNC|os.O_RDWR, 0660)
if err != nil {
return err
}
defer outFile.Close()
} else {
outFile = os.Stdout
}
outFile.Write([]byte(xml.Header))
outFile.Write(output)
fmt.Printf("\n\n")
return nil
}