use in memory storage to do stats

This commit is contained in:
Nan Deng 2014-06-17 13:13:50 -07:00
parent 3718b139b3
commit e1dcc93231
3 changed files with 52 additions and 0 deletions

View File

@ -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

View File

@ -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

View File

@ -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")
}
}