buckets.go 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. // Copyright 2019 Yunion
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // http://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. package compute
  15. import (
  16. "fmt"
  17. "io"
  18. "os"
  19. "yunion.io/x/jsonutils"
  20. "yunion.io/x/pkg/util/fileutils"
  21. "yunion.io/x/pkg/util/printutils"
  22. "yunion.io/x/onecloud/cmd/climc/shell"
  23. "yunion.io/x/onecloud/pkg/apis/compute"
  24. "yunion.io/x/onecloud/pkg/mcclient"
  25. modules "yunion.io/x/onecloud/pkg/mcclient/modules/compute"
  26. computeoptions "yunion.io/x/onecloud/pkg/mcclient/options/compute"
  27. )
  28. func init() {
  29. cmd := shell.NewResourceCmd(&modules.Buckets)
  30. cmd.List(&computeoptions.BucketListOptions{})
  31. cmd.GetProperty(&computeoptions.BucketGetPropertyOptions{})
  32. cmd.Show(&computeoptions.BucketIdOptions{})
  33. cmd.Perform("syncstatus", &computeoptions.BucketIdOptions{})
  34. cmd.Update(&computeoptions.BucketUpdateOptions{})
  35. cmd.Delete(&computeoptions.BucketIdOptions{})
  36. cmd.Create(&computeoptions.BucketCreateOptions{})
  37. cmd.GetWithCustomOptionShow("objects", func(data jsonutils.JSONObject, args shell.IGetOpt) {
  38. listResult := printutils.ListResult{}
  39. err := data.Unmarshal(&listResult)
  40. if err != nil {
  41. return
  42. }
  43. printList(&listResult, []string{})
  44. }, &computeoptions.BucketListObjectsOptions{})
  45. cmd.Perform("delete", &computeoptions.BucketDeleteObjectsOptions{})
  46. cmd.Perform("makedir", &computeoptions.BucketMakeDirOptions{})
  47. cmd.Perform("temp-url", &computeoptions.BucketPresignObjectsOptions{})
  48. cmd.Perform("acl", &computeoptions.BucketSetAclOptions{})
  49. cmd.GetWithCustomOptionShow("acl", func(data jsonutils.JSONObject, args shell.IGetOpt) {
  50. printObject(data)
  51. }, &computeoptions.BucketAclOptions{})
  52. cmd.Perform("sync", &computeoptions.BucketSyncOptions{})
  53. cmd.Perform("limit", &computeoptions.BucketLimitOptions{})
  54. cmd.GetWithCustomOptionShow("access-info", func(data jsonutils.JSONObject, args shell.IGetOpt) {
  55. printObject(data)
  56. }, &computeoptions.BucketAccessInfoOptions{})
  57. cmd.Perform("metadata", &computeoptions.BucketSetMetadataOptions{})
  58. cmd.Perform("set-website", &computeoptions.BucketSetWebsiteOption{})
  59. cmd.GetWithCustomOptionShow("website", func(data jsonutils.JSONObject, args shell.IGetOpt) {
  60. printObject(data)
  61. }, &computeoptions.BucketGetWebsiteConfOption{})
  62. cmd.Perform("delete-website", &computeoptions.BucketDeleteWebsiteConfOption{})
  63. cmd.Perform("set-cors", &computeoptions.BucketSetCorsOption{})
  64. cmd.GetWithCustomOptionShow("cors", func(data jsonutils.JSONObject, args shell.IGetOpt) {
  65. printObject(data)
  66. }, &computeoptions.BucketGetCorsOption{})
  67. cmd.Perform("delete-cors", &computeoptions.BucketDeleteCorsOption{})
  68. cmd.Perform("set-referer", &computeoptions.BucketSetRefererOption{})
  69. cmd.GetWithCustomOptionShow("referer", func(data jsonutils.JSONObject, args shell.IGetOpt) {
  70. printObject(data)
  71. }, &computeoptions.BucketGetRefererOption{})
  72. cmd.GetWithCustomOptionShow("cdn-domain", func(data jsonutils.JSONObject, args shell.IGetOpt) {
  73. printObject(data)
  74. }, &computeoptions.BucketGetCdnDomainOption{})
  75. cmd.GetWithCustomOptionShow("policy", func(data jsonutils.JSONObject, args shell.IGetOpt) {
  76. printObject(data)
  77. }, &computeoptions.BucketGetPolicyOption{})
  78. cmd.Perform("set-policy", &computeoptions.BucketSetPolicyOption{})
  79. cmd.Perform("delete-policy", &computeoptions.BucketDeletePolicyOption{})
  80. R(&computeoptions.BucketUploadObjectsOptions{}, "bucket-object-upload", "Upload an object into a bucket", func(s *mcclient.ClientSession, args *computeoptions.BucketUploadObjectsOptions) error {
  81. var body io.Reader
  82. if len(args.Path) > 0 {
  83. file, err := os.Open(args.Path)
  84. if err != nil {
  85. return err
  86. }
  87. defer file.Close()
  88. body = file
  89. fileInfo, err := file.Stat()
  90. if err != nil {
  91. return err
  92. }
  93. args.ContentLength = fileInfo.Size()
  94. } else {
  95. body = os.Stdin
  96. }
  97. if args.ContentLength < 0 {
  98. return fmt.Errorf("required content-length")
  99. }
  100. meta := args.ObjectHeaderOptions.Options2Header()
  101. err := modules.Buckets.Upload(s, args.ID, args.KEY, body, args.ContentLength, args.StorageClass, args.Acl, meta)
  102. if err != nil {
  103. return err
  104. }
  105. return nil
  106. })
  107. R(&computeoptions.BucketPerfMonOptions{}, "bucket-perf-mon", "Bucket performance monitor", func(s *mcclient.ClientSession, args *computeoptions.BucketPerfMonOptions) error {
  108. result, err := modules.Buckets.Get(s, args.ID, nil)
  109. if err != nil {
  110. return err
  111. }
  112. bucketDetails := compute.BucketDetails{}
  113. err = result.Unmarshal(&bucketDetails)
  114. if err != nil {
  115. return err
  116. }
  117. bucket, err := modules.GetIBucket(s.GetContext(), s, &bucketDetails)
  118. if err != nil {
  119. return err
  120. }
  121. payload, err := fileutils.GetSizeBytes(args.Payload, 1024)
  122. if err != nil {
  123. return err
  124. }
  125. stats, err := modules.ProbeBucketStats(s.GetContext(), bucket, "test", int64(payload))
  126. if err != nil {
  127. return err
  128. }
  129. fmt.Printf("Upload delay %f ms throughput %f MB/s\n", stats.UploadDelayMs(), stats.UploadThroughputMbps(payload/1024/1024))
  130. fmt.Printf("Download delay %f ms throughput %f MB/s\n", stats.DownloadDelayMs(), stats.DownloadThroughputMbps(payload/1024/1024))
  131. fmt.Printf("Delete delay %f ms\n", stats.DeleteDelayMs())
  132. return nil
  133. })
  134. }