mirror of
https://hubproxy.babadafafafafa.cn/https://github.com/yunionio/cloudpods.git
synced 2026-09-20 08:03:53 +08:00
152 lines
5.5 KiB
Go
152 lines
5.5 KiB
Go
// Copyright 2019 Yunion
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
package compute
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
"os"
|
|
|
|
"yunion.io/x/jsonutils"
|
|
"yunion.io/x/pkg/util/fileutils"
|
|
"yunion.io/x/pkg/util/printutils"
|
|
|
|
"yunion.io/x/onecloud/cmd/climc/shell"
|
|
"yunion.io/x/onecloud/pkg/apis/compute"
|
|
"yunion.io/x/onecloud/pkg/mcclient"
|
|
modules "yunion.io/x/onecloud/pkg/mcclient/modules/compute"
|
|
computeoptions "yunion.io/x/onecloud/pkg/mcclient/options/compute"
|
|
)
|
|
|
|
func init() {
|
|
cmd := shell.NewResourceCmd(&modules.Buckets)
|
|
cmd.List(&computeoptions.BucketListOptions{})
|
|
cmd.GetProperty(&computeoptions.BucketGetPropertyOptions{})
|
|
cmd.Show(&computeoptions.BucketIdOptions{})
|
|
cmd.Perform("syncstatus", &computeoptions.BucketIdOptions{})
|
|
cmd.Update(&computeoptions.BucketUpdateOptions{})
|
|
cmd.Delete(&computeoptions.BucketIdOptions{})
|
|
cmd.Create(&computeoptions.BucketCreateOptions{})
|
|
cmd.GetWithCustomOptionShow("objects", func(data jsonutils.JSONObject, args shell.IGetOpt) {
|
|
listResult := printutils.ListResult{}
|
|
err := data.Unmarshal(&listResult)
|
|
if err != nil {
|
|
return
|
|
}
|
|
printList(&listResult, []string{})
|
|
}, &computeoptions.BucketListObjectsOptions{})
|
|
cmd.Perform("delete", &computeoptions.BucketDeleteObjectsOptions{})
|
|
cmd.Perform("makedir", &computeoptions.BucketMakeDirOptions{})
|
|
cmd.Perform("temp-url", &computeoptions.BucketPresignObjectsOptions{})
|
|
cmd.Perform("acl", &computeoptions.BucketSetAclOptions{})
|
|
cmd.GetWithCustomOptionShow("acl", func(data jsonutils.JSONObject, args shell.IGetOpt) {
|
|
printObject(data)
|
|
}, &computeoptions.BucketAclOptions{})
|
|
cmd.Perform("sync", &computeoptions.BucketSyncOptions{})
|
|
cmd.Perform("limit", &computeoptions.BucketLimitOptions{})
|
|
cmd.GetWithCustomOptionShow("access-info", func(data jsonutils.JSONObject, args shell.IGetOpt) {
|
|
printObject(data)
|
|
}, &computeoptions.BucketAccessInfoOptions{})
|
|
cmd.Perform("metadata", &computeoptions.BucketSetMetadataOptions{})
|
|
cmd.Perform("set-website", &computeoptions.BucketSetWebsiteOption{})
|
|
cmd.GetWithCustomOptionShow("website", func(data jsonutils.JSONObject, args shell.IGetOpt) {
|
|
printObject(data)
|
|
}, &computeoptions.BucketGetWebsiteConfOption{})
|
|
cmd.Perform("delete-website", &computeoptions.BucketDeleteWebsiteConfOption{})
|
|
cmd.Perform("set-cors", &computeoptions.BucketSetCorsOption{})
|
|
cmd.GetWithCustomOptionShow("cors", func(data jsonutils.JSONObject, args shell.IGetOpt) {
|
|
printObject(data)
|
|
}, &computeoptions.BucketGetCorsOption{})
|
|
cmd.Perform("delete-cors", &computeoptions.BucketDeleteCorsOption{})
|
|
cmd.Perform("set-referer", &computeoptions.BucketSetRefererOption{})
|
|
cmd.GetWithCustomOptionShow("referer", func(data jsonutils.JSONObject, args shell.IGetOpt) {
|
|
printObject(data)
|
|
}, &computeoptions.BucketGetRefererOption{})
|
|
cmd.GetWithCustomOptionShow("cdn-domain", func(data jsonutils.JSONObject, args shell.IGetOpt) {
|
|
printObject(data)
|
|
}, &computeoptions.BucketGetCdnDomainOption{})
|
|
cmd.GetWithCustomOptionShow("policy", func(data jsonutils.JSONObject, args shell.IGetOpt) {
|
|
printObject(data)
|
|
}, &computeoptions.BucketGetPolicyOption{})
|
|
cmd.Perform("set-policy", &computeoptions.BucketSetPolicyOption{})
|
|
cmd.Perform("delete-policy", &computeoptions.BucketDeletePolicyOption{})
|
|
|
|
R(&computeoptions.BucketUploadObjectsOptions{}, "bucket-object-upload", "Upload an object into a bucket", func(s *mcclient.ClientSession, args *computeoptions.BucketUploadObjectsOptions) error {
|
|
var body io.Reader
|
|
if len(args.Path) > 0 {
|
|
file, err := os.Open(args.Path)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer file.Close()
|
|
body = file
|
|
|
|
fileInfo, err := file.Stat()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
args.ContentLength = fileInfo.Size()
|
|
} else {
|
|
body = os.Stdin
|
|
}
|
|
|
|
if args.ContentLength < 0 {
|
|
return fmt.Errorf("required content-length")
|
|
}
|
|
|
|
meta := args.ObjectHeaderOptions.Options2Header()
|
|
|
|
err := modules.Buckets.Upload(s, args.ID, args.KEY, body, args.ContentLength, args.StorageClass, args.Acl, meta)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
})
|
|
|
|
R(&computeoptions.BucketPerfMonOptions{}, "bucket-perf-mon", "Bucket performance monitor", func(s *mcclient.ClientSession, args *computeoptions.BucketPerfMonOptions) error {
|
|
result, err := modules.Buckets.Get(s, args.ID, nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
bucketDetails := compute.BucketDetails{}
|
|
err = result.Unmarshal(&bucketDetails)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
bucket, err := modules.GetIBucket(s.GetContext(), s, &bucketDetails)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
payload, err := fileutils.GetSizeBytes(args.Payload, 1024)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
stats, err := modules.ProbeBucketStats(s.GetContext(), bucket, "test", int64(payload))
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
fmt.Printf("Upload delay %f ms throughput %f MB/s\n", stats.UploadDelayMs(), stats.UploadThroughputMbps(payload/1024/1024))
|
|
fmt.Printf("Download delay %f ms throughput %f MB/s\n", stats.DownloadDelayMs(), stats.DownloadThroughputMbps(payload/1024/1024))
|
|
fmt.Printf("Delete delay %f ms\n", stats.DeleteDelayMs())
|
|
|
|
return nil
|
|
})
|
|
}
|