Skip to content

Commit 17906d1

Browse files
authored
Merge pull request #529 from nilo19/feature/add-operation-metrics
Add metrics for azure disk attach and detach operations
2 parents 99f9f91 + 6d353f3 commit 17906d1

File tree

14 files changed

+349
-69
lines changed

14 files changed

+349
-69
lines changed

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ replace (
5757
k8s.io/kube-scheduler => k8s.io/kube-scheduler v0.18.1
5858
k8s.io/kubectl => k8s.io/kubectl v0.18.1
5959
k8s.io/kubelet => k8s.io/kubelet v0.18.1
60-
k8s.io/legacy-cloud-providers => k8s.io/legacy-cloud-providers v0.0.0-20200828174542-4c4df1c2abb3
60+
k8s.io/legacy-cloud-providers => k8s.io/legacy-cloud-providers v0.0.0-20200908054054-791ca33c5f97
6161
k8s.io/metrics => k8s.io/metrics v0.18.1
6262
k8s.io/sample-apiserver => k8s.io/sample-apiserver v0.18.1
6363
k8s.io/sample-cli-plugin => k8s.io/sample-cli-plugin v0.18.1

go.sum

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -18,24 +18,16 @@ github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX
1818
github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs=
1919
github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24=
2020
github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI=
21-
github.com/Azure/go-autorest/autorest v0.9.6 h1:5YWtOnckcudzIw8lPPBcWOnmIFWMtHci1ZWAZulMSx0=
22-
github.com/Azure/go-autorest/autorest v0.9.6/go.mod h1:/FALq9T/kS7b5J5qsQ+RSTUdAmGFqi0vUdVNNx8q630=
2321
github.com/Azure/go-autorest/autorest v0.11.1 h1:eVvIXUKiTgv++6YnWb42DUA1YL7qDugnKP0HljexdnQ=
2422
github.com/Azure/go-autorest/autorest v0.11.1/go.mod h1:JFgpikqFJ/MleTTxwepExTKnFUKKszPS8UavbQYUMuw=
2523
github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0=
26-
github.com/Azure/go-autorest/autorest/adal v0.8.2 h1:O1X4oexUxnZCaEUGsvMnr8ZGj8HI37tNezwY4npRqA0=
27-
github.com/Azure/go-autorest/autorest/adal v0.8.2/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q=
2824
github.com/Azure/go-autorest/autorest/adal v0.9.0 h1:SigMbuFNuKgc1xcGhaeapbh+8fgsu+GxgDRFyg7f5lM=
2925
github.com/Azure/go-autorest/autorest/adal v0.9.0/go.mod h1:/c022QCutn2P7uY+/oQWWNcK9YU+MH96NgK+jErpbcg=
3026
github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA=
31-
github.com/Azure/go-autorest/autorest/date v0.2.0 h1:yW+Zlqf26583pE43KhfnhFcdmSWlm5Ew6bxipnr/tbM=
32-
github.com/Azure/go-autorest/autorest/date v0.2.0/go.mod h1:vcORJHLJEh643/Ioh9+vPmf1Ij9AEBM5FuBIXLmIy0g=
3327
github.com/Azure/go-autorest/autorest/date v0.3.0 h1:7gUk1U5M/CQbp9WoqinNzJar+8KY+LPI6wiWrP/myHw=
3428
github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74=
3529
github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0=
3630
github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0=
37-
github.com/Azure/go-autorest/autorest/mocks v0.3.0 h1:qJumjCaCudz+OcqE9/XtEPfvtOjOmKaui4EOpFI6zZc=
38-
github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM=
3931
github.com/Azure/go-autorest/autorest/mocks v0.4.0 h1:z20OWOSG5aCye0HEkDp6TPmP17ZcfeMxPi6HnSALa8c=
4032
github.com/Azure/go-autorest/autorest/mocks v0.4.0/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k=
4133
github.com/Azure/go-autorest/autorest/to v0.2.0 h1:nQOZzFCudTh+TvquAtCRjM01VEYx85e9qbwt5ncW4L8=
@@ -625,7 +617,6 @@ golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8U
625617
golang.org/x/crypto v0.0.0-20190617133340-57b3e21c3d56/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
626618
golang.org/x/crypto v0.0.0-20191002192127-34f69633bfdc/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
627619
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
628-
golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
629620
golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975 h1:/Tl7pH94bvbAAHBdZJT947M/+gp0+CqQXDtMRC0fseo=
630621
golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
631622
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI=
@@ -890,8 +881,8 @@ k8s.io/kubelet v0.18.1/go.mod h1:wlhv8yVMnbTp0haWYfuOzD7fqq7F35bWcIFIpdy9w9A=
890881
k8s.io/kubernetes v1.18.0/go.mod h1:z8xjOOO1Ljz+TaHpOxVGC7cxtF32TesIamoQ+BZrVS0=
891882
k8s.io/kubernetes v1.18.1 h1:qW6zgSY96X/NO+ueIIfsFSbHl/e0Txio62XcA4cxpIk=
892883
k8s.io/kubernetes v1.18.1/go.mod h1:z8xjOOO1Ljz+TaHpOxVGC7cxtF32TesIamoQ+BZrVS0=
893-
k8s.io/legacy-cloud-providers v0.0.0-20200828174542-4c4df1c2abb3 h1:wQ8fA2e+k3PFVMPajA0/949gLLU5K5znvJrF/inyzBs=
894-
k8s.io/legacy-cloud-providers v0.0.0-20200828174542-4c4df1c2abb3/go.mod h1:YiPGYdLuUwrKo1uDg8WoVglo/MCiPJfFm0saBkKzRvQ=
884+
k8s.io/legacy-cloud-providers v0.0.0-20200908054054-791ca33c5f97 h1:fsYwdlbG/7Wf83jvz3MySA7plN6suPwYzLnnBvZ2Uu4=
885+
k8s.io/legacy-cloud-providers v0.0.0-20200908054054-791ca33c5f97/go.mod h1:nlTotr+n9VrJb9HTfWDgz/TRjZioQS19XsQfZGsqtT0=
895886
k8s.io/metrics v0.18.1/go.mod h1:UnoYSbaiakbuBYgpDEsXjVjk843af/WRHNPR3Wx+2XI=
896887
k8s.io/repo-infra v0.0.1-alpha.1/go.mod h1:wO1t9WaB99V80ljbeENTnayuEEwNZt7gECYh/CEyOJ8=
897888
k8s.io/sample-apiserver v0.18.1/go.mod h1:ir6PkLhIblVb9nNHzd8LG77QW4mhQAwahznNAIHhOEM=

pkg/azuredisk/controllerserver.go

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,18 @@ import (
2929
"github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2019-06-01/storage"
3030
"github.com/container-storage-interface/spec/lib/go/csi"
3131
"github.com/golang/protobuf/ptypes"
32+
3233
"google.golang.org/grpc/codes"
3334
"google.golang.org/grpc/status"
35+
3436
v1 "k8s.io/api/core/v1"
3537
"k8s.io/apimachinery/pkg/api/resource"
3638
"k8s.io/apimachinery/pkg/types"
3739
cloudprovider "k8s.io/cloud-provider"
3840
volerr "k8s.io/cloud-provider/volume/errors"
3941
"k8s.io/klog/v2"
4042
"k8s.io/legacy-cloud-providers/azure"
43+
"k8s.io/legacy-cloud-providers/azure/metrics"
4144
)
4245

4346
var (
@@ -62,9 +65,10 @@ var (
6265
)
6366

6467
const (
65-
azureDiskKind = "kind"
66-
sourceSnapshot = "snapshot"
67-
sourceVolume = "volume"
68+
azureDiskKind = "kind"
69+
sourceSnapshot = "snapshot"
70+
sourceVolume = "volume"
71+
azureDiskCSIDriverName = "azuredisk_csi_driver"
6872
)
6973

7074
// CreateVolume provisions an azure disk
@@ -358,6 +362,12 @@ func (d *Driver) ControllerGetVolume(context.Context, *csi.ControllerGetVolumeRe
358362

359363
// ControllerPublishVolume attach an azure disk to a required node
360364
func (d *Driver) ControllerPublishVolume(ctx context.Context, req *csi.ControllerPublishVolumeRequest) (*csi.ControllerPublishVolumeResponse, error) {
365+
mc := metrics.NewMetricContext(azureDiskCSIDriverName, "controller_publish_volume", d.cloud.ResourceGroup, d.cloud.SubscriptionID, d.Name)
366+
isOperationSucceeded := false
367+
defer func() {
368+
mc.ObserveOperationWithResult(isOperationSucceeded)
369+
}()
370+
361371
diskURI := req.GetVolumeId()
362372
if len(diskURI) == 0 {
363373
return nil, status.Error(codes.InvalidArgument, "Volume ID not provided")
@@ -429,11 +439,18 @@ func (d *Driver) ControllerPublishVolume(ctx context.Context, req *csi.Controlle
429439
}
430440

431441
pvInfo := map[string]string{LUN: strconv.Itoa(int(lun))}
442+
isOperationSucceeded = true
432443
return &csi.ControllerPublishVolumeResponse{PublishContext: pvInfo}, nil
433444
}
434445

435446
// ControllerUnpublishVolume detach an azure disk from a required node
436447
func (d *Driver) ControllerUnpublishVolume(ctx context.Context, req *csi.ControllerUnpublishVolumeRequest) (*csi.ControllerUnpublishVolumeResponse, error) {
448+
mc := metrics.NewMetricContext(azureDiskCSIDriverName, "controller_unpublish_volume", d.cloud.ResourceGroup, d.cloud.SubscriptionID, d.Name)
449+
isOperationSucceeded := false
450+
defer func() {
451+
mc.ObserveOperationWithResult(isOperationSucceeded)
452+
}()
453+
437454
diskURI := req.GetVolumeId()
438455
if len(diskURI) == 0 {
439456
return nil, status.Error(codes.InvalidArgument, "Volume ID not provided")
@@ -460,6 +477,7 @@ func (d *Driver) ControllerUnpublishVolume(ctx context.Context, req *csi.Control
460477
}
461478
}
462479
klog.V(2).Infof("detach volume %s from node %s successfully", diskURI, nodeID)
480+
isOperationSucceeded = true
463481

464482
return &csi.ControllerUnpublishVolumeResponse{}, nil
465483
}

vendor/k8s.io/legacy-cloud-providers/azure/azure_controller_standard.go

Lines changed: 0 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/k8s.io/legacy-cloud-providers/azure/azure_controller_vmss.go

Lines changed: 0 additions & 8 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)