diff --git a/go.mod b/go.mod index 580a210554..b44553a926 100644 --- a/go.mod +++ b/go.mod @@ -81,7 +81,7 @@ require ( k8s.io/client-go v0.19.3 k8s.io/cluster-bootstrap v0.19.3 moul.io/http2curl/v2 v2.3.0 - yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20230217044210-52661352164d + yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20230220095739-1ab9c31dce86 yunion.io/x/executor v0.0.0-20211018100936-39a2cd966656 yunion.io/x/jsonutils v1.0.1-0.20220819091305-3bab322ab4fd yunion.io/x/log v1.0.0 diff --git a/go.sum b/go.sum index e679533623..a87f2b2870 100644 --- a/go.sum +++ b/go.sum @@ -1158,8 +1158,8 @@ sigs.k8s.io/structured-merge-diff/v4 v4.0.1/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q= sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= -yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20230217044210-52661352164d h1:5O1nznaWpVVudgt+82cN2ur/ED2GbAVhzlzSuw83z7Q= -yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20230217044210-52661352164d/go.mod h1:yEMFtIKPyIdIfPzsw7oTcH41JXc8G5StUAQw3ZoGj5I= +yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20230220095739-1ab9c31dce86 h1:9h/MiURFtKSbaTPQRdbG+j9L6CzkMc3gGqNBSz/Gxk8= +yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20230220095739-1ab9c31dce86/go.mod h1:yEMFtIKPyIdIfPzsw7oTcH41JXc8G5StUAQw3ZoGj5I= yunion.io/x/executor v0.0.0-20211018100936-39a2cd966656 h1:0zlZD5uhZoIHgLVAWCz2aHaYk2ZrNsACCYD7R6EIBII= yunion.io/x/executor v0.0.0-20211018100936-39a2cd966656/go.mod h1:Uxuou9WQIeJXNpy7t2fPLL0BYLvLiMvGQwY7Qc6aSws= yunion.io/x/jsonutils v0.0.0-20190625054549-a964e1e8a051/go.mod h1:4N0/RVzsYL3kH3WE/H1BjUQdFiWu50JGCFQuuy+Z634= diff --git a/vendor/modules.txt b/vendor/modules.txt index 6c5f752a07..60c5edc7f3 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -1439,7 +1439,7 @@ sigs.k8s.io/structured-merge-diff/v4/value # sigs.k8s.io/yaml v1.2.0 ## explicit; go 1.12 sigs.k8s.io/yaml -# yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20230217044210-52661352164d +# yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20230220095739-1ab9c31dce86 ## explicit; go 1.18 yunion.io/x/cloudmux/pkg/apis yunion.io/x/cloudmux/pkg/apis/billing diff --git a/vendor/yunion.io/x/cloudmux/pkg/multicloud/apsara/apsara.go b/vendor/yunion.io/x/cloudmux/pkg/multicloud/apsara/apsara.go index 5989cd38a6..fec0e22f59 100644 --- a/vendor/yunion.io/x/cloudmux/pkg/multicloud/apsara/apsara.go +++ b/vendor/yunion.io/x/cloudmux/pkg/multicloud/apsara/apsara.go @@ -113,6 +113,8 @@ type SApsaraClient struct { ownerId string ownerName string + departments []string + iregions []cloudprovider.ICloudRegion } diff --git a/vendor/yunion.io/x/cloudmux/pkg/multicloud/apsara/monitor.go b/vendor/yunion.io/x/cloudmux/pkg/multicloud/apsara/monitor.go index ffeebe9e70..38011c664d 100644 --- a/vendor/yunion.io/x/cloudmux/pkg/multicloud/apsara/monitor.go +++ b/vendor/yunion.io/x/cloudmux/pkg/multicloud/apsara/monitor.go @@ -16,11 +16,13 @@ package apsara import ( "fmt" + "strings" "time" "yunion.io/x/jsonutils" "yunion.io/x/log" "yunion.io/x/pkg/errors" + "yunion.io/x/pkg/utils" "yunion.io/x/cloudmux/pkg/cloudprovider" ) @@ -75,11 +77,48 @@ func (d MetricData) GetTags() map[string]string { return ret } +func (self *SApsaraClient) tryGetDepartments() []string { + if len(self.departments) > 0 { + return self.departments + } + ret := []string{} + if len(self.organizationId) > 0 { + ret = append(ret, self.organizationId) + } + tree, err := self.GetOrganizationTree("1") + if err != nil { + return ret + } + for _, child := range tree.Children { + if !utils.IsInStringArray(child.Id, ret) && child.Id != "1" { + ret = append(ret, child.Id) + } + } + self.departments = ret + return self.departments +} + func (self *SApsaraClient) ListMetrics(ns, metricName string, start, end time.Time) ([]MetricData, error) { + ret := []MetricData{} + departments := self.tryGetDepartments() + for i := range departments { + part, err := self.listMetrics(departments[i], ns, metricName, start, end) + if err != nil { + if strings.Contains(err.Error(), "NoPermission") { + continue + } + return nil, err + } + ret = append(ret, part...) + } + return ret, nil +} + +func (self *SApsaraClient) listMetrics(departmentId, ns, metricName string, start, end time.Time) ([]MetricData, error) { result := []MetricData{} nextToken := "" for { - part, next, err := self.listMetrics(ns, metricName, nextToken, start, end) + part, next, err := self._listMetrics(departmentId, ns, metricName, nextToken, start, end) if err != nil { return nil, errors.Wrap(err, "listMetrics") } @@ -92,7 +131,7 @@ func (self *SApsaraClient) ListMetrics(ns, metricName string, start, end time.Ti return result, nil } -func (self *SApsaraClient) listMetrics(ns, metricName, nextToken string, start, end time.Time) ([]MetricData, string, error) { +func (self *SApsaraClient) _listMetrics(departmentId, ns, metricName, nextToken string, start, end time.Time) ([]MetricData, string, error) { params := make(map[string]string) params["MetricName"] = metricName params["Namespace"] = ns @@ -100,9 +139,7 @@ func (self *SApsaraClient) listMetrics(ns, metricName, nextToken string, start, if len(nextToken) > 0 { params["NextToken"] = nextToken } - if len(self.organizationId) > 0 { - params["Department"] = self.organizationId - } + params["Department"] = departmentId params["StartTime"] = fmt.Sprintf("%d", start.UnixMilli()) params["EndTime"] = fmt.Sprintf("%d", end.UnixMilli()) resp, err := self.metricsRequest("DescribeMetricList", params)