Skip to content

Commit 4cf2e9b

Browse files
committed
Register metrics manager for node server and begin emitting metrics.
1 parent a225ca2 commit 4cf2e9b

File tree

4 files changed

+27
-7
lines changed

4 files changed

+27
-7
lines changed

Diff for: cmd/gce-pd-csi-driver/main.go

+14-4
Original file line numberDiff line numberDiff line change
@@ -149,13 +149,22 @@ func handle() {
149149
}
150150

151151
var metricsManager *metrics.MetricsManager = nil
152-
if *runControllerService && *httpEndpoint != "" {
152+
runServiceWithMetrics := *runControllerService || *runNodeService
153+
if runServiceWithMetrics && *httpEndpoint != "" {
153154
mm := metrics.NewMetricsManager()
154155
mm.InitializeHttpHandler(*httpEndpoint, *metricsPath)
155-
mm.RegisterPDCSIMetric()
156156

157-
if metrics.IsGKEComponentVersionAvailable() {
158-
mm.EmitGKEComponentVersion()
157+
switch {
158+
case *runControllerService:
159+
mm.RegisterPDCSIMetric()
160+
if metrics.IsGKEComponentVersionAvailable() {
161+
mm.EmitGKEComponentVersion()
162+
}
163+
case *runNodeService:
164+
if err := mm.EmmitProcessStartTime(); err != nil {
165+
klog.Errorf("Failed to emit process start time: %v", err.Error())
166+
}
167+
mm.RegisterMountMetric()
159168
}
160169
metricsManager = &mm
161170
}
@@ -250,6 +259,7 @@ func handle() {
250259
DeviceInUseTimeout: *deviceInUseTimeout,
251260
EnableDataCache: *enableDataCacheFlag,
252261
DataCacheEnabledNodePool: isDataCacheEnabledNodePool(ctx, *nodeName),
262+
MetricsManager: metricsManager,
253263
}
254264
nodeServer = driver.NewNodeServer(gceDriver, mounter, deviceUtils, meta, statter, nsArgs)
255265
if *maxConcurrentFormatAndMount > 0 {

Diff for: pkg/gce-pd-csi-driver/gce-pd-driver.go

+1
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,7 @@ func NewNodeServer(gceDriver *GCEDriver, mounter *mount.SafeFormatAndMount, devi
157157
deviceInUseErrors: newDeviceErrMap(args.DeviceInUseTimeout),
158158
EnableDataCache: args.EnableDataCache,
159159
DataCacheEnabledNodePool: args.DataCacheEnabledNodePool,
160+
metricsManager: args.MetricsManager,
160161
}
161162
}
162163

Diff for: pkg/gce-pd-csi-driver/node.go

+9
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import (
3636
"sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/common"
3737
"sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/deviceutils"
3838
metadataservice "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/gce-cloud-provider/metadata"
39+
"sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/metrics"
3940
mountmanager "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/mount-manager"
4041
"sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/resizefs"
4142
)
@@ -72,6 +73,8 @@ type GCENodeServer struct {
7273
// Embed UnimplementedNodeServer to ensure the driver returns Unimplemented for any
7374
// new RPC methods that might be introduced in future versions of the spec.
7475
csi.UnimplementedNodeServer
76+
77+
metricsManager *metrics.MetricsManager
7578
}
7679

7780
type NodeServerArgs struct {
@@ -84,6 +87,8 @@ type NodeServerArgs struct {
8487
EnableDataCache bool
8588

8689
DataCacheEnabledNodePool bool
90+
91+
MetricsManager *metrics.MetricsManager
8792
}
8893

8994
var _ csi.NodeServer = &GCENodeServer{}
@@ -416,6 +421,10 @@ func (ns *GCENodeServer) NodeStageVolume(ctx context.Context, req *csi.NodeStage
416421
return &csi.NodeStageVolumeResponse{}, nil
417422
}
418423
}
424+
425+
if ns.metricsManager != nil {
426+
ns.metricsManager.RecordMountErrorMetric(err)
427+
}
419428
return nil, status.Error(codes.Internal,
420429
fmt.Sprintf("Failed to format and mount device from (%q) to (%q) with fstype (%q) and options (%q): %v",
421430
devicePath, stagingTargetPath, fstype, options, err.Error()))

Diff for: pkg/gce-pd-csi-driver/node_test.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ func getTestGCEDriverWithCustomMounter(t *testing.T, mounter *mount.SafeFormatAn
5252
func getCustomTestGCEDriver(t *testing.T, mounter *mount.SafeFormatAndMount, deviceUtils deviceutils.DeviceUtils, metaService metadataservice.MetadataService) *GCEDriver {
5353
gceDriver := GetGCEDriver()
5454
enableDataCache := false
55-
nodeServer := NewNodeServer(gceDriver, mounter, deviceUtils, metaService, mountmanager.NewFakeStatter(mounter), NodeServerArgs{true, 0, enableDataCache, false /*dataCacheEnableNodePool */})
55+
nodeServer := NewNodeServer(gceDriver, mounter, deviceUtils, metaService, mountmanager.NewFakeStatter(mounter), NodeServerArgs{true, 0, enableDataCache, false /*dataCacheEnableNodePool */, nil /*metricsMangager*/})
5656
err := gceDriver.SetupGCEDriver(driver, "test-vendor", nil, nil, nil, nil, nodeServer)
5757
if err != nil {
5858
t.Fatalf("Failed to setup GCE Driver: %v", err)
@@ -63,7 +63,7 @@ func getCustomTestGCEDriver(t *testing.T, mounter *mount.SafeFormatAndMount, dev
6363
func getTestBlockingMountGCEDriver(t *testing.T, readyToExecute chan chan struct{}) *GCEDriver {
6464
gceDriver := GetGCEDriver()
6565
mounter := mountmanager.NewFakeSafeBlockingMounter(readyToExecute)
66-
nodeServer := NewNodeServer(gceDriver, mounter, deviceutils.NewFakeDeviceUtils(false), metadataservice.NewFakeService(), mountmanager.NewFakeStatter(mounter), NodeServerArgs{true, 0, true, false /*dataCacheEnableNodePool */})
66+
nodeServer := NewNodeServer(gceDriver, mounter, deviceutils.NewFakeDeviceUtils(false), metadataservice.NewFakeService(), mountmanager.NewFakeStatter(mounter), NodeServerArgs{true, 0, true, false /*dataCacheEnableNodePool */, nil /*metricsMangager*/})
6767
err := gceDriver.SetupGCEDriver(driver, "test-vendor", nil, nil, nil, nil, nodeServer)
6868
if err != nil {
6969
t.Fatalf("Failed to setup GCE Driver: %v", err)
@@ -75,7 +75,7 @@ func getTestBlockingFormatAndMountGCEDriver(t *testing.T, readyToExecute chan ch
7575
gceDriver := GetGCEDriver()
7676
enableDataCache := true
7777
mounter := mountmanager.NewFakeSafeBlockingMounter(readyToExecute)
78-
nodeServer := NewNodeServer(gceDriver, mounter, deviceutils.NewFakeDeviceUtils(false), metadataservice.NewFakeService(), mountmanager.NewFakeStatter(mounter), NodeServerArgs{true, 0, enableDataCache, false /*dataCacheEnableNodePool */}).WithSerializedFormatAndMount(5*time.Second, 1)
78+
nodeServer := NewNodeServer(gceDriver, mounter, deviceutils.NewFakeDeviceUtils(false), metadataservice.NewFakeService(), mountmanager.NewFakeStatter(mounter), NodeServerArgs{true, 0, enableDataCache, false /*dataCacheEnableNodePool */, nil /*metricsMangager*/}).WithSerializedFormatAndMount(5*time.Second, 1)
7979

8080
err := gceDriver.SetupGCEDriver(driver, "test-vendor", nil, nil, nil, nil, nodeServer)
8181
if err != nil {

0 commit comments

Comments
 (0)