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 a273776ca62..593d01e938b 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 @@ -191,7 +191,9 @@ func newAzVirtualMachinesClient(config *azClientConfig) *azVirtualMachinesClient func (az *azVirtualMachinesClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, VMName string, parameters compute.VirtualMachine, source string) (resp *http.Response, err error) { // /* Write rate limiting */ + mc := newMetricContext("vm", "create_or_update", resourceGroupName, az.client.SubscriptionID, source) if !az.rateLimiterWriter.TryAccept() { + mc.RateLimitedCount() err = createRateLimitErr(true, "VMCreateOrUpdate") return } @@ -201,7 +203,6 @@ func (az *azVirtualMachinesClient) CreateOrUpdate(ctx context.Context, resourceG klog.V(10).Infof("azVirtualMachinesClient.CreateOrUpdate(%q, %q): end", resourceGroupName, VMName) }() - mc := newMetricContext("vm", "create_or_update", resourceGroupName, az.client.SubscriptionID, source) future, err := az.client.CreateOrUpdate(ctx, resourceGroupName, VMName, parameters) if err != nil { return future.Response(), err @@ -213,8 +214,10 @@ func (az *azVirtualMachinesClient) CreateOrUpdate(ctx context.Context, resourceG } func (az *azVirtualMachinesClient) Update(ctx context.Context, resourceGroupName string, VMName string, parameters compute.VirtualMachineUpdate, source string) (resp *http.Response, err error) { + mc := newMetricContext("vm", "update", resourceGroupName, az.client.SubscriptionID, source) // /* Write rate limiting */ if !az.rateLimiterWriter.TryAccept() { + mc.RateLimitedCount() err = createRateLimitErr(true, "VMUpdate") return } @@ -224,7 +227,6 @@ func (az *azVirtualMachinesClient) Update(ctx context.Context, resourceGroupName klog.V(10).Infof("azVirtualMachinesClient.Update(%q, %q): end", resourceGroupName, VMName) }() - mc := newMetricContext("vm", "update", resourceGroupName, az.client.SubscriptionID, source) future, err := az.client.Update(ctx, resourceGroupName, VMName, parameters) if err != nil { return future.Response(), err @@ -236,7 +238,9 @@ 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, err error) { + mc := newMetricContext("vm", "get", resourceGroupName, az.client.SubscriptionID, "") if !az.rateLimiterReader.TryAccept() { + mc.RateLimitedCount() err = createRateLimitErr(false, "VMGet") return } @@ -246,14 +250,15 @@ func (az *azVirtualMachinesClient) Get(ctx context.Context, resourceGroupName st klog.V(10).Infof("azVirtualMachinesClient.Get(%q, %q): end", resourceGroupName, VMName) }() - mc := newMetricContext("vm", "get", resourceGroupName, az.client.SubscriptionID, "") result, err = az.client.Get(ctx, resourceGroupName, VMName, expand) mc.Observe(err) return } func (az *azVirtualMachinesClient) List(ctx context.Context, resourceGroupName string) (result []compute.VirtualMachine, err error) { + mc := newMetricContext("vm", "list", resourceGroupName, az.client.SubscriptionID, "") if !az.rateLimiterReader.TryAccept() { + mc.RateLimitedCount() err = createRateLimitErr(false, "VMList") return } @@ -263,7 +268,6 @@ func (az *azVirtualMachinesClient) List(ctx context.Context, resourceGroupName s klog.V(10).Infof("azVirtualMachinesClient.List(%q): end", resourceGroupName) }() - mc := newMetricContext("vm", "list", resourceGroupName, az.client.SubscriptionID, "") iterator, err := az.client.ListComplete(ctx, resourceGroupName) mc.Observe(err) if err != nil { @@ -308,8 +312,10 @@ func newAzInterfacesClient(config *azClientConfig) *azInterfacesClient { } func (az *azInterfacesClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, networkInterfaceName string, parameters network.Interface) (resp *http.Response, err error) { + mc := newMetricContext("interfaces", "create_or_update", resourceGroupName, az.client.SubscriptionID, "") /* Write rate limiting */ if !az.rateLimiterWriter.TryAccept() { + mc.RateLimitedCount() err = createRateLimitErr(true, "NiCreateOrUpdate") return } @@ -319,7 +325,6 @@ func (az *azInterfacesClient) CreateOrUpdate(ctx context.Context, resourceGroupN klog.V(10).Infof("azInterfacesClient.CreateOrUpdate(%q,%q): end", resourceGroupName, networkInterfaceName) }() - mc := newMetricContext("interfaces", "create_or_update", resourceGroupName, az.client.SubscriptionID, "") future, err := az.client.CreateOrUpdate(ctx, resourceGroupName, networkInterfaceName, parameters) if err != nil { return future.Response(), mc.Observe(err) @@ -330,7 +335,9 @@ func (az *azInterfacesClient) CreateOrUpdate(ctx context.Context, resourceGroupN } func (az *azInterfacesClient) Get(ctx context.Context, resourceGroupName string, networkInterfaceName string, expand string) (result network.Interface, err error) { + mc := newMetricContext("interfaces", "get", resourceGroupName, az.client.SubscriptionID, "") if !az.rateLimiterReader.TryAccept() { + mc.RateLimitedCount() err = createRateLimitErr(false, "NicGet") return } @@ -340,14 +347,15 @@ func (az *azInterfacesClient) Get(ctx context.Context, resourceGroupName string, klog.V(10).Infof("azInterfacesClient.Get(%q,%q): end", resourceGroupName, networkInterfaceName) }() - mc := newMetricContext("interfaces", "get", resourceGroupName, az.client.SubscriptionID, "") result, err = az.client.Get(ctx, resourceGroupName, networkInterfaceName, expand) mc.Observe(err) return } func (az *azInterfacesClient) GetVirtualMachineScaleSetNetworkInterface(ctx context.Context, resourceGroupName string, virtualMachineScaleSetName string, virtualmachineIndex string, networkInterfaceName string, expand string) (result network.Interface, err error) { + mc := newMetricContext("interfaces", "get_vmss_ni", resourceGroupName, az.client.SubscriptionID, "") if !az.rateLimiterReader.TryAccept() { + mc.RateLimitedCount() err = createRateLimitErr(false, "NicGetVirtualMachineScaleSetNetworkInterface") return } @@ -357,7 +365,6 @@ func (az *azInterfacesClient) GetVirtualMachineScaleSetNetworkInterface(ctx cont klog.V(10).Infof("azInterfacesClient.GetVirtualMachineScaleSetNetworkInterface(%q,%q,%q,%q): end", resourceGroupName, virtualMachineScaleSetName, virtualmachineIndex, networkInterfaceName) }() - mc := newMetricContext("interfaces", "get_vmss_ni", resourceGroupName, az.client.SubscriptionID, "") result, err = az.client.GetVirtualMachineScaleSetNetworkInterface(ctx, resourceGroupName, virtualMachineScaleSetName, virtualmachineIndex, networkInterfaceName, expand) mc.Observe(err) return @@ -389,8 +396,10 @@ func newAzLoadBalancersClient(config *azClientConfig) *azLoadBalancersClient { } func (az *azLoadBalancersClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, loadBalancerName string, parameters network.LoadBalancer, etag string) (resp *http.Response, err error) { + mc := newMetricContext("load_balancers", "create_or_update", resourceGroupName, az.client.SubscriptionID, "") /* Write rate limiting */ if !az.rateLimiterWriter.TryAccept() { + mc.RateLimitedCount() err = createRateLimitErr(true, "LBCreateOrUpdate") return nil, err } @@ -400,7 +409,6 @@ func (az *azLoadBalancersClient) CreateOrUpdate(ctx context.Context, resourceGro klog.V(10).Infof("azLoadBalancersClient.CreateOrUpdate(%q,%q): end", resourceGroupName, loadBalancerName) }() - mc := newMetricContext("load_balancers", "create_or_update", resourceGroupName, az.client.SubscriptionID, "") req, err := az.createOrUpdatePreparer(ctx, resourceGroupName, loadBalancerName, parameters, etag) if err != nil { return nil, mc.Observe(err) @@ -443,8 +451,10 @@ func (az *azLoadBalancersClient) createOrUpdatePreparer(ctx context.Context, res } func (az *azLoadBalancersClient) Delete(ctx context.Context, resourceGroupName string, loadBalancerName string) (resp *http.Response, err error) { + mc := newMetricContext("load_balancers", "delete", resourceGroupName, az.client.SubscriptionID, "") /* Write rate limiting */ if !az.rateLimiterWriter.TryAccept() { + mc.RateLimitedCount() err = createRateLimitErr(true, "LBDelete") return nil, err } @@ -454,7 +464,6 @@ func (az *azLoadBalancersClient) Delete(ctx context.Context, resourceGroupName s klog.V(10).Infof("azLoadBalancersClient.Delete(%q,%q): end", resourceGroupName, loadBalancerName) }() - mc := newMetricContext("load_balancers", "delete", resourceGroupName, az.client.SubscriptionID, "") future, err := az.client.Delete(ctx, resourceGroupName, loadBalancerName) if err != nil { return future.Response(), mc.Observe(err) @@ -465,7 +474,9 @@ 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, err error) { + mc := newMetricContext("load_balancers", "get", resourceGroupName, az.client.SubscriptionID, "") if !az.rateLimiterReader.TryAccept() { + mc.RateLimitedCount() err = createRateLimitErr(false, "LBGet") return } @@ -475,14 +486,15 @@ func (az *azLoadBalancersClient) Get(ctx context.Context, resourceGroupName stri klog.V(10).Infof("azLoadBalancersClient.Get(%q,%q): end", resourceGroupName, loadBalancerName) }() - mc := newMetricContext("load_balancers", "get", resourceGroupName, az.client.SubscriptionID, "") result, err = az.client.Get(ctx, resourceGroupName, loadBalancerName, expand) mc.Observe(err) return } func (az *azLoadBalancersClient) List(ctx context.Context, resourceGroupName string) ([]network.LoadBalancer, error) { + mc := newMetricContext("load_balancers", "list", resourceGroupName, az.client.SubscriptionID, "") if !az.rateLimiterReader.TryAccept() { + mc.RateLimitedCount() err := createRateLimitErr(false, "LBList") return nil, err } @@ -492,7 +504,6 @@ func (az *azLoadBalancersClient) List(ctx context.Context, resourceGroupName str klog.V(10).Infof("azLoadBalancersClient.List(%q): end", resourceGroupName) }() - mc := newMetricContext("load_balancers", "list", resourceGroupName, az.client.SubscriptionID, "") iterator, err := az.client.ListComplete(ctx, resourceGroupName) mc.Observe(err) if err != nil { @@ -537,8 +548,10 @@ func newAzPublicIPAddressesClient(config *azClientConfig) *azPublicIPAddressesCl } func (az *azPublicIPAddressesClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, publicIPAddressName string, parameters network.PublicIPAddress) (resp *http.Response, err error) { + mc := newMetricContext("public_ip_addresses", "create_or_update", resourceGroupName, az.client.SubscriptionID, "") /* Write rate limiting */ if !az.rateLimiterWriter.TryAccept() { + mc.RateLimitedCount() err = createRateLimitErr(true, "PublicIPCreateOrUpdate") return nil, err } @@ -548,7 +561,6 @@ func (az *azPublicIPAddressesClient) CreateOrUpdate(ctx context.Context, resourc klog.V(10).Infof("azPublicIPAddressesClient.CreateOrUpdate(%q,%q): end", resourceGroupName, publicIPAddressName) }() - mc := newMetricContext("public_ip_addresses", "create_or_update", resourceGroupName, az.client.SubscriptionID, "") future, err := az.client.CreateOrUpdate(ctx, resourceGroupName, publicIPAddressName, parameters) if err != nil { return future.Response(), mc.Observe(err) @@ -559,8 +571,10 @@ func (az *azPublicIPAddressesClient) CreateOrUpdate(ctx context.Context, resourc } func (az *azPublicIPAddressesClient) Delete(ctx context.Context, resourceGroupName string, publicIPAddressName string) (resp *http.Response, err error) { + mc := newMetricContext("public_ip_addresses", "delete", resourceGroupName, az.client.SubscriptionID, "") /* Write rate limiting */ if !az.rateLimiterWriter.TryAccept() { + mc.RateLimitedCount() err = createRateLimitErr(true, "PublicIPDelete") return nil, err } @@ -570,7 +584,6 @@ func (az *azPublicIPAddressesClient) Delete(ctx context.Context, resourceGroupNa klog.V(10).Infof("azPublicIPAddressesClient.Delete(%q,%q): end", resourceGroupName, publicIPAddressName) }() - mc := newMetricContext("public_ip_addresses", "delete", resourceGroupName, az.client.SubscriptionID, "") future, err := az.client.Delete(ctx, resourceGroupName, publicIPAddressName) if err != nil { return future.Response(), mc.Observe(err) @@ -581,7 +594,9 @@ func (az *azPublicIPAddressesClient) Delete(ctx context.Context, resourceGroupNa } func (az *azPublicIPAddressesClient) Get(ctx context.Context, resourceGroupName string, publicIPAddressName string, expand string) (result network.PublicIPAddress, err error) { + mc := newMetricContext("public_ip_addresses", "get", resourceGroupName, az.client.SubscriptionID, "") if !az.rateLimiterReader.TryAccept() { + mc.RateLimitedCount() err = createRateLimitErr(false, "PublicIPGet") return } @@ -591,14 +606,15 @@ func (az *azPublicIPAddressesClient) Get(ctx context.Context, resourceGroupName klog.V(10).Infof("azPublicIPAddressesClient.Get(%q,%q): end", resourceGroupName, publicIPAddressName) }() - mc := newMetricContext("public_ip_addresses", "get", resourceGroupName, az.client.SubscriptionID, "") result, err = az.client.Get(ctx, resourceGroupName, publicIPAddressName, expand) mc.Observe(err) return } func (az *azPublicIPAddressesClient) GetVirtualMachineScaleSetPublicIPAddress(ctx context.Context, resourceGroupName string, virtualMachineScaleSetName string, virtualmachineIndex string, networkInterfaceName string, IPConfigurationName string, publicIPAddressName string, expand string) (result network.PublicIPAddress, err error) { + mc := newMetricContext("vmss_public_ip_addresses", "get", resourceGroupName, az.client.SubscriptionID, "") if !az.rateLimiterReader.TryAccept() { + mc.RateLimitedCount() err = createRateLimitErr(false, "VMSSPublicIPGet") return } @@ -608,14 +624,15 @@ func (az *azPublicIPAddressesClient) GetVirtualMachineScaleSetPublicIPAddress(ct klog.V(10).Infof("azPublicIPAddressesClient.GetVirtualMachineScaleSetPublicIPAddress(%q,%q): end", resourceGroupName, publicIPAddressName) }() - mc := newMetricContext("vmss_public_ip_addresses", "get", resourceGroupName, az.client.SubscriptionID, "") result, err = az.client.GetVirtualMachineScaleSetPublicIPAddress(ctx, resourceGroupName, virtualMachineScaleSetName, virtualmachineIndex, networkInterfaceName, IPConfigurationName, publicIPAddressName, expand) mc.Observe(err) return } func (az *azPublicIPAddressesClient) List(ctx context.Context, resourceGroupName string) ([]network.PublicIPAddress, error) { + mc := newMetricContext("public_ip_addresses", "list", resourceGroupName, az.client.SubscriptionID, "") if !az.rateLimiterReader.TryAccept() { + mc.RateLimitedCount() return nil, createRateLimitErr(false, "PublicIPList") } @@ -624,7 +641,6 @@ func (az *azPublicIPAddressesClient) List(ctx context.Context, resourceGroupName klog.V(10).Infof("azPublicIPAddressesClient.List(%q): end", resourceGroupName) }() - mc := newMetricContext("public_ip_addresses", "list", resourceGroupName, az.client.SubscriptionID, "") iterator, err := az.client.ListComplete(ctx, resourceGroupName) mc.Observe(err) if err != nil { @@ -669,8 +685,10 @@ func newAzSubnetsClient(config *azClientConfig) *azSubnetsClient { } func (az *azSubnetsClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, virtualNetworkName string, subnetName string, subnetParameters network.Subnet) (resp *http.Response, err error) { + mc := newMetricContext("subnets", "create_or_update", resourceGroupName, az.client.SubscriptionID, "") /* Write rate limiting */ if !az.rateLimiterWriter.TryAccept() { + mc.RateLimitedCount() err = createRateLimitErr(true, "SubnetCreateOrUpdate") return } @@ -680,7 +698,6 @@ func (az *azSubnetsClient) CreateOrUpdate(ctx context.Context, resourceGroupName klog.V(10).Infof("azSubnetsClient.CreateOrUpdate(%q,%q,%q): end", resourceGroupName, virtualNetworkName, subnetName) }() - mc := newMetricContext("subnets", "create_or_update", resourceGroupName, az.client.SubscriptionID, "") future, err := az.client.CreateOrUpdate(ctx, resourceGroupName, virtualNetworkName, subnetName, subnetParameters) if err != nil { return future.Response(), mc.Observe(err) @@ -691,8 +708,10 @@ func (az *azSubnetsClient) CreateOrUpdate(ctx context.Context, resourceGroupName } func (az *azSubnetsClient) Delete(ctx context.Context, resourceGroupName string, virtualNetworkName string, subnetName string) (resp *http.Response, err error) { + mc := newMetricContext("subnets", "delete", resourceGroupName, az.client.SubscriptionID, "") /* Write rate limiting */ if !az.rateLimiterWriter.TryAccept() { + mc.RateLimitedCount() err = createRateLimitErr(true, "SubnetDelete") return } @@ -702,7 +721,6 @@ func (az *azSubnetsClient) Delete(ctx context.Context, resourceGroupName string, klog.V(10).Infof("azSubnetsClient.Delete(%q,%q,%q): end", resourceGroupName, virtualNetworkName, subnetName) }() - mc := newMetricContext("subnets", "delete", resourceGroupName, az.client.SubscriptionID, "") future, err := az.client.Delete(ctx, resourceGroupName, virtualNetworkName, subnetName) if err != nil { return future.Response(), mc.Observe(err) @@ -713,7 +731,9 @@ 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, err error) { + mc := newMetricContext("subnets", "get", resourceGroupName, az.client.SubscriptionID, "") if !az.rateLimiterReader.TryAccept() { + mc.RateLimitedCount() err = createRateLimitErr(false, "SubnetGet") return } @@ -723,14 +743,15 @@ func (az *azSubnetsClient) Get(ctx context.Context, resourceGroupName string, vi klog.V(10).Infof("azSubnetsClient.Get(%q,%q,%q): end", resourceGroupName, virtualNetworkName, subnetName) }() - mc := newMetricContext("subnets", "get", resourceGroupName, az.client.SubscriptionID, "") result, err = az.client.Get(ctx, resourceGroupName, virtualNetworkName, subnetName, expand) mc.Observe(err) return } func (az *azSubnetsClient) List(ctx context.Context, resourceGroupName string, virtualNetworkName string) ([]network.Subnet, error) { + mc := newMetricContext("subnets", "list", resourceGroupName, az.client.SubscriptionID, "") if !az.rateLimiterReader.TryAccept() { + mc.RateLimitedCount() return nil, createRateLimitErr(false, "SubnetList") } @@ -739,7 +760,6 @@ func (az *azSubnetsClient) List(ctx context.Context, resourceGroupName string, v klog.V(10).Infof("azSubnetsClient.List(%q,%q): end", resourceGroupName, virtualNetworkName) }() - mc := newMetricContext("subnets", "list", resourceGroupName, az.client.SubscriptionID, "") iterator, err := az.client.ListComplete(ctx, resourceGroupName, virtualNetworkName) mc.Observe(err) if err != nil { @@ -784,8 +804,10 @@ func newAzSecurityGroupsClient(config *azClientConfig) *azSecurityGroupsClient { } func (az *azSecurityGroupsClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, networkSecurityGroupName string, parameters network.SecurityGroup, etag string) (resp *http.Response, err error) { + mc := newMetricContext("security_groups", "create_or_update", resourceGroupName, az.client.SubscriptionID, "") /* Write rate limiting */ if !az.rateLimiterWriter.TryAccept() { + mc.RateLimitedCount() err = createRateLimitErr(true, "NSGCreateOrUpdate") return } @@ -795,7 +817,6 @@ func (az *azSecurityGroupsClient) CreateOrUpdate(ctx context.Context, resourceGr klog.V(10).Infof("azSecurityGroupsClient.CreateOrUpdate(%q,%q): end", resourceGroupName, networkSecurityGroupName) }() - mc := newMetricContext("security_groups", "create_or_update", resourceGroupName, az.client.SubscriptionID, "") req, err := az.createOrUpdatePreparer(ctx, resourceGroupName, networkSecurityGroupName, parameters, etag) if err != nil { return nil, mc.Observe(err) @@ -838,8 +859,10 @@ func (az *azSecurityGroupsClient) createOrUpdatePreparer(ctx context.Context, re } func (az *azSecurityGroupsClient) Delete(ctx context.Context, resourceGroupName string, networkSecurityGroupName string) (resp *http.Response, err error) { + mc := newMetricContext("security_groups", "delete", resourceGroupName, az.client.SubscriptionID, "") /* Write rate limiting */ if !az.rateLimiterWriter.TryAccept() { + mc.RateLimitedCount() err = createRateLimitErr(true, "NSGDelete") return } @@ -849,7 +872,6 @@ func (az *azSecurityGroupsClient) Delete(ctx context.Context, resourceGroupName klog.V(10).Infof("azSecurityGroupsClient.Delete(%q,%q): end", resourceGroupName, networkSecurityGroupName) }() - mc := newMetricContext("security_groups", "delete", resourceGroupName, az.client.SubscriptionID, "") future, err := az.client.Delete(ctx, resourceGroupName, networkSecurityGroupName) if err != nil { return future.Response(), mc.Observe(err) @@ -860,7 +882,9 @@ func (az *azSecurityGroupsClient) Delete(ctx context.Context, resourceGroupName } func (az *azSecurityGroupsClient) Get(ctx context.Context, resourceGroupName string, networkSecurityGroupName string, expand string) (result network.SecurityGroup, err error) { + mc := newMetricContext("security_groups", "get", resourceGroupName, az.client.SubscriptionID, "") if !az.rateLimiterReader.TryAccept() { + mc.RateLimitedCount() err = createRateLimitErr(false, "NSGGet") return } @@ -870,14 +894,15 @@ func (az *azSecurityGroupsClient) Get(ctx context.Context, resourceGroupName str klog.V(10).Infof("azSecurityGroupsClient.Get(%q,%q): end", resourceGroupName, networkSecurityGroupName) }() - mc := newMetricContext("security_groups", "get", resourceGroupName, az.client.SubscriptionID, "") result, err = az.client.Get(ctx, resourceGroupName, networkSecurityGroupName, expand) mc.Observe(err) return } func (az *azSecurityGroupsClient) List(ctx context.Context, resourceGroupName string) ([]network.SecurityGroup, error) { + mc := newMetricContext("security_groups", "list", resourceGroupName, az.client.SubscriptionID, "") if !az.rateLimiterReader.TryAccept() { + mc.RateLimitedCount() return nil, createRateLimitErr(false, "NSGList") } @@ -886,7 +911,6 @@ func (az *azSecurityGroupsClient) List(ctx context.Context, resourceGroupName st klog.V(10).Infof("azSecurityGroupsClient.List(%q): end", resourceGroupName) }() - mc := newMetricContext("security_groups", "list", resourceGroupName, az.client.SubscriptionID, "") iterator, err := az.client.ListComplete(ctx, resourceGroupName) mc.Observe(err) if err != nil { @@ -931,7 +955,9 @@ func newAzVirtualMachineScaleSetsClient(config *azClientConfig) *azVirtualMachin } func (az *azVirtualMachineScaleSetsClient) Get(ctx context.Context, resourceGroupName string, VMScaleSetName string) (result compute.VirtualMachineScaleSet, err error) { + mc := newMetricContext("vmss", "get", resourceGroupName, az.client.SubscriptionID, "") if !az.rateLimiterReader.TryAccept() { + mc.RateLimitedCount() err = createRateLimitErr(false, "VMSSGet") return } @@ -941,14 +967,15 @@ func (az *azVirtualMachineScaleSetsClient) Get(ctx context.Context, resourceGrou klog.V(10).Infof("azVirtualMachineScaleSetsClient.Get(%q,%q): end", resourceGroupName, VMScaleSetName) }() - mc := newMetricContext("vmss", "get", resourceGroupName, az.client.SubscriptionID, "") result, err = az.client.Get(ctx, resourceGroupName, VMScaleSetName) mc.Observe(err) return } func (az *azVirtualMachineScaleSetsClient) List(ctx context.Context, resourceGroupName string) (result []compute.VirtualMachineScaleSet, err error) { + mc := newMetricContext("vmss", "list", resourceGroupName, az.client.SubscriptionID, "") if !az.rateLimiterReader.TryAccept() { + mc.RateLimitedCount() err = createRateLimitErr(false, "VMSSList") return } @@ -958,7 +985,6 @@ func (az *azVirtualMachineScaleSetsClient) List(ctx context.Context, resourceGro klog.V(10).Infof("azVirtualMachineScaleSetsClient.List(%q): end", resourceGroupName) }() - mc := newMetricContext("vmss", "list", resourceGroupName, az.client.SubscriptionID, "") iterator, err := az.client.ListComplete(ctx, resourceGroupName) mc.Observe(err) if err != nil { @@ -978,8 +1004,10 @@ func (az *azVirtualMachineScaleSetsClient) List(ctx context.Context, resourceGro } func (az *azVirtualMachineScaleSetsClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, vmScaleSetName string, parameters compute.VirtualMachineScaleSet) (resp *http.Response, err error) { + mc := newMetricContext("vmss", "create_or_update", resourceGroupName, az.client.SubscriptionID, "") /* Write rate limiting */ if !az.rateLimiterWriter.TryAccept() { + mc.RateLimitedCount() err = createRateLimitErr(true, "NiCreateOrUpdate") return } @@ -989,7 +1017,6 @@ func (az *azVirtualMachineScaleSetsClient) CreateOrUpdate(ctx context.Context, r klog.V(10).Infof("azVirtualMachineScaleSetsClient.CreateOrUpdate(%q,%q): end", resourceGroupName, vmScaleSetName) }() - mc := newMetricContext("vmss", "create_or_update", resourceGroupName, az.client.SubscriptionID, "") future, err := az.client.CreateOrUpdate(ctx, resourceGroupName, vmScaleSetName, parameters) if err != nil { return future.Response(), mc.Observe(err) @@ -1025,7 +1052,9 @@ func newAzVirtualMachineScaleSetVMsClient(config *azClientConfig) *azVirtualMach } func (az *azVirtualMachineScaleSetVMsClient) Get(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string) (result compute.VirtualMachineScaleSetVM, err error) { + mc := newMetricContext("vmssvm", "get", resourceGroupName, az.client.SubscriptionID, "") if !az.rateLimiterReader.TryAccept() { + mc.RateLimitedCount() err = createRateLimitErr(false, "VMSSGet") return } @@ -1035,14 +1064,15 @@ func (az *azVirtualMachineScaleSetVMsClient) Get(ctx context.Context, resourceGr klog.V(10).Infof("azVirtualMachineScaleSetVMsClient.Get(%q,%q,%q): end", resourceGroupName, VMScaleSetName, instanceID) }() - mc := newMetricContext("vmssvm", "get", resourceGroupName, az.client.SubscriptionID, "") result, err = az.client.Get(ctx, resourceGroupName, VMScaleSetName, instanceID) mc.Observe(err) return } func (az *azVirtualMachineScaleSetVMsClient) GetInstanceView(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string) (result compute.VirtualMachineScaleSetVMInstanceView, err error) { + mc := newMetricContext("vmssvm", "get_instance_view", resourceGroupName, az.client.SubscriptionID, "") if !az.rateLimiterReader.TryAccept() { + mc.RateLimitedCount() err = createRateLimitErr(false, "VMSSGetInstanceView") return } @@ -1052,14 +1082,15 @@ func (az *azVirtualMachineScaleSetVMsClient) GetInstanceView(ctx context.Context klog.V(10).Infof("azVirtualMachineScaleSetVMsClient.GetInstanceView(%q,%q,%q): end", resourceGroupName, VMScaleSetName, instanceID) }() - mc := newMetricContext("vmssvm", "get_instance_view", resourceGroupName, az.client.SubscriptionID, "") result, err = az.client.GetInstanceView(ctx, resourceGroupName, VMScaleSetName, instanceID) mc.Observe(err) return } func (az *azVirtualMachineScaleSetVMsClient) List(ctx context.Context, resourceGroupName string, virtualMachineScaleSetName string, filter string, selectParameter string, expand string) (result []compute.VirtualMachineScaleSetVM, err error) { + mc := newMetricContext("vmssvm", "list", resourceGroupName, az.client.SubscriptionID, "") if !az.rateLimiterReader.TryAccept() { + mc.RateLimitedCount() err = createRateLimitErr(false, "VMSSList") return } @@ -1069,7 +1100,6 @@ func (az *azVirtualMachineScaleSetVMsClient) List(ctx context.Context, resourceG klog.V(10).Infof("azVirtualMachineScaleSetVMsClient.List(%q,%q,%q): end", resourceGroupName, virtualMachineScaleSetName, filter) }() - mc := newMetricContext("vmssvm", "list", resourceGroupName, az.client.SubscriptionID, "") iterator, err := az.client.ListComplete(ctx, resourceGroupName, virtualMachineScaleSetName, filter, selectParameter, expand) mc.Observe(err) if err != nil { @@ -1089,7 +1119,9 @@ func (az *azVirtualMachineScaleSetVMsClient) List(ctx context.Context, resourceG } func (az *azVirtualMachineScaleSetVMsClient) Update(ctx context.Context, resourceGroupName string, VMScaleSetName string, instanceID string, parameters compute.VirtualMachineScaleSetVM, source string) (resp *http.Response, err error) { + mc := newMetricContext("vmssvm", "create_or_update", resourceGroupName, az.client.SubscriptionID, source) if !az.rateLimiterWriter.TryAccept() { + mc.RateLimitedCount() err = createRateLimitErr(true, "VMSSVMUpdate") return } @@ -1099,7 +1131,6 @@ func (az *azVirtualMachineScaleSetVMsClient) Update(ctx context.Context, resourc klog.V(10).Infof("azVirtualMachineScaleSetVMsClient.Update(%q,%q,%q): end", resourceGroupName, VMScaleSetName, instanceID) }() - mc := newMetricContext("vmssvm", "create_or_update", resourceGroupName, az.client.SubscriptionID, source) future, err := az.client.Update(ctx, resourceGroupName, VMScaleSetName, instanceID, parameters) if err != nil { return future.Response(), mc.Observe(err) @@ -1135,8 +1166,10 @@ func newAzRoutesClient(config *azClientConfig) *azRoutesClient { } func (az *azRoutesClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, routeTableName string, routeName string, routeParameters network.Route, etag string) (resp *http.Response, err error) { + mc := newMetricContext("routes", "create_or_update", resourceGroupName, az.client.SubscriptionID, "") /* Write rate limiting */ if !az.rateLimiterWriter.TryAccept() { + mc.RateLimitedCount() err = createRateLimitErr(true, "RouteCreateOrUpdate") return } @@ -1146,7 +1179,6 @@ func (az *azRoutesClient) CreateOrUpdate(ctx context.Context, resourceGroupName klog.V(10).Infof("azRoutesClient.CreateOrUpdate(%q,%q,%q): end", resourceGroupName, routeTableName, routeName) }() - mc := newMetricContext("routes", "create_or_update", resourceGroupName, az.client.SubscriptionID, "") req, err := az.createOrUpdatePreparer(ctx, resourceGroupName, routeTableName, routeName, routeParameters, etag) if err != nil { mc.Observe(err) @@ -1192,8 +1224,10 @@ func (az *azRoutesClient) createOrUpdatePreparer(ctx context.Context, resourceGr } func (az *azRoutesClient) Delete(ctx context.Context, resourceGroupName string, routeTableName string, routeName string) (resp *http.Response, err error) { + mc := newMetricContext("routes", "delete", resourceGroupName, az.client.SubscriptionID, "") /* Write rate limiting */ if !az.rateLimiterWriter.TryAccept() { + mc.RateLimitedCount() err = createRateLimitErr(true, "RouteDelete") return } @@ -1203,7 +1237,6 @@ func (az *azRoutesClient) Delete(ctx context.Context, resourceGroupName string, klog.V(10).Infof("azRoutesClient.Delete(%q,%q,%q): end", resourceGroupName, routeTableName, routeName) }() - mc := newMetricContext("routes", "delete", resourceGroupName, az.client.SubscriptionID, "") future, err := az.client.Delete(ctx, resourceGroupName, routeTableName, routeName) if err != nil { return future.Response(), mc.Observe(err) @@ -1239,8 +1272,10 @@ func newAzRouteTablesClient(config *azClientConfig) *azRouteTablesClient { } func (az *azRouteTablesClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, routeTableName string, parameters network.RouteTable, etag string) (resp *http.Response, err error) { + mc := newMetricContext("route_tables", "create_or_update", resourceGroupName, az.client.SubscriptionID, "") /* Write rate limiting */ if !az.rateLimiterWriter.TryAccept() { + mc.RateLimitedCount() err = createRateLimitErr(true, "RouteTableCreateOrUpdate") return } @@ -1250,7 +1285,6 @@ func (az *azRouteTablesClient) CreateOrUpdate(ctx context.Context, resourceGroup klog.V(10).Infof("azRouteTablesClient.CreateOrUpdate(%q,%q): end", resourceGroupName, routeTableName) }() - mc := newMetricContext("route_tables", "create_or_update", resourceGroupName, az.client.SubscriptionID, "") req, err := az.createOrUpdatePreparer(ctx, resourceGroupName, routeTableName, parameters, etag) if err != nil { return nil, mc.Observe(err) @@ -1293,7 +1327,9 @@ func (az *azRouteTablesClient) createOrUpdatePreparer(ctx context.Context, resou } func (az *azRouteTablesClient) Get(ctx context.Context, resourceGroupName string, routeTableName string, expand string) (result network.RouteTable, err error) { + mc := newMetricContext("route_tables", "get", resourceGroupName, az.client.SubscriptionID, "") if !az.rateLimiterReader.TryAccept() { + mc.RateLimitedCount() err = createRateLimitErr(false, "GetRouteTable") return } @@ -1303,7 +1339,6 @@ func (az *azRouteTablesClient) Get(ctx context.Context, resourceGroupName string klog.V(10).Infof("azRouteTablesClient.Get(%q,%q): end", resourceGroupName, routeTableName) }() - mc := newMetricContext("route_tables", "get", resourceGroupName, az.client.SubscriptionID, "") result, err = az.client.Get(ctx, resourceGroupName, routeTableName, expand) mc.Observe(err) return @@ -1334,8 +1369,10 @@ func newAzStorageAccountClient(config *azClientConfig) *azStorageAccountClient { } func (az *azStorageAccountClient) Create(ctx context.Context, resourceGroupName string, accountName string, parameters storage.AccountCreateParameters) (result *http.Response, err error) { + mc := newMetricContext("storage_account", "create", resourceGroupName, az.client.SubscriptionID, "") /* Write rate limiting */ if !az.rateLimiterWriter.TryAccept() { + mc.RateLimitedCount() err = createRateLimitErr(true, "StorageAccountCreate") return } @@ -1345,7 +1382,6 @@ func (az *azStorageAccountClient) Create(ctx context.Context, resourceGroupName klog.V(10).Infof("azStorageAccountClient.Create(%q,%q): end", resourceGroupName, accountName) }() - mc := newMetricContext("storage_account", "create", resourceGroupName, az.client.SubscriptionID, "") future, err := az.client.Create(ctx, resourceGroupName, accountName, parameters) if err != nil { return future.Response(), err @@ -1357,7 +1393,9 @@ func (az *azStorageAccountClient) Create(ctx context.Context, resourceGroupName } func (az *azStorageAccountClient) Delete(ctx context.Context, resourceGroupName string, accountName string) (result autorest.Response, err error) { + mc := newMetricContext("storage_account", "delete", resourceGroupName, az.client.SubscriptionID, "") if !az.rateLimiterReader.TryAccept() { + mc.RateLimitedCount() err = createRateLimitErr(false, "DeleteStorageAccount") return } @@ -1367,14 +1405,15 @@ func (az *azStorageAccountClient) Delete(ctx context.Context, resourceGroupName klog.V(10).Infof("azStorageAccountClient.Delete(%q,%q): end", resourceGroupName, accountName) }() - mc := newMetricContext("storage_account", "delete", resourceGroupName, az.client.SubscriptionID, "") result, err = az.client.Delete(ctx, resourceGroupName, accountName) mc.Observe(err) return } func (az *azStorageAccountClient) ListKeys(ctx context.Context, resourceGroupName string, accountName string) (result storage.AccountListKeysResult, err error) { + mc := newMetricContext("storage_account", "list_keys", resourceGroupName, az.client.SubscriptionID, "") if !az.rateLimiterReader.TryAccept() { + mc.RateLimitedCount() err = createRateLimitErr(false, "ListStorageAccountKeys") return } @@ -1384,14 +1423,15 @@ func (az *azStorageAccountClient) ListKeys(ctx context.Context, resourceGroupNam klog.V(10).Infof("azStorageAccountClient.ListKeys(%q,%q): end", resourceGroupName, accountName) }() - mc := newMetricContext("storage_account", "list_keys", resourceGroupName, az.client.SubscriptionID, "") result, err = az.client.ListKeys(ctx, resourceGroupName, accountName) mc.Observe(err) return } func (az *azStorageAccountClient) ListByResourceGroup(ctx context.Context, resourceGroupName string) (result storage.AccountListResult, err error) { + mc := newMetricContext("storage_account", "list_by_resource_group", resourceGroupName, az.client.SubscriptionID, "") if !az.rateLimiterReader.TryAccept() { + mc.RateLimitedCount() err = createRateLimitErr(false, "ListStorageAccountsByResourceGroup") return } @@ -1401,14 +1441,15 @@ func (az *azStorageAccountClient) ListByResourceGroup(ctx context.Context, resou klog.V(10).Infof("azStorageAccountClient.ListByResourceGroup(%q): end", resourceGroupName) }() - mc := newMetricContext("storage_account", "list_by_resource_group", resourceGroupName, az.client.SubscriptionID, "") result, err = az.client.ListByResourceGroup(ctx, resourceGroupName) mc.Observe(err) return } func (az *azStorageAccountClient) GetProperties(ctx context.Context, resourceGroupName string, accountName string) (result storage.Account, err error) { + mc := newMetricContext("storage_account", "get_properties", resourceGroupName, az.client.SubscriptionID, "") if !az.rateLimiterReader.TryAccept() { + mc.RateLimitedCount() err = createRateLimitErr(false, "GetStorageAccount/Properties") return } @@ -1418,7 +1459,6 @@ func (az *azStorageAccountClient) GetProperties(ctx context.Context, resourceGro klog.V(10).Infof("azStorageAccountClient.GetProperties(%q,%q): end", resourceGroupName, accountName) }() - mc := newMetricContext("storage_account", "get_properties", resourceGroupName, az.client.SubscriptionID, "") result, err = az.client.GetProperties(ctx, resourceGroupName, accountName, "") mc.Observe(err) return @@ -1449,8 +1489,10 @@ func newAzDisksClient(config *azClientConfig) *azDisksClient { } func (az *azDisksClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, diskName string, diskParameter compute.Disk) (resp *http.Response, err error) { + mc := newMetricContext("disks", "create_or_update", resourceGroupName, az.client.SubscriptionID, "") /* Write rate limiting */ if !az.rateLimiterWriter.TryAccept() { + mc.RateLimitedCount() err = createRateLimitErr(true, "DiskCreateOrUpdate") return } @@ -1460,7 +1502,6 @@ func (az *azDisksClient) CreateOrUpdate(ctx context.Context, resourceGroupName s klog.V(10).Infof("azDisksClient.CreateOrUpdate(%q,%q): end", resourceGroupName, diskName) }() - mc := newMetricContext("disks", "create_or_update", resourceGroupName, az.client.SubscriptionID, "") future, err := az.client.CreateOrUpdate(ctx, resourceGroupName, diskName, diskParameter) if err != nil { return future.Response(), mc.Observe(err) @@ -1471,8 +1512,10 @@ func (az *azDisksClient) CreateOrUpdate(ctx context.Context, resourceGroupName s } func (az *azDisksClient) Delete(ctx context.Context, resourceGroupName string, diskName string) (resp *http.Response, err error) { + mc := newMetricContext("disks", "delete", resourceGroupName, az.client.SubscriptionID, "") /* Write rate limiting */ if !az.rateLimiterWriter.TryAccept() { + mc.RateLimitedCount() err = createRateLimitErr(true, "DiskDelete") return } @@ -1482,18 +1525,18 @@ func (az *azDisksClient) Delete(ctx context.Context, resourceGroupName string, d klog.V(10).Infof("azDisksClient.Delete(%q,%q): end", resourceGroupName, diskName) }() - mc := newMetricContext("disks", "delete", resourceGroupName, az.client.SubscriptionID, "") future, err := az.client.Delete(ctx, resourceGroupName, diskName) if err != nil { return future.Response(), mc.Observe(err) } - err = future.WaitForCompletionRef(ctx, az.client.Client) return future.Response(), mc.Observe(err) } func (az *azDisksClient) Get(ctx context.Context, resourceGroupName string, diskName string) (result compute.Disk, err error) { + mc := newMetricContext("disks", "get", resourceGroupName, az.client.SubscriptionID, "") if !az.rateLimiterReader.TryAccept() { + mc.RateLimitedCount() err = createRateLimitErr(false, "GetDisk") return } @@ -1503,7 +1546,6 @@ func (az *azDisksClient) Get(ctx context.Context, resourceGroupName string, disk klog.V(10).Infof("azDisksClient.Get(%q,%q): end", resourceGroupName, diskName) }() - mc := newMetricContext("disks", "get", resourceGroupName, az.client.SubscriptionID, "") result, err = az.client.Get(ctx, resourceGroupName, diskName) mc.Observe(err) return @@ -1547,7 +1589,9 @@ func newAzVirtualMachineSizesClient(config *azClientConfig) *azVirtualMachineSiz } func (az *azVirtualMachineSizesClient) List(ctx context.Context, location string) (result compute.VirtualMachineSizeListResult, err error) { + mc := newMetricContext("vmsizes", "list", "", az.client.SubscriptionID, "") if !az.rateLimiterReader.TryAccept() { + mc.RateLimitedCount() err = createRateLimitErr(false, "VMSizesList") return } @@ -1557,7 +1601,6 @@ func (az *azVirtualMachineSizesClient) List(ctx context.Context, location string klog.V(10).Infof("azVirtualMachineSizesClient.List(%q): end", location) }() - mc := newMetricContext("vmsizes", "list", "", az.client.SubscriptionID, "") result, err = az.client.List(ctx, location) mc.Observe(err) return diff --git a/staging/src/k8s.io/legacy-cloud-providers/azure/azure_metrics.go b/staging/src/k8s.io/legacy-cloud-providers/azure/azure_metrics.go index 3ba202756d5..999a4a2b639 100644 --- a/staging/src/k8s.io/legacy-cloud-providers/azure/azure_metrics.go +++ b/staging/src/k8s.io/legacy-cloud-providers/azure/azure_metrics.go @@ -27,8 +27,9 @@ import ( ) type apiCallMetrics struct { - latency *metrics.HistogramVec - errors *metrics.CounterVec + latency *metrics.HistogramVec + errors *metrics.CounterVec + rateLimitedCount *metrics.CounterVec } var ( @@ -53,6 +54,9 @@ func newMetricContext(prefix, request, resourceGroup, subscriptionID, source str attributes: []string{prefix + "_" + request, strings.ToLower(resourceGroup), subscriptionID, source}, } } +func (mc *metricContext) RateLimitedCount() { + apiMetrics.rateLimitedCount.WithLabelValues(mc.attributes...).Inc() +} func (mc *metricContext) Observe(err error) error { apiMetrics.latency.WithLabelValues(mc.attributes...).Observe( @@ -82,10 +86,19 @@ func registerAPIMetrics(attributes ...string) *apiCallMetrics { }, attributes, ), + rateLimitedCount: metrics.NewCounterVec( + &metrics.CounterOpts{ + Name: "cloudprovider_azure_api_request_ratelimited_count", + Help: "Number of rate limited Azure API calls", + StabilityLevel: metrics.ALPHA, + }, + attributes, + ), } legacyregistry.MustRegister(metrics.latency) legacyregistry.MustRegister(metrics.errors) + legacyregistry.MustRegister(metrics.rateLimitedCount) return metrics }