Skip to content

Commit a935864

Browse files
authored
Merge pull request #56 from Jiawei0227/release-0.7
[Cherry-pick]Add process_start_time_seconds metric into csi metric lib
2 parents 9ad8f5f + aca03f6 commit a935864

File tree

3 files changed

+47
-6
lines changed

3 files changed

+47
-6
lines changed

connection/connection_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -359,7 +359,7 @@ func TestConnectMetrics(t *testing.T) {
359359
`
360360

361361
if err := testutil.GatherAndCompare(
362-
cmm.GetRegistry(), strings.NewReader(expectedMetrics)); err != nil {
362+
cmm.GetRegistry(), strings.NewReader(expectedMetrics), "csi_sidecar_operations_seconds"); err != nil {
363363
// Ignore mismatches on csi_sidecar_operations_seconds_sum metric because execution time will vary from test to test.
364364
err = verifyMetricsError(t, err, "csi_sidecar_operations_seconds_sum")
365365
if err != nil {

metrics/metrics.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,10 @@ func NewCSIMetricsManager(driverName string) CSIMetricsManager {
9292
),
9393
}
9494

95+
// https://github.com/open-telemetry/opentelemetry-collector/issues/969
96+
// Add process_start_time_seconds into the metric to let the start time be parsed correctly
97+
metrics.RegisterProcessStartTime(cmm.registry.RawRegister)
98+
9599
cmm.SetDriverName(driverName)
96100
cmm.registerMetrics()
97101
return &cmm
@@ -171,7 +175,11 @@ func VerifyMetricsMatch(expectedMetrics, actualMetrics string, metricToIgnore st
171175
wantScanner.Scan()
172176
wantLine := strings.TrimSpace(wantScanner.Text())
173177
gotLine := strings.TrimSpace(gotScanner.Text())
174-
if wantLine != gotLine && (metricToIgnore == "" || !strings.HasPrefix(gotLine, metricToIgnore)) {
178+
if wantLine != gotLine &&
179+
(metricToIgnore == "" || !strings.HasPrefix(gotLine, metricToIgnore)) &&
180+
// We should ignore the comments from metricToIgnore, otherwise the verification will
181+
// fail because of the comments.
182+
!strings.HasPrefix(gotLine, "#") {
175183
return fmt.Errorf("\r\nMetric Want: %q\r\nMetric Got: %q\r\n", wantLine, gotLine)
176184
}
177185
}

metrics/metrics_test.go

Lines changed: 37 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,11 @@ import (
2828
"k8s.io/component-base/metrics/testutil"
2929
)
3030

31+
const (
32+
SidecarOperationMetric = "csi_sidecar_operations_seconds"
33+
ProcessStartTimeMetric = "process_start_time_seconds"
34+
)
35+
3136
func TestRecordMetrics(t *testing.T) {
3237
// Arrange
3338
cmm := NewCSIMetricsManager(
@@ -62,7 +67,7 @@ func TestRecordMetrics(t *testing.T) {
6267
`
6368

6469
if err := testutil.GatherAndCompare(
65-
cmm.GetRegistry(), strings.NewReader(expectedMetrics)); err != nil {
70+
cmm.GetRegistry(), strings.NewReader(expectedMetrics), SidecarOperationMetric); err != nil {
6671
t.Fatal(err)
6772
}
6873
}
@@ -101,7 +106,7 @@ func TestRecordMetrics_NoDriverName(t *testing.T) {
101106
`
102107

103108
if err := testutil.GatherAndCompare(
104-
cmm.GetRegistry(), strings.NewReader(expectedMetrics)); err != nil {
109+
cmm.GetRegistry(), strings.NewReader(expectedMetrics), SidecarOperationMetric); err != nil {
105110
t.Fatal(err)
106111
}
107112
}
@@ -139,7 +144,7 @@ func TestRecordMetrics_Negative(t *testing.T) {
139144
csi_sidecar_operations_seconds_count{driver_name="fake.csi.driver.io",grpc_status_code="InvalidArgument",method_name="myOperation"} 1
140145
`
141146
if err := testutil.GatherAndCompare(
142-
cmm.GetRegistry(), strings.NewReader(expectedMetrics)); err != nil {
147+
cmm.GetRegistry(), strings.NewReader(expectedMetrics), SidecarOperationMetric); err != nil {
143148
t.Fatal(err)
144149
}
145150
}
@@ -197,7 +202,35 @@ func TestStartMetricsEndPoint_Noop(t *testing.T) {
197202
`
198203

199204
actualMetrics := string(contentBytes)
200-
if err := VerifyMetricsMatch(expectedMetrics, actualMetrics, ""); err != nil {
205+
if err := VerifyMetricsMatch(expectedMetrics, actualMetrics, ProcessStartTimeMetric); err != nil {
201206
t.Fatalf("Metrics returned by end point do not match expectation: %v", err)
202207
}
203208
}
209+
210+
func TestProcessStartTimeMetricExist(t *testing.T) {
211+
// Arrange
212+
cmm := NewCSIMetricsManager(
213+
"fake.csi.driver.io" /* driverName */)
214+
operationDuration, _ := time.ParseDuration("20s")
215+
216+
// Act
217+
cmm.RecordMetrics(
218+
"/csi.v1.Controller/ControllerGetCapabilities", /* operationName */
219+
nil, /* operationErr */
220+
operationDuration /* operationDuration */)
221+
222+
// Assert
223+
metricsFamilies, err := cmm.GetRegistry().Gather()
224+
if err != nil {
225+
t.Fatalf("Error fetching metrics: %v", err)
226+
}
227+
228+
// check process_start_time_seconds exist
229+
for _, metricsFamily := range metricsFamilies {
230+
if metricsFamily.GetName() == ProcessStartTimeMetric {
231+
return
232+
}
233+
}
234+
235+
t.Fatalf("Metrics does not contain %v. Scraped content: %v", ProcessStartTimeMetric, metricsFamilies)
236+
}

0 commit comments

Comments
 (0)