From 4a00e2617543dfeda3a665def53ca967fd45be88 Mon Sep 17 00:00:00 2001 From: Pengfei Ni Date: Thu, 2 Jan 2020 13:12:43 +0800 Subject: [PATCH] Move Azure metrics to a separate package --- .../azure/azure_client.go | 75 ++++++++++--------- .../azure/{ => metrics}/azure_metrics.go | 33 ++++++-- .../azure/{ => metrics}/azure_metrics_test.go | 6 +- .../azure/metrics/doc.go | 20 +++++ 4 files changed, 88 insertions(+), 46 deletions(-) rename staging/src/k8s.io/legacy-cloud-providers/azure/{ => metrics}/azure_metrics.go (70%) rename staging/src/k8s.io/legacy-cloud-providers/azure/{ => metrics}/azure_metrics_test.go (88%) create mode 100644 staging/src/k8s.io/legacy-cloud-providers/azure/metrics/doc.go diff --git a/staging/src/k8s.io/legacy-cloud-providers/azure/azure_client.go b/staging/src/k8s.io/legacy-cloud-providers/azure/azure_client.go index ce086cb7ebf..ca196afde6f 100644 --- a/staging/src/k8s.io/legacy-cloud-providers/azure/azure_client.go +++ b/staging/src/k8s.io/legacy-cloud-providers/azure/azure_client.go @@ -32,6 +32,7 @@ import ( "k8s.io/client-go/util/flowcontrol" "k8s.io/klog" azclients "k8s.io/legacy-cloud-providers/azure/clients" + "k8s.io/legacy-cloud-providers/azure/metrics" "k8s.io/legacy-cloud-providers/azure/retry" ) @@ -183,7 +184,7 @@ func newAzVirtualMachinesClient(config *azclients.ClientConfig) *azVirtualMachin func (az *azVirtualMachinesClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, VMName string, parameters compute.VirtualMachine, source string) *retry.Error { // /* Write rate limiting */ - mc := newMetricContext("vm", "create_or_update", resourceGroupName, az.client.SubscriptionID, source) + mc := metrics.NewMetricContext("vm", "create_or_update", resourceGroupName, az.client.SubscriptionID, source) if !az.rateLimiterWriter.TryAccept() { mc.RateLimitedCount() return createRateLimitErr(true, "VMCreateOrUpdate") @@ -205,7 +206,7 @@ func (az *azVirtualMachinesClient) CreateOrUpdate(ctx context.Context, resourceG } func (az *azVirtualMachinesClient) Update(ctx context.Context, resourceGroupName string, VMName string, parameters compute.VirtualMachineUpdate, source string) *retry.Error { - mc := newMetricContext("vm", "update", resourceGroupName, az.client.SubscriptionID, source) + mc := metrics.NewMetricContext("vm", "update", resourceGroupName, az.client.SubscriptionID, source) // /* Write rate limiting */ if !az.rateLimiterWriter.TryAccept() { mc.RateLimitedCount() @@ -228,7 +229,7 @@ func (az *azVirtualMachinesClient) Update(ctx context.Context, resourceGroupName } func (az *azVirtualMachinesClient) Get(ctx context.Context, resourceGroupName string, VMName string, expand compute.InstanceViewTypes) (result compute.VirtualMachine, rerr *retry.Error) { - mc := newMetricContext("vm", "get", resourceGroupName, az.client.SubscriptionID, "") + mc := metrics.NewMetricContext("vm", "get", resourceGroupName, az.client.SubscriptionID, "") if !az.rateLimiterReader.TryAccept() { mc.RateLimitedCount() rerr = createRateLimitErr(false, "VMGet") @@ -247,7 +248,7 @@ func (az *azVirtualMachinesClient) Get(ctx context.Context, resourceGroupName st } func (az *azVirtualMachinesClient) List(ctx context.Context, resourceGroupName string) (result []compute.VirtualMachine, rerr *retry.Error) { - mc := newMetricContext("vm", "list", resourceGroupName, az.client.SubscriptionID, "") + mc := metrics.NewMetricContext("vm", "list", resourceGroupName, az.client.SubscriptionID, "") if !az.rateLimiterReader.TryAccept() { mc.RateLimitedCount() rerr = createRateLimitErr(false, "VMList") @@ -310,7 +311,7 @@ func newAzInterfacesClient(config *azclients.ClientConfig) *azInterfacesClient { } func (az *azInterfacesClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, networkInterfaceName string, parameters network.Interface) *retry.Error { - mc := newMetricContext("interfaces", "create_or_update", resourceGroupName, az.client.SubscriptionID, "") + mc := metrics.NewMetricContext("interfaces", "create_or_update", resourceGroupName, az.client.SubscriptionID, "") /* Write rate limiting */ if !az.rateLimiterWriter.TryAccept() { mc.RateLimitedCount() @@ -332,7 +333,7 @@ func (az *azInterfacesClient) CreateOrUpdate(ctx context.Context, resourceGroupN } func (az *azInterfacesClient) Get(ctx context.Context, resourceGroupName string, networkInterfaceName string, expand string) (result network.Interface, rerr *retry.Error) { - mc := newMetricContext("interfaces", "get", resourceGroupName, az.client.SubscriptionID, "") + mc := metrics.NewMetricContext("interfaces", "get", resourceGroupName, az.client.SubscriptionID, "") if !az.rateLimiterReader.TryAccept() { mc.RateLimitedCount() rerr = createRateLimitErr(false, "NicGet") @@ -351,7 +352,7 @@ func (az *azInterfacesClient) Get(ctx context.Context, resourceGroupName string, } func (az *azInterfacesClient) GetVirtualMachineScaleSetNetworkInterface(ctx context.Context, resourceGroupName string, virtualMachineScaleSetName string, virtualmachineIndex string, networkInterfaceName string, expand string) (result network.Interface, rerr *retry.Error) { - mc := newMetricContext("interfaces", "get_vmss_ni", resourceGroupName, az.client.SubscriptionID, "") + mc := metrics.NewMetricContext("interfaces", "get_vmss_ni", resourceGroupName, az.client.SubscriptionID, "") if !az.rateLimiterReader.TryAccept() { mc.RateLimitedCount() rerr = createRateLimitErr(false, "NicGetVirtualMachineScaleSetNetworkInterface") @@ -402,7 +403,7 @@ func newAzLoadBalancersClient(config *azclients.ClientConfig) *azLoadBalancersCl } func (az *azLoadBalancersClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, loadBalancerName string, parameters network.LoadBalancer, etag string) *retry.Error { - mc := newMetricContext("load_balancers", "create_or_update", resourceGroupName, az.client.SubscriptionID, "") + mc := metrics.NewMetricContext("load_balancers", "create_or_update", resourceGroupName, az.client.SubscriptionID, "") /* Write rate limiting */ if !az.rateLimiterWriter.TryAccept() { mc.RateLimitedCount() @@ -456,7 +457,7 @@ func (az *azLoadBalancersClient) createOrUpdatePreparer(ctx context.Context, res } func (az *azLoadBalancersClient) Delete(ctx context.Context, resourceGroupName string, loadBalancerName string) *retry.Error { - mc := newMetricContext("load_balancers", "delete", resourceGroupName, az.client.SubscriptionID, "") + mc := metrics.NewMetricContext("load_balancers", "delete", resourceGroupName, az.client.SubscriptionID, "") /* Write rate limiting */ if !az.rateLimiterWriter.TryAccept() { mc.RateLimitedCount() @@ -478,7 +479,7 @@ func (az *azLoadBalancersClient) Delete(ctx context.Context, resourceGroupName s } func (az *azLoadBalancersClient) Get(ctx context.Context, resourceGroupName string, loadBalancerName string, expand string) (result network.LoadBalancer, rerr *retry.Error) { - mc := newMetricContext("load_balancers", "get", resourceGroupName, az.client.SubscriptionID, "") + mc := metrics.NewMetricContext("load_balancers", "get", resourceGroupName, az.client.SubscriptionID, "") if !az.rateLimiterReader.TryAccept() { mc.RateLimitedCount() rerr = createRateLimitErr(false, "LBGet") @@ -497,7 +498,7 @@ func (az *azLoadBalancersClient) Get(ctx context.Context, resourceGroupName stri } func (az *azLoadBalancersClient) List(ctx context.Context, resourceGroupName string) ([]network.LoadBalancer, *retry.Error) { - mc := newMetricContext("load_balancers", "list", resourceGroupName, az.client.SubscriptionID, "") + mc := metrics.NewMetricContext("load_balancers", "list", resourceGroupName, az.client.SubscriptionID, "") if !az.rateLimiterReader.TryAccept() { mc.RateLimitedCount() rerr := createRateLimitErr(false, "LBList") @@ -560,7 +561,7 @@ func newAzPublicIPAddressesClient(config *azclients.ClientConfig) *azPublicIPAdd } func (az *azPublicIPAddressesClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, publicIPAddressName string, parameters network.PublicIPAddress) *retry.Error { - mc := newMetricContext("public_ip_addresses", "create_or_update", resourceGroupName, az.client.SubscriptionID, "") + mc := metrics.NewMetricContext("public_ip_addresses", "create_or_update", resourceGroupName, az.client.SubscriptionID, "") /* Write rate limiting */ if !az.rateLimiterWriter.TryAccept() { mc.RateLimitedCount() @@ -582,7 +583,7 @@ func (az *azPublicIPAddressesClient) CreateOrUpdate(ctx context.Context, resourc } func (az *azPublicIPAddressesClient) Delete(ctx context.Context, resourceGroupName string, publicIPAddressName string) *retry.Error { - mc := newMetricContext("public_ip_addresses", "delete", resourceGroupName, az.client.SubscriptionID, "") + mc := metrics.NewMetricContext("public_ip_addresses", "delete", resourceGroupName, az.client.SubscriptionID, "") /* Write rate limiting */ if !az.rateLimiterWriter.TryAccept() { mc.RateLimitedCount() @@ -604,7 +605,7 @@ func (az *azPublicIPAddressesClient) Delete(ctx context.Context, resourceGroupNa } func (az *azPublicIPAddressesClient) Get(ctx context.Context, resourceGroupName string, publicIPAddressName string, expand string) (result network.PublicIPAddress, rerr *retry.Error) { - mc := newMetricContext("public_ip_addresses", "get", resourceGroupName, az.client.SubscriptionID, "") + mc := metrics.NewMetricContext("public_ip_addresses", "get", resourceGroupName, az.client.SubscriptionID, "") if !az.rateLimiterReader.TryAccept() { mc.RateLimitedCount() rerr = createRateLimitErr(false, "PublicIPGet") @@ -623,7 +624,7 @@ func (az *azPublicIPAddressesClient) Get(ctx context.Context, resourceGroupName } func (az *azPublicIPAddressesClient) GetVirtualMachineScaleSetPublicIPAddress(ctx context.Context, resourceGroupName string, virtualMachineScaleSetName string, virtualmachineIndex string, networkInterfaceName string, IPConfigurationName string, publicIPAddressName string, expand string) (result network.PublicIPAddress, rerr *retry.Error) { - mc := newMetricContext("vmss_public_ip_addresses", "get", resourceGroupName, az.client.SubscriptionID, "") + mc := metrics.NewMetricContext("vmss_public_ip_addresses", "get", resourceGroupName, az.client.SubscriptionID, "") if !az.rateLimiterReader.TryAccept() { mc.RateLimitedCount() rerr = createRateLimitErr(false, "VMSSPublicIPGet") @@ -642,7 +643,7 @@ func (az *azPublicIPAddressesClient) GetVirtualMachineScaleSetPublicIPAddress(ct } func (az *azPublicIPAddressesClient) List(ctx context.Context, resourceGroupName string) ([]network.PublicIPAddress, *retry.Error) { - mc := newMetricContext("public_ip_addresses", "list", resourceGroupName, az.client.SubscriptionID, "") + mc := metrics.NewMetricContext("public_ip_addresses", "list", resourceGroupName, az.client.SubscriptionID, "") if !az.rateLimiterReader.TryAccept() { mc.RateLimitedCount() return nil, createRateLimitErr(false, "PublicIPList") @@ -704,7 +705,7 @@ func newAzSubnetsClient(config *azclients.ClientConfig) *azSubnetsClient { } func (az *azSubnetsClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, virtualNetworkName string, subnetName string, subnetParameters network.Subnet) *retry.Error { - mc := newMetricContext("subnets", "create_or_update", resourceGroupName, az.client.SubscriptionID, "") + mc := metrics.NewMetricContext("subnets", "create_or_update", resourceGroupName, az.client.SubscriptionID, "") /* Write rate limiting */ if !az.rateLimiterWriter.TryAccept() { mc.RateLimitedCount() @@ -726,7 +727,7 @@ func (az *azSubnetsClient) CreateOrUpdate(ctx context.Context, resourceGroupName } func (az *azSubnetsClient) Delete(ctx context.Context, resourceGroupName string, virtualNetworkName string, subnetName string) *retry.Error { - mc := newMetricContext("subnets", "delete", resourceGroupName, az.client.SubscriptionID, "") + mc := metrics.NewMetricContext("subnets", "delete", resourceGroupName, az.client.SubscriptionID, "") /* Write rate limiting */ if !az.rateLimiterWriter.TryAccept() { mc.RateLimitedCount() @@ -748,7 +749,7 @@ func (az *azSubnetsClient) Delete(ctx context.Context, resourceGroupName string, } func (az *azSubnetsClient) Get(ctx context.Context, resourceGroupName string, virtualNetworkName string, subnetName string, expand string) (result network.Subnet, rerr *retry.Error) { - mc := newMetricContext("subnets", "get", resourceGroupName, az.client.SubscriptionID, "") + mc := metrics.NewMetricContext("subnets", "get", resourceGroupName, az.client.SubscriptionID, "") if !az.rateLimiterReader.TryAccept() { mc.RateLimitedCount() rerr = createRateLimitErr(false, "SubnetGet") @@ -767,7 +768,7 @@ func (az *azSubnetsClient) Get(ctx context.Context, resourceGroupName string, vi } func (az *azSubnetsClient) List(ctx context.Context, resourceGroupName string, virtualNetworkName string) ([]network.Subnet, *retry.Error) { - mc := newMetricContext("subnets", "list", resourceGroupName, az.client.SubscriptionID, "") + mc := metrics.NewMetricContext("subnets", "list", resourceGroupName, az.client.SubscriptionID, "") if !az.rateLimiterReader.TryAccept() { mc.RateLimitedCount() return nil, createRateLimitErr(false, "SubnetList") @@ -829,7 +830,7 @@ func newAzSecurityGroupsClient(config *azclients.ClientConfig) *azSecurityGroups } func (az *azSecurityGroupsClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, networkSecurityGroupName string, parameters network.SecurityGroup, etag string) *retry.Error { - mc := newMetricContext("security_groups", "create_or_update", resourceGroupName, az.client.SubscriptionID, "") + mc := metrics.NewMetricContext("security_groups", "create_or_update", resourceGroupName, az.client.SubscriptionID, "") /* Write rate limiting */ if !az.rateLimiterWriter.TryAccept() { mc.RateLimitedCount() @@ -883,7 +884,7 @@ func (az *azSecurityGroupsClient) createOrUpdatePreparer(ctx context.Context, re } func (az *azSecurityGroupsClient) Delete(ctx context.Context, resourceGroupName string, networkSecurityGroupName string) *retry.Error { - mc := newMetricContext("security_groups", "delete", resourceGroupName, az.client.SubscriptionID, "") + mc := metrics.NewMetricContext("security_groups", "delete", resourceGroupName, az.client.SubscriptionID, "") /* Write rate limiting */ if !az.rateLimiterWriter.TryAccept() { mc.RateLimitedCount() @@ -905,7 +906,7 @@ func (az *azSecurityGroupsClient) Delete(ctx context.Context, resourceGroupName } func (az *azSecurityGroupsClient) Get(ctx context.Context, resourceGroupName string, networkSecurityGroupName string, expand string) (result network.SecurityGroup, rerr *retry.Error) { - mc := newMetricContext("security_groups", "get", resourceGroupName, az.client.SubscriptionID, "") + mc := metrics.NewMetricContext("security_groups", "get", resourceGroupName, az.client.SubscriptionID, "") if !az.rateLimiterReader.TryAccept() { mc.RateLimitedCount() rerr = createRateLimitErr(false, "NSGGet") @@ -924,7 +925,7 @@ func (az *azSecurityGroupsClient) Get(ctx context.Context, resourceGroupName str } func (az *azSecurityGroupsClient) List(ctx context.Context, resourceGroupName string) ([]network.SecurityGroup, *retry.Error) { - mc := newMetricContext("security_groups", "list", resourceGroupName, az.client.SubscriptionID, "") + mc := metrics.NewMetricContext("security_groups", "list", resourceGroupName, az.client.SubscriptionID, "") if !az.rateLimiterReader.TryAccept() { mc.RateLimitedCount() return nil, createRateLimitErr(false, "NSGList") @@ -986,7 +987,7 @@ func newAzRoutesClient(config *azclients.ClientConfig) *azRoutesClient { } func (az *azRoutesClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, routeTableName string, routeName string, routeParameters network.Route, etag string) *retry.Error { - mc := newMetricContext("routes", "create_or_update", resourceGroupName, az.client.SubscriptionID, "") + mc := metrics.NewMetricContext("routes", "create_or_update", resourceGroupName, az.client.SubscriptionID, "") /* Write rate limiting */ if !az.rateLimiterWriter.TryAccept() { mc.RateLimitedCount() @@ -1042,7 +1043,7 @@ func (az *azRoutesClient) createOrUpdatePreparer(ctx context.Context, resourceGr } func (az *azRoutesClient) Delete(ctx context.Context, resourceGroupName string, routeTableName string, routeName string) *retry.Error { - mc := newMetricContext("routes", "delete", resourceGroupName, az.client.SubscriptionID, "") + mc := metrics.NewMetricContext("routes", "delete", resourceGroupName, az.client.SubscriptionID, "") /* Write rate limiting */ if !az.rateLimiterWriter.TryAccept() { mc.RateLimitedCount() @@ -1096,7 +1097,7 @@ func newAzRouteTablesClient(config *azclients.ClientConfig) *azRouteTablesClient } func (az *azRouteTablesClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, routeTableName string, parameters network.RouteTable, etag string) *retry.Error { - mc := newMetricContext("route_tables", "create_or_update", resourceGroupName, az.client.SubscriptionID, "") + mc := metrics.NewMetricContext("route_tables", "create_or_update", resourceGroupName, az.client.SubscriptionID, "") /* Write rate limiting */ if !az.rateLimiterWriter.TryAccept() { mc.RateLimitedCount() @@ -1150,7 +1151,7 @@ func (az *azRouteTablesClient) createOrUpdatePreparer(ctx context.Context, resou } func (az *azRouteTablesClient) Get(ctx context.Context, resourceGroupName string, routeTableName string, expand string) (result network.RouteTable, rerr *retry.Error) { - mc := newMetricContext("route_tables", "get", resourceGroupName, az.client.SubscriptionID, "") + mc := metrics.NewMetricContext("route_tables", "get", resourceGroupName, az.client.SubscriptionID, "") if !az.rateLimiterReader.TryAccept() { mc.RateLimitedCount() rerr = createRateLimitErr(false, "GetRouteTable") @@ -1200,7 +1201,7 @@ func newAzStorageAccountClient(config *azclients.ClientConfig) *azStorageAccount } func (az *azStorageAccountClient) Create(ctx context.Context, resourceGroupName string, accountName string, parameters storage.AccountCreateParameters) *retry.Error { - mc := newMetricContext("storage_account", "create", resourceGroupName, az.client.SubscriptionID, "") + mc := metrics.NewMetricContext("storage_account", "create", resourceGroupName, az.client.SubscriptionID, "") /* Write rate limiting */ if !az.rateLimiterWriter.TryAccept() { mc.RateLimitedCount() @@ -1223,7 +1224,7 @@ func (az *azStorageAccountClient) Create(ctx context.Context, resourceGroupName } func (az *azStorageAccountClient) Delete(ctx context.Context, resourceGroupName string, accountName string) *retry.Error { - mc := newMetricContext("storage_account", "delete", resourceGroupName, az.client.SubscriptionID, "") + mc := metrics.NewMetricContext("storage_account", "delete", resourceGroupName, az.client.SubscriptionID, "") if !az.rateLimiterReader.TryAccept() { mc.RateLimitedCount() return createRateLimitErr(false, "DeleteStorageAccount") @@ -1240,7 +1241,7 @@ func (az *azStorageAccountClient) Delete(ctx context.Context, resourceGroupName } func (az *azStorageAccountClient) ListKeys(ctx context.Context, resourceGroupName string, accountName string) (result storage.AccountListKeysResult, rerr *retry.Error) { - mc := newMetricContext("storage_account", "list_keys", resourceGroupName, az.client.SubscriptionID, "") + mc := metrics.NewMetricContext("storage_account", "list_keys", resourceGroupName, az.client.SubscriptionID, "") if !az.rateLimiterReader.TryAccept() { mc.RateLimitedCount() rerr = createRateLimitErr(false, "ListStorageAccountKeys") @@ -1259,7 +1260,7 @@ func (az *azStorageAccountClient) ListKeys(ctx context.Context, resourceGroupNam } func (az *azStorageAccountClient) ListByResourceGroup(ctx context.Context, resourceGroupName string) (result storage.AccountListResult, rerr *retry.Error) { - mc := newMetricContext("storage_account", "list_by_resource_group", resourceGroupName, az.client.SubscriptionID, "") + mc := metrics.NewMetricContext("storage_account", "list_by_resource_group", resourceGroupName, az.client.SubscriptionID, "") if !az.rateLimiterReader.TryAccept() { mc.RateLimitedCount() rerr = createRateLimitErr(false, "ListStorageAccountsByResourceGroup") @@ -1278,7 +1279,7 @@ func (az *azStorageAccountClient) ListByResourceGroup(ctx context.Context, resou } func (az *azStorageAccountClient) GetProperties(ctx context.Context, resourceGroupName string, accountName string) (result storage.Account, rerr *retry.Error) { - mc := newMetricContext("storage_account", "get_properties", resourceGroupName, az.client.SubscriptionID, "") + mc := metrics.NewMetricContext("storage_account", "get_properties", resourceGroupName, az.client.SubscriptionID, "") if !az.rateLimiterReader.TryAccept() { mc.RateLimitedCount() rerr = createRateLimitErr(false, "GetStorageAccount/Properties") @@ -1328,7 +1329,7 @@ func newAzDisksClient(config *azclients.ClientConfig) *azDisksClient { } func (az *azDisksClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, diskName string, diskParameter compute.Disk) *retry.Error { - mc := newMetricContext("disks", "create_or_update", resourceGroupName, az.client.SubscriptionID, "") + mc := metrics.NewMetricContext("disks", "create_or_update", resourceGroupName, az.client.SubscriptionID, "") /* Write rate limiting */ if !az.rateLimiterWriter.TryAccept() { mc.RateLimitedCount() @@ -1350,7 +1351,7 @@ func (az *azDisksClient) CreateOrUpdate(ctx context.Context, resourceGroupName s } func (az *azDisksClient) Delete(ctx context.Context, resourceGroupName string, diskName string) *retry.Error { - mc := newMetricContext("disks", "delete", resourceGroupName, az.client.SubscriptionID, "") + mc := metrics.NewMetricContext("disks", "delete", resourceGroupName, az.client.SubscriptionID, "") /* Write rate limiting */ if !az.rateLimiterWriter.TryAccept() { mc.RateLimitedCount() @@ -1371,7 +1372,7 @@ func (az *azDisksClient) Delete(ctx context.Context, resourceGroupName string, d } func (az *azDisksClient) Get(ctx context.Context, resourceGroupName string, diskName string) (result compute.Disk, rerr *retry.Error) { - mc := newMetricContext("disks", "get", resourceGroupName, az.client.SubscriptionID, "") + mc := metrics.NewMetricContext("disks", "get", resourceGroupName, az.client.SubscriptionID, "") if !az.rateLimiterReader.TryAccept() { mc.RateLimitedCount() rerr = createRateLimitErr(false, "GetDisk") @@ -1435,7 +1436,7 @@ func newAzVirtualMachineSizesClient(config *azclients.ClientConfig) *azVirtualMa } func (az *azVirtualMachineSizesClient) List(ctx context.Context, location string) (result compute.VirtualMachineSizeListResult, rerr *retry.Error) { - mc := newMetricContext("vmsizes", "list", "", az.client.SubscriptionID, "") + mc := metrics.NewMetricContext("vmsizes", "list", "", az.client.SubscriptionID, "") if !az.rateLimiterReader.TryAccept() { mc.RateLimitedCount() rerr = createRateLimitErr(false, "VMSizesList") diff --git a/staging/src/k8s.io/legacy-cloud-providers/azure/azure_metrics.go b/staging/src/k8s.io/legacy-cloud-providers/azure/metrics/azure_metrics.go similarity index 70% rename from staging/src/k8s.io/legacy-cloud-providers/azure/azure_metrics.go rename to staging/src/k8s.io/legacy-cloud-providers/azure/metrics/azure_metrics.go index 999a4a2b639..93c51daa87c 100644 --- a/staging/src/k8s.io/legacy-cloud-providers/azure/azure_metrics.go +++ b/staging/src/k8s.io/legacy-cloud-providers/azure/metrics/azure_metrics.go @@ -16,7 +16,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package azure +package metrics import ( "strings" @@ -30,6 +30,7 @@ type apiCallMetrics struct { latency *metrics.HistogramVec errors *metrics.CounterVec rateLimitedCount *metrics.CounterVec + throttledCount *metrics.CounterVec } var ( @@ -43,22 +44,32 @@ var ( apiMetrics = registerAPIMetrics(metricLabels...) ) -type metricContext struct { +// MetricContext indicates the context for Azure client metrics. +type MetricContext struct { start time.Time attributes []string } -func newMetricContext(prefix, request, resourceGroup, subscriptionID, source string) *metricContext { - return &metricContext{ +// NewMetricContext creates a new MetricContext. +func NewMetricContext(prefix, request, resourceGroup, subscriptionID, source string) *MetricContext { + return &MetricContext{ start: time.Now(), attributes: []string{prefix + "_" + request, strings.ToLower(resourceGroup), subscriptionID, source}, } } -func (mc *metricContext) RateLimitedCount() { + +// RateLimitedCount records the metrics for rate limited request count. +func (mc *MetricContext) RateLimitedCount() { apiMetrics.rateLimitedCount.WithLabelValues(mc.attributes...).Inc() } -func (mc *metricContext) Observe(err error) error { +// ThrottledCount records the metrics for throttled request count. +func (mc *MetricContext) ThrottledCount() { + apiMetrics.throttledCount.WithLabelValues(mc.attributes...).Inc() +} + +// Observe observes the request latency and failed requests. +func (mc *MetricContext) Observe(err error) error { apiMetrics.latency.WithLabelValues(mc.attributes...).Observe( time.Since(mc.start).Seconds()) if err != nil { @@ -68,6 +79,7 @@ func (mc *metricContext) Observe(err error) error { return err } +// registerAPIMetrics registers the API metrics. func registerAPIMetrics(attributes ...string) *apiCallMetrics { metrics := &apiCallMetrics{ latency: metrics.NewHistogramVec( @@ -94,11 +106,20 @@ func registerAPIMetrics(attributes ...string) *apiCallMetrics { }, attributes, ), + throttledCount: metrics.NewCounterVec( + &metrics.CounterOpts{ + Name: "cloudprovider_azure_api_request_throttled_count", + Help: "Number of throttled Azure API calls", + StabilityLevel: metrics.ALPHA, + }, + attributes, + ), } legacyregistry.MustRegister(metrics.latency) legacyregistry.MustRegister(metrics.errors) legacyregistry.MustRegister(metrics.rateLimitedCount) + legacyregistry.MustRegister(metrics.throttledCount) return metrics } diff --git a/staging/src/k8s.io/legacy-cloud-providers/azure/azure_metrics_test.go b/staging/src/k8s.io/legacy-cloud-providers/azure/metrics/azure_metrics_test.go similarity index 88% rename from staging/src/k8s.io/legacy-cloud-providers/azure/azure_metrics_test.go rename to staging/src/k8s.io/legacy-cloud-providers/azure/metrics/azure_metrics_test.go index 286208e5e46..9af8b52c5af 100644 --- a/staging/src/k8s.io/legacy-cloud-providers/azure/azure_metrics_test.go +++ b/staging/src/k8s.io/legacy-cloud-providers/azure/metrics/azure_metrics_test.go @@ -16,7 +16,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package azure +package metrics import ( "testing" @@ -25,12 +25,12 @@ import ( ) func TestAzureMetricLabelCardinality(t *testing.T) { - mc := newMetricContext("test", "create", "resource_group", "subscription_id", "source") + mc := NewMetricContext("test", "create", "resource_group", "subscription_id", "source") assert.Len(t, mc.attributes, len(metricLabels), "cardinalities of labels and values must match") } func TestAzureMetricLabelPrefix(t *testing.T) { - mc := newMetricContext("prefix", "request", "resource_group", "subscription_id", "source") + mc := NewMetricContext("prefix", "request", "resource_group", "subscription_id", "source") found := false for _, attribute := range mc.attributes { if attribute == "prefix_request" { diff --git a/staging/src/k8s.io/legacy-cloud-providers/azure/metrics/doc.go b/staging/src/k8s.io/legacy-cloud-providers/azure/metrics/doc.go new file mode 100644 index 00000000000..5f9f4a096ff --- /dev/null +++ b/staging/src/k8s.io/legacy-cloud-providers/azure/metrics/doc.go @@ -0,0 +1,20 @@ +// +build !providerless + +/* +Copyright 2019 The Kubernetes Authors. + +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 metrics is an implementation of Azure CloudProvider metrics. +package metrics // import "k8s.io/legacy-cloud-providers/azure/metrics"