@@ -17,9 +17,11 @@ import (
17
17
"testing"
18
18
"time"
19
19
20
+ "github.com/docker/docker/api/types"
20
21
"github.com/stretchr/testify/assert"
21
22
"github.com/stretchr/testify/require"
22
23
"go.opentelemetry.io/collector/component/componenttest"
24
+ "go.opentelemetry.io/collector/pdata/pcommon"
23
25
"go.opentelemetry.io/collector/receiver/receivertest"
24
26
"go.opentelemetry.io/collector/receiver/scraperhelper"
25
27
96
98
ContainerNetworkIoUsageTxPackets : metricEnabled ,
97
99
ContainerPidsCount : metricEnabled ,
98
100
ContainerPidsLimit : metricEnabled ,
101
+ ContainerUptime : metricEnabled ,
99
102
}
100
103
)
101
104
@@ -254,11 +257,56 @@ func TestScrapeV2(t *testing.T) {
254
257
assert .NoError (t , err )
255
258
assert .NoError (t , pmetrictest .CompareMetrics (expectedMetrics , actualMetrics ,
256
259
pmetrictest .IgnoreMetricDataPointsOrder (),
257
- pmetrictest .IgnoreResourceMetricsOrder (), pmetrictest .IgnoreStartTimestamp (), pmetrictest .IgnoreTimestamp ()))
260
+ pmetrictest .IgnoreResourceMetricsOrder (),
261
+ pmetrictest .IgnoreStartTimestamp (),
262
+ pmetrictest .IgnoreTimestamp (),
263
+ pmetrictest .IgnoreMetricValues (
264
+ "container.uptime" , // value depends on time.Now(), making it unpredictable as far as tests go
265
+ ),
266
+ ))
258
267
})
259
268
}
260
269
}
261
270
271
+ func TestRecordBaseMetrics (t * testing.T ) {
272
+ cfg := createDefaultConfig ().(* Config )
273
+ cfg .MetricsBuilderConfig .Metrics = metadata.MetricsConfig {
274
+ ContainerUptime : metricEnabled ,
275
+ }
276
+ r := newReceiver (receivertest .NewNopCreateSettings (), cfg )
277
+ now := time .Now ()
278
+ started := now .Add (- 2 * time .Second ).Format (time .RFC3339 )
279
+
280
+ t .Run ("ok" , func (t * testing.T ) {
281
+ err := r .recordBaseMetrics (
282
+ pcommon .NewTimestampFromTime (now ),
283
+ & types.ContainerJSONBase {
284
+ State : & types.ContainerState {
285
+ StartedAt : started ,
286
+ },
287
+ },
288
+ )
289
+ require .NoError (t , err )
290
+ m := r .mb .Emit ().ResourceMetrics ().At (0 ).ScopeMetrics ().At (0 ).Metrics ().At (0 )
291
+ assert .Equal (t , "container.uptime" , m .Name ())
292
+ dp := m .Gauge ().DataPoints ()
293
+ assert .Equal (t , 1 , dp .Len ())
294
+ assert .Equal (t , 2 , int (dp .At (0 ).DoubleValue ()))
295
+ })
296
+
297
+ t .Run ("error" , func (t * testing.T ) {
298
+ err := r .recordBaseMetrics (
299
+ pcommon .NewTimestampFromTime (now ),
300
+ & types.ContainerJSONBase {
301
+ State : & types.ContainerState {
302
+ StartedAt : "bad date" ,
303
+ },
304
+ },
305
+ )
306
+ require .Error (t , err )
307
+ })
308
+ }
309
+
262
310
func dockerMockServer (urlToFile * map [string ]string ) (* httptest.Server , error ) {
263
311
urlToFileContents := make (map [string ][]byte , len (* urlToFile ))
264
312
for urlPath , filePath := range * urlToFile {
0 commit comments