diff --git a/containermetrics/cached_container_metric.go b/containermetrics/cached_container_metric.go index 79a536b4..e1e6308e 100644 --- a/containermetrics/cached_container_metric.go +++ b/containermetrics/cached_container_metric.go @@ -7,4 +7,6 @@ type CachedContainerMetrics struct { DiskQuotaBytes uint64 `json:"disk_quota_bytes"` MemoryUsageBytes uint64 `json:"memory_usage_bytes"` MemoryQuotaBytes uint64 `json:"memory_quota_bytes"` + RxBytes *uint64 `json:"rx_bytes,omitempty"` + TxBytes *uint64 `json:"tx_bytes,omitempty"` } diff --git a/containermetrics/reporters_runner_test.go b/containermetrics/reporters_runner_test.go index 16653818..7ac3c341 100644 --- a/containermetrics/reporters_runner_test.go +++ b/containermetrics/reporters_runner_test.go @@ -80,6 +80,10 @@ var _ = Describe("ReportersRunner", func() { ginkgomon.Interrupt(process) }) + one := uint64(1) + two := uint64(2) + three := uint64(3) + sentCPUUsage := func() []cpuUsage { usage := []cpuUsage{} @@ -150,6 +154,8 @@ var _ = Describe("ReportersRunner", func() { DiskLimitInBytes: megsToBytes(1024), ContainerAgeInNanoseconds: 1000, AbsoluteCPUEntitlementInNanoseconds: 2000, + RxInBytes: &one, + TxInBytes: &one, }, }, "container-guid-without-index": executor.Metrics{ @@ -162,6 +168,8 @@ var _ = Describe("ReportersRunner", func() { DiskLimitInBytes: megsToBytes(1024), ContainerAgeInNanoseconds: 1001, AbsoluteCPUEntitlementInNanoseconds: 2001, + RxInBytes: &one, + TxInBytes: &one, }, }, "container-guid-with-index": executor.Metrics{ @@ -174,6 +182,8 @@ var _ = Describe("ReportersRunner", func() { DiskLimitInBytes: megsToBytes(2048), ContainerAgeInNanoseconds: 1002, AbsoluteCPUEntitlementInNanoseconds: 2002, + RxInBytes: &one, + TxInBytes: &one, }, }, "container-guid-without-preloaded-rootfs": executor.Metrics{ @@ -186,6 +196,8 @@ var _ = Describe("ReportersRunner", func() { DiskLimitInBytes: megsToBytes(2048), ContainerAgeInNanoseconds: 1003, AbsoluteCPUEntitlementInNanoseconds: 2003, + RxInBytes: &one, + TxInBytes: &one, }, }, "container-guid-without-age": executor.Metrics{ @@ -198,6 +210,8 @@ var _ = Describe("ReportersRunner", func() { DiskLimitInBytes: megsToBytes(1024), ContainerAgeInNanoseconds: 0, AbsoluteCPUEntitlementInNanoseconds: 2004, + RxInBytes: &one, + TxInBytes: &one, }, }, } @@ -213,6 +227,8 @@ var _ = Describe("ReportersRunner", func() { DiskLimitInBytes: megsToBytes(1024), ContainerAgeInNanoseconds: 1000 + uint64(10*time.Second), AbsoluteCPUEntitlementInNanoseconds: 2000, + RxInBytes: &two, + TxInBytes: &two, }, }, @@ -226,6 +242,8 @@ var _ = Describe("ReportersRunner", func() { DiskLimitInBytes: 4096, ContainerAgeInNanoseconds: 1001 + uint64(10*time.Second), AbsoluteCPUEntitlementInNanoseconds: 2001, + RxInBytes: &two, + TxInBytes: &two, }, }, "container-guid-with-index": executor.Metrics{ @@ -238,6 +256,8 @@ var _ = Describe("ReportersRunner", func() { DiskLimitInBytes: 512, ContainerAgeInNanoseconds: 1002 + uint64(10*time.Second), AbsoluteCPUEntitlementInNanoseconds: 2002, + RxInBytes: &two, + TxInBytes: &two, }}, "container-guid-without-preloaded-rootfs": executor.Metrics{ MetricsConfig: executor.MetricsConfig{Tags: map[string]string{"source_id": "source-id-without-preloaded-rootfs"}}, @@ -249,6 +269,8 @@ var _ = Describe("ReportersRunner", func() { DiskLimitInBytes: 2048, ContainerAgeInNanoseconds: 1003 + uint64(10*time.Second), AbsoluteCPUEntitlementInNanoseconds: 2003, + RxInBytes: &two, + TxInBytes: &two, }, }, "container-guid-without-age": executor.Metrics{ @@ -261,6 +283,8 @@ var _ = Describe("ReportersRunner", func() { DiskLimitInBytes: megsToBytes(1024), ContainerAgeInNanoseconds: 0, AbsoluteCPUEntitlementInNanoseconds: 2004, + RxInBytes: &two, + TxInBytes: &two, }, }, "container-guid-without-metrics-at-t0": executor.Metrics{ @@ -273,6 +297,8 @@ var _ = Describe("ReportersRunner", func() { DiskLimitInBytes: 512, ContainerAgeInNanoseconds: 1002 + uint64(10*time.Second), AbsoluteCPUEntitlementInNanoseconds: 2002, + RxInBytes: &two, + TxInBytes: &two, }, }, } @@ -288,6 +314,8 @@ var _ = Describe("ReportersRunner", func() { DiskLimitInBytes: megsToBytes(1024), ContainerAgeInNanoseconds: 1000 + uint64(20*time.Second), AbsoluteCPUEntitlementInNanoseconds: 2000, + RxInBytes: &three, + TxInBytes: &three, }, }, @@ -301,6 +329,8 @@ var _ = Describe("ReportersRunner", func() { DiskLimitInBytes: 234, ContainerAgeInNanoseconds: 1001 + uint64(20*time.Second), AbsoluteCPUEntitlementInNanoseconds: 2001, + RxInBytes: &three, + TxInBytes: &three, }, }, "container-guid-with-index": executor.Metrics{ @@ -313,6 +343,8 @@ var _ = Describe("ReportersRunner", func() { DiskLimitInBytes: 43200, ContainerAgeInNanoseconds: 1002 + uint64(20*time.Second), AbsoluteCPUEntitlementInNanoseconds: 2002, + RxInBytes: &three, + TxInBytes: &three, }, }, "container-guid-without-preloaded-rootfs": executor.Metrics{ @@ -325,6 +357,8 @@ var _ = Describe("ReportersRunner", func() { DiskLimitInBytes: 2048, ContainerAgeInNanoseconds: 1003 + uint64(20*time.Second), AbsoluteCPUEntitlementInNanoseconds: 2003, + RxInBytes: &three, + TxInBytes: &three, }, }, "container-guid-without-age": executor.Metrics{ @@ -337,6 +371,8 @@ var _ = Describe("ReportersRunner", func() { DiskLimitInBytes: megsToBytes(1024), ContainerAgeInNanoseconds: 0, AbsoluteCPUEntitlementInNanoseconds: 2004, + RxInBytes: &three, + TxInBytes: &three, }, }, "container-guid-without-metrics-at-t0": executor.Metrics{ @@ -349,6 +385,8 @@ var _ = Describe("ReportersRunner", func() { DiskLimitInBytes: 512, ContainerAgeInNanoseconds: 1002 + uint64(20*time.Second), AbsoluteCPUEntitlementInNanoseconds: 2002, + RxInBytes: &three, + TxInBytes: &three, }, }, } @@ -369,6 +407,8 @@ var _ = Describe("ReportersRunner", func() { AbsoluteCPUUsage: uint64(metricsAtT0["container-guid-without-index"].ContainerMetrics.TimeSpentInCPU), AbsoluteCPUEntitlement: metricsAtT0["container-guid-without-index"].ContainerMetrics.AbsoluteCPUEntitlementInNanoseconds, ContainerAge: metricsAtT0["container-guid-without-index"].ContainerMetrics.ContainerAgeInNanoseconds, + RxBytes: metricsAtT0["container-guid-without-index"].ContainerMetrics.RxInBytes, + TxBytes: metricsAtT0["container-guid-without-index"].ContainerMetrics.TxInBytes, Tags: map[string]string{ "source_id": "source-id-without-index", "instance_id": "0", @@ -383,6 +423,8 @@ var _ = Describe("ReportersRunner", func() { AbsoluteCPUUsage: uint64(metricsAtT0["container-guid-with-index"].ContainerMetrics.TimeSpentInCPU), AbsoluteCPUEntitlement: metricsAtT0["container-guid-with-index"].ContainerMetrics.AbsoluteCPUEntitlementInNanoseconds, ContainerAge: metricsAtT0["container-guid-with-index"].ContainerMetrics.ContainerAgeInNanoseconds, + RxBytes: metricsAtT0["container-guid-with-index"].ContainerMetrics.RxInBytes, + TxBytes: metricsAtT0["container-guid-with-index"].ContainerMetrics.TxInBytes, Tags: map[string]string{ "source_id": "source-id-with-index", "instance_id": "1", @@ -397,6 +439,8 @@ var _ = Describe("ReportersRunner", func() { AbsoluteCPUUsage: uint64(metricsAtT0["container-guid-without-preloaded-rootfs"].ContainerMetrics.TimeSpentInCPU), AbsoluteCPUEntitlement: metricsAtT0["container-guid-without-preloaded-rootfs"].ContainerMetrics.AbsoluteCPUEntitlementInNanoseconds, ContainerAge: metricsAtT0["container-guid-without-preloaded-rootfs"].ContainerMetrics.ContainerAgeInNanoseconds, + RxBytes: metricsAtT0["container-guid-without-preloaded-rootfs"].ContainerMetrics.RxInBytes, + TxBytes: metricsAtT0["container-guid-without-preloaded-rootfs"].ContainerMetrics.TxInBytes, Tags: map[string]string{ "source_id": "source-id-without-preloaded-rootfs", "instance_id": "0", @@ -411,6 +455,8 @@ var _ = Describe("ReportersRunner", func() { AbsoluteCPUUsage: uint64(metricsAtT0["container-guid-without-age"].ContainerMetrics.TimeSpentInCPU), AbsoluteCPUEntitlement: metricsAtT0["container-guid-without-age"].ContainerMetrics.AbsoluteCPUEntitlementInNanoseconds, ContainerAge: metricsAtT0["container-guid-without-age"].ContainerMetrics.ContainerAgeInNanoseconds, + RxBytes: metricsAtT0["container-guid-without-age"].ContainerMetrics.RxInBytes, + TxBytes: metricsAtT0["container-guid-without-age"].ContainerMetrics.TxInBytes, Tags: map[string]string{ "source_id": "source-id-without-age", "instance_id": "0", @@ -428,7 +474,7 @@ var _ = Describe("ReportersRunner", func() { )) }) - Context("when contianers EnableContainerProxy is set", func() { + Context("when containers EnableContainerProxy is set", func() { BeforeEach(func() { containers := []executor.Container{ { @@ -473,6 +519,8 @@ var _ = Describe("ReportersRunner", func() { AbsoluteCPUUsage: uint64(metricsAtT0["container-guid-without-index"].ContainerMetrics.TimeSpentInCPU), AbsoluteCPUEntitlement: metricsAtT0["container-guid-without-index"].ContainerMetrics.AbsoluteCPUEntitlementInNanoseconds, ContainerAge: metricsAtT0["container-guid-without-index"].ContainerMetrics.ContainerAgeInNanoseconds, + RxBytes: metricsAtT0["container-guid-without-index"].ContainerMetrics.RxInBytes, + TxBytes: metricsAtT0["container-guid-without-index"].ContainerMetrics.TxInBytes, Tags: map[string]string{ "source_id": "source-id-without-index", "instance_id": "0", @@ -501,6 +549,8 @@ var _ = Describe("ReportersRunner", func() { AbsoluteCPUUsage: uint64(metricsAtT0["container-guid-without-index"].ContainerMetrics.TimeSpentInCPU), AbsoluteCPUEntitlement: metricsAtT0["container-guid-without-index"].ContainerMetrics.AbsoluteCPUEntitlementInNanoseconds, ContainerAge: metricsAtT0["container-guid-without-index"].ContainerMetrics.ContainerAgeInNanoseconds, + RxBytes: metricsAtT0["container-guid-without-index"].ContainerMetrics.RxInBytes, + TxBytes: metricsAtT0["container-guid-without-index"].ContainerMetrics.TxInBytes, Tags: map[string]string{ "source_id": "source-id-without-index", "instance_id": "0", @@ -521,6 +571,8 @@ var _ = Describe("ReportersRunner", func() { AbsoluteCPUUsage: uint64(metricsAtT0["container-guid-without-preloaded-rootfs"].ContainerMetrics.TimeSpentInCPU), AbsoluteCPUEntitlement: metricsAtT0["container-guid-without-preloaded-rootfs"].ContainerMetrics.AbsoluteCPUEntitlementInNanoseconds, ContainerAge: metricsAtT0["container-guid-without-preloaded-rootfs"].ContainerMetrics.ContainerAgeInNanoseconds, + RxBytes: metricsAtT0["container-guid-without-preloaded-rootfs"].ContainerMetrics.RxInBytes, + TxBytes: metricsAtT0["container-guid-without-preloaded-rootfs"].ContainerMetrics.TxInBytes, Tags: map[string]string{ "source_id": "source-id-without-preloaded-rootfs", "instance_id": "0", @@ -557,6 +609,8 @@ var _ = Describe("ReportersRunner", func() { AbsoluteCPUUsage: uint64(metricsAtT10["container-guid-without-index"].ContainerMetrics.TimeSpentInCPU), AbsoluteCPUEntitlement: metricsAtT10["container-guid-without-index"].ContainerMetrics.AbsoluteCPUEntitlementInNanoseconds, ContainerAge: metricsAtT10["container-guid-without-index"].ContainerMetrics.ContainerAgeInNanoseconds, + RxBytes: metricsAtT10["container-guid-without-index"].ContainerMetrics.RxInBytes, + TxBytes: metricsAtT10["container-guid-without-index"].ContainerMetrics.TxInBytes, Tags: map[string]string{ "source_id": "source-id-without-index", "instance_id": "0", @@ -572,6 +626,8 @@ var _ = Describe("ReportersRunner", func() { AbsoluteCPUUsage: uint64(metricsAtT10["container-guid-with-index"].ContainerMetrics.TimeSpentInCPU), AbsoluteCPUEntitlement: metricsAtT10["container-guid-with-index"].ContainerMetrics.AbsoluteCPUEntitlementInNanoseconds, ContainerAge: metricsAtT10["container-guid-with-index"].ContainerMetrics.ContainerAgeInNanoseconds, + RxBytes: metricsAtT10["container-guid-with-index"].ContainerMetrics.RxInBytes, + TxBytes: metricsAtT10["container-guid-with-index"].ContainerMetrics.TxInBytes, Tags: map[string]string{ "source_id": "source-id-with-index", "instance_id": "1", @@ -587,6 +643,8 @@ var _ = Describe("ReportersRunner", func() { AbsoluteCPUUsage: uint64(metricsAtT10["container-guid-without-preloaded-rootfs"].ContainerMetrics.TimeSpentInCPU), AbsoluteCPUEntitlement: metricsAtT10["container-guid-without-preloaded-rootfs"].ContainerMetrics.AbsoluteCPUEntitlementInNanoseconds, ContainerAge: metricsAtT10["container-guid-without-preloaded-rootfs"].ContainerMetrics.ContainerAgeInNanoseconds, + RxBytes: metricsAtT10["container-guid-without-preloaded-rootfs"].ContainerMetrics.RxInBytes, + TxBytes: metricsAtT10["container-guid-without-preloaded-rootfs"].ContainerMetrics.TxInBytes, Tags: map[string]string{ "source_id": "source-id-without-preloaded-rootfs", "instance_id": "0", @@ -602,6 +660,8 @@ var _ = Describe("ReportersRunner", func() { AbsoluteCPUUsage: uint64(metricsAtT10["container-guid-without-metrics-at-t0"].ContainerMetrics.TimeSpentInCPU), AbsoluteCPUEntitlement: metricsAtT10["container-guid-without-metrics-at-t0"].ContainerMetrics.AbsoluteCPUEntitlementInNanoseconds, ContainerAge: metricsAtT10["container-guid-without-metrics-at-t0"].ContainerMetrics.ContainerAgeInNanoseconds, + RxBytes: metricsAtT10["container-guid-without-metrics-at-t0"].ContainerMetrics.RxInBytes, + TxBytes: metricsAtT10["container-guid-without-metrics-at-t0"].ContainerMetrics.TxInBytes, Tags: map[string]string{ "source_id": "source-id-without-metrics-at-t0", "instance_id": "1", @@ -620,6 +680,8 @@ var _ = Describe("ReportersRunner", func() { DiskUsageBytes: 4560, MemoryQuotaBytes: megsToBytes(7890), DiskQuotaBytes: 4096, + RxBytes: &two, + TxBytes: &two, })) Expect(containerMetrics).To(HaveKeyWithValue("container-guid-with-index", &containermetrics.CachedContainerMetrics{ MetricGUID: "source-id-with-index", @@ -628,6 +690,8 @@ var _ = Describe("ReportersRunner", func() { DiskUsageBytes: 6540, MemoryQuotaBytes: megsToBytes(9870), DiskQuotaBytes: 512, + RxBytes: &two, + TxBytes: &two, })) Expect(containerMetrics).To(HaveKeyWithValue("container-guid-without-source-id", &containermetrics.CachedContainerMetrics{ MetricGUID: "", @@ -636,6 +700,8 @@ var _ = Describe("ReportersRunner", func() { DiskUsageBytes: megsToBytes(456), MemoryQuotaBytes: megsToBytes(789), DiskQuotaBytes: megsToBytes(1024), + RxBytes: &two, + TxBytes: &two, })) Expect(containerMetrics).To(HaveKeyWithValue("container-guid-without-preloaded-rootfs", &containermetrics.CachedContainerMetrics{ MetricGUID: "source-id-without-preloaded-rootfs", @@ -644,6 +710,8 @@ var _ = Describe("ReportersRunner", func() { DiskUsageBytes: 4560, MemoryQuotaBytes: megsToBytes(6780), DiskQuotaBytes: 2048, + RxBytes: &two, + TxBytes: &two, })) Expect(containerMetrics).To(HaveKeyWithValue("container-guid-without-age", &containermetrics.CachedContainerMetrics{ MetricGUID: "source-id-without-age", @@ -652,6 +720,8 @@ var _ = Describe("ReportersRunner", func() { DiskUsageBytes: megsToBytes(456), MemoryQuotaBytes: megsToBytes(789), DiskQuotaBytes: megsToBytes(1024), + RxBytes: &two, + TxBytes: &two, })) Expect(containerMetrics).To(HaveKeyWithValue("container-guid-without-metrics-at-t0", &containermetrics.CachedContainerMetrics{ MetricGUID: "source-id-without-metrics-at-t0", @@ -660,6 +730,8 @@ var _ = Describe("ReportersRunner", func() { DiskUsageBytes: 6540, MemoryQuotaBytes: megsToBytes(9870), DiskQuotaBytes: 512, + RxBytes: &two, + TxBytes: &two, })) }) }) @@ -680,6 +752,8 @@ var _ = Describe("ReportersRunner", func() { AbsoluteCPUUsage: uint64(metricsAtT20["container-guid-without-index"].ContainerMetrics.TimeSpentInCPU), AbsoluteCPUEntitlement: metricsAtT20["container-guid-without-index"].ContainerMetrics.AbsoluteCPUEntitlementInNanoseconds, ContainerAge: metricsAtT20["container-guid-without-index"].ContainerMetrics.ContainerAgeInNanoseconds, + RxBytes: metricsAtT20["container-guid-without-index"].ContainerMetrics.RxInBytes, + TxBytes: metricsAtT20["container-guid-without-index"].ContainerMetrics.TxInBytes, Tags: map[string]string{ "source_id": "source-id-without-index", "instance_id": "0", @@ -695,6 +769,8 @@ var _ = Describe("ReportersRunner", func() { AbsoluteCPUUsage: uint64(metricsAtT20["container-guid-with-index"].ContainerMetrics.TimeSpentInCPU), AbsoluteCPUEntitlement: metricsAtT20["container-guid-with-index"].ContainerMetrics.AbsoluteCPUEntitlementInNanoseconds, ContainerAge: metricsAtT20["container-guid-with-index"].ContainerMetrics.ContainerAgeInNanoseconds, + RxBytes: metricsAtT20["container-guid-with-index"].ContainerMetrics.RxInBytes, + TxBytes: metricsAtT20["container-guid-with-index"].ContainerMetrics.TxInBytes, Tags: map[string]string{ "source_id": "source-id-with-index", "instance_id": "1", @@ -710,6 +786,8 @@ var _ = Describe("ReportersRunner", func() { AbsoluteCPUUsage: uint64(metricsAtT20["container-guid-without-preloaded-rootfs"].ContainerMetrics.TimeSpentInCPU), AbsoluteCPUEntitlement: metricsAtT20["container-guid-without-preloaded-rootfs"].ContainerMetrics.AbsoluteCPUEntitlementInNanoseconds, ContainerAge: metricsAtT20["container-guid-without-preloaded-rootfs"].ContainerMetrics.ContainerAgeInNanoseconds, + RxBytes: metricsAtT20["container-guid-without-preloaded-rootfs"].ContainerMetrics.RxInBytes, + TxBytes: metricsAtT20["container-guid-without-preloaded-rootfs"].ContainerMetrics.TxInBytes, Tags: map[string]string{ "source_id": "source-id-without-preloaded-rootfs", "instance_id": "0", @@ -725,6 +803,8 @@ var _ = Describe("ReportersRunner", func() { AbsoluteCPUUsage: uint64(metricsAtT20["container-guid-without-metrics-at-t0"].ContainerMetrics.TimeSpentInCPU), AbsoluteCPUEntitlement: metricsAtT20["container-guid-without-metrics-at-t0"].ContainerMetrics.AbsoluteCPUEntitlementInNanoseconds, ContainerAge: metricsAtT20["container-guid-without-metrics-at-t0"].ContainerMetrics.ContainerAgeInNanoseconds, + RxBytes: metricsAtT20["container-guid-without-metrics-at-t0"].ContainerMetrics.RxInBytes, + TxBytes: metricsAtT20["container-guid-without-metrics-at-t0"].ContainerMetrics.TxInBytes, Tags: map[string]string{ "source_id": "source-id-without-metrics-at-t0", "instance_id": "1", diff --git a/containermetrics/stats_reporter.go b/containermetrics/stats_reporter.go index c02830aa..ba4acef9 100644 --- a/containermetrics/stats_reporter.go +++ b/containermetrics/stats_reporter.go @@ -113,6 +113,8 @@ func (reporter *StatsReporter) calculateAndSendMetrics( AbsoluteCPUEntitlement: containerMetrics.AbsoluteCPUEntitlementInNanoseconds, ContainerAge: containerMetrics.ContainerAgeInNanoseconds, Tags: metricsConfig.Tags, + RxBytes: containerMetrics.RxInBytes, + TxBytes: containerMetrics.TxInBytes, }) if err != nil { @@ -131,6 +133,8 @@ func (reporter *StatsReporter) calculateAndSendMetrics( DiskQuotaBytes: containerMetrics.DiskLimitInBytes, MemoryUsageBytes: containerMetrics.MemoryUsageInBytes, MemoryQuotaBytes: containerMetrics.MemoryLimitInBytes, + RxBytes: containerMetrics.RxInBytes, + TxBytes: containerMetrics.TxInBytes, }, ¤tInfo } diff --git a/depot/containerstore/containerstore.go b/depot/containerstore/containerstore.go index b50bd2a5..92b6a8c9 100644 --- a/depot/containerstore/containerstore.go +++ b/depot/containerstore/containerstore.go @@ -359,6 +359,13 @@ func (cs *containerStore) Metrics(logger lager.Logger) (map[string]executor.Cont rootFSSize := cs.rootFSSizer.RootFSSizeFromPath(nodeInfo.RootFSPath) diskUsage := gardenMetric.DiskStat.TotalBytesUsed - rootFSSize + + var rxInBytes, txInBytes *uint64 + if gardenMetric.NetworkStat != nil { + rxInBytes = &gardenMetric.NetworkStat.RxBytes + txInBytes = &gardenMetric.NetworkStat.TxBytes + } + containerMetrics[guid] = executor.ContainerMetrics{ MemoryUsageInBytes: gardenMetric.MemoryStat.TotalUsageTowardLimit, DiskUsageInBytes: diskUsage, @@ -367,6 +374,8 @@ func (cs *containerStore) Metrics(logger lager.Logger) (map[string]executor.Cont TimeSpentInCPU: time.Duration(gardenMetric.CPUStat.Usage), ContainerAgeInNanoseconds: uint64(gardenMetric.Age), AbsoluteCPUEntitlementInNanoseconds: gardenMetric.CPUEntitlement, + RxInBytes: rxInBytes, + TxInBytes: txInBytes, } } diff --git a/depot/containerstore/containerstore_test.go b/depot/containerstore/containerstore_test.go index fffba8df..010cf5e6 100644 --- a/depot/containerstore/containerstore_test.go +++ b/depot/containerstore/containerstore_test.go @@ -3036,6 +3036,10 @@ var _ = Describe("Container Store", func() { _, err = containerStore.Create(logger, "some-trace-id", containerGuid4) Expect(err).ToNot(HaveOccurred()) + networkStat1 := garden.ContainerNetworkStat{ + RxBytes: uint64(42), + TxBytes: uint64(43), + } bulkMetrics := map[string]garden.ContainerMetricsEntry{ containerGuid1: garden.ContainerMetricsEntry{ Metrics: garden.Metrics{ @@ -3050,6 +3054,7 @@ var _ = Describe("Container Store", func() { }, Age: 1000000000, CPUEntitlement: 100, + NetworkStat: &networkStat1, }, }, containerGuid2: garden.ContainerMetricsEntry{ @@ -3065,6 +3070,7 @@ var _ = Describe("Container Store", func() { }, Age: 2000000000, CPUEntitlement: 200, + NetworkStat: nil, }, }, containerGuid4: garden.ContainerMetricsEntry{ @@ -3110,6 +3116,8 @@ var _ = Describe("Container Store", func() { Expect(container1Metrics.TimeSpentInCPU).To(Equal(5 * time.Second)) Expect(container1Metrics.ContainerAgeInNanoseconds).To(Equal(uint64(1000000000))) Expect(container1Metrics.AbsoluteCPUEntitlementInNanoseconds).To(Equal(uint64(100))) + Expect(*container1Metrics.RxInBytes).To(Equal(uint64(42))) + Expect(*container1Metrics.TxInBytes).To(Equal(uint64(43))) container2Metrics, ok := metrics[containerGuid2] Expect(ok).To(BeTrue()) @@ -3120,6 +3128,8 @@ var _ = Describe("Container Store", func() { Expect(container2Metrics.TimeSpentInCPU).To(Equal(1 * time.Millisecond)) Expect(container2Metrics.ContainerAgeInNanoseconds).To(Equal(uint64(2000000000))) Expect(container2Metrics.AbsoluteCPUEntitlementInNanoseconds).To(Equal(uint64(200))) + Expect(container2Metrics.RxInBytes).To(BeNil()) + Expect(container2Metrics.TxInBytes).To(BeNil()) }) Context("when fetching bulk metrics fails", func() { diff --git a/resources.go b/resources.go index cb61015c..042e42df 100644 --- a/resources.go +++ b/resources.go @@ -234,6 +234,8 @@ type ContainerMetrics struct { TimeSpentInCPU time.Duration `json:"time_spent_in_cpu"` AbsoluteCPUEntitlementInNanoseconds uint64 `json:"absolute_cpu_entitlement_in_ns"` ContainerAgeInNanoseconds uint64 `json:"container_age_in_ns"` + RxInBytes *uint64 `json:"rx_in_bytes"` + TxInBytes *uint64 `json:"tx_in_bytes"` } type MetricsConfig struct {