From e1dcc93231183dcebfa98f38649f83f99601bb8f Mon Sep 17 00:00:00 2001 From: Nan Deng Date: Tue, 17 Jun 2014 13:13:50 -0700 Subject: [PATCH] use in memory storage to do stats --- manager/manager.go | 7 ++++++ storage/memory/memory.go | 3 +++ storage/memory/memory_test.go | 42 +++++++++++++++++++++++++++++++++++ 3 files changed, 52 insertions(+) diff --git a/manager/manager.go b/manager/manager.go index 37955fa9..26d459b1 100644 --- a/manager/manager.go +++ b/manager/manager.go @@ -126,6 +126,7 @@ func (m *manager) GetContainerInfo(containerName string) (*info.ContainerInfo, e var percentiles *info.ContainerStatsPercentiles var samples []*info.ContainerStatsSample + var stats []*info.ContainerStats if m.storageDriver != nil { // XXX(monnand): These numbers should not be hard coded percentiles, err = m.storageDriver.Percentiles( @@ -140,6 +141,11 @@ func (m *manager) GetContainerInfo(containerName string) (*info.ContainerInfo, e if err != nil { return nil, err } + + stats, err = m.storageDriver.RecentStats(cinfo.Name, 1024) + if err != nil { + return nil, err + } } // Make a copy of the info for the user. @@ -152,6 +158,7 @@ func (m *manager) GetContainerInfo(containerName string) (*info.ContainerInfo, e Spec: cinfo.Spec, StatsPercentiles: percentiles, Samples: samples, + Stats: stats, } // Set default value to an actual value diff --git a/storage/memory/memory.go b/storage/memory/memory.go index 1fb5887e..10fdce59 100644 --- a/storage/memory/memory.go +++ b/storage/memory/memory.go @@ -134,6 +134,9 @@ func (self *containerStorage) Percentiles(cpuPercentiles, memPercentiles []int) if err != nil { return nil, err } + if len(samples) == 0 { + return nil, nil + } ret := info.NewPercentiles(samples, cpuPercentiles, memPercentiles) ret.MaxMemoryUsage = self.maxMemUsage return ret, nil diff --git a/storage/memory/memory_test.go b/storage/memory/memory_test.go index 750505b8..b5e6df7f 100644 --- a/storage/memory/memory_test.go +++ b/storage/memory/memory_test.go @@ -129,3 +129,45 @@ func TestMaxMemoryUsage(t *testing.T) { t.Fatalf("Max memory usage should be %v; received %v", maxUsage, percentiles.MaxMemoryUsage) } } + +func TestSamplesWithoutSample(t *testing.T) { + storage := New(10, 10) + trace := buildTrace( + []uint64{10}, + []uint64{10}, + 1*time.Second) + ref := info.ContainerReference{ + Name: "container", + } + storage.AddStats(ref, trace[0]) + samples, err := storage.Samples(ref.Name, -1) + if err != nil { + t.Fatal(err) + } + if len(samples) != 0 { + t.Errorf("There should be no sample") + } +} + +func TestPercentilesWithoutSample(t *testing.T) { + storage := New(10, 10) + trace := buildTrace( + []uint64{10}, + []uint64{10}, + 1*time.Second) + ref := info.ContainerReference{ + Name: "container", + } + storage.AddStats(ref, trace[0]) + percentiles, err := storage.Percentiles( + ref.Name, + []int{50}, + []int{50}, + ) + if err != nil { + t.Fatal(err) + } + if percentiles != nil { + t.Errorf("There should be no percentiles") + } +}