reduce labels for container info
This commit is contained in:
parent
5a2e3d06d6
commit
1ccbe6fdd0
10
cache/memory/memory.go
vendored
10
cache/memory/memory.go
vendored
@ -70,16 +70,16 @@ type InMemoryCache struct {
|
|||||||
backend storage.StorageDriver
|
backend storage.StorageDriver
|
||||||
}
|
}
|
||||||
|
|
||||||
func (self *InMemoryCache) AddStats(ref info.ContainerReference, stats *info.ContainerStats) error {
|
func (self *InMemoryCache) AddStats(cInfo *info.ContainerInfo, stats *info.ContainerStats) error {
|
||||||
var cstore *containerCache
|
var cstore *containerCache
|
||||||
var ok bool
|
var ok bool
|
||||||
|
|
||||||
func() {
|
func() {
|
||||||
self.lock.Lock()
|
self.lock.Lock()
|
||||||
defer self.lock.Unlock()
|
defer self.lock.Unlock()
|
||||||
if cstore, ok = self.containerCacheMap[ref.Name]; !ok {
|
if cstore, ok = self.containerCacheMap[cInfo.ContainerReference.Name]; !ok {
|
||||||
cstore = newContainerStore(ref, self.maxAge)
|
cstore = newContainerStore(cInfo.ContainerReference, self.maxAge)
|
||||||
self.containerCacheMap[ref.Name] = cstore
|
self.containerCacheMap[cInfo.ContainerReference.Name] = cstore
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
@ -87,7 +87,7 @@ func (self *InMemoryCache) AddStats(ref info.ContainerReference, stats *info.Con
|
|||||||
// TODO(monnand): To deal with long delay write operations, we
|
// TODO(monnand): To deal with long delay write operations, we
|
||||||
// may want to start a pool of goroutines to do write
|
// may want to start a pool of goroutines to do write
|
||||||
// operations.
|
// operations.
|
||||||
if err := self.backend.AddStats(ref, stats); err != nil {
|
if err := self.backend.AddStats(cInfo, stats); err != nil {
|
||||||
glog.Error(err)
|
glog.Error(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
26
cache/memory/memory_test.go
vendored
26
cache/memory/memory_test.go
vendored
@ -27,8 +27,10 @@ import (
|
|||||||
const containerName = "/container"
|
const containerName = "/container"
|
||||||
|
|
||||||
var (
|
var (
|
||||||
containerRef = info.ContainerReference{Name: containerName}
|
cInfo = info.ContainerInfo{
|
||||||
zero time.Time
|
ContainerReference: info.ContainerReference{Name: containerName},
|
||||||
|
}
|
||||||
|
zero time.Time
|
||||||
)
|
)
|
||||||
|
|
||||||
// Make stats with the specified identifier.
|
// Make stats with the specified identifier.
|
||||||
@ -51,15 +53,17 @@ func TestAddStats(t *testing.T) {
|
|||||||
memoryCache := New(60*time.Second, nil)
|
memoryCache := New(60*time.Second, nil)
|
||||||
|
|
||||||
assert := assert.New(t)
|
assert := assert.New(t)
|
||||||
assert.Nil(memoryCache.AddStats(containerRef, makeStat(0)))
|
assert.Nil(memoryCache.AddStats(&cInfo, makeStat(0)))
|
||||||
assert.Nil(memoryCache.AddStats(containerRef, makeStat(1)))
|
assert.Nil(memoryCache.AddStats(&cInfo, makeStat(1)))
|
||||||
assert.Nil(memoryCache.AddStats(containerRef, makeStat(2)))
|
assert.Nil(memoryCache.AddStats(&cInfo, makeStat(2)))
|
||||||
assert.Nil(memoryCache.AddStats(containerRef, makeStat(0)))
|
assert.Nil(memoryCache.AddStats(&cInfo, makeStat(0)))
|
||||||
containerRef2 := info.ContainerReference{
|
cInfo2 := info.ContainerInfo{
|
||||||
Name: "/container2",
|
ContainerReference: info.ContainerReference{
|
||||||
|
Name: "/container2",
|
||||||
|
},
|
||||||
}
|
}
|
||||||
assert.Nil(memoryCache.AddStats(containerRef2, makeStat(0)))
|
assert.Nil(memoryCache.AddStats(&cInfo2, makeStat(0)))
|
||||||
assert.Nil(memoryCache.AddStats(containerRef2, makeStat(1)))
|
assert.Nil(memoryCache.AddStats(&cInfo2, makeStat(1)))
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestRecentStatsNoRecentStats(t *testing.T) {
|
func TestRecentStatsNoRecentStats(t *testing.T) {
|
||||||
@ -74,7 +78,7 @@ func makeWithStats(n int) *InMemoryCache {
|
|||||||
memoryCache := New(60*time.Second, nil)
|
memoryCache := New(60*time.Second, nil)
|
||||||
|
|
||||||
for i := 0; i < n; i++ {
|
for i := 0; i < n; i++ {
|
||||||
memoryCache.AddStats(containerRef, makeStat(i))
|
memoryCache.AddStats(&cInfo, makeStat(i))
|
||||||
}
|
}
|
||||||
return memoryCache
|
return memoryCache
|
||||||
}
|
}
|
||||||
|
@ -148,7 +148,6 @@ func (self *containerdContainerHandler) ContainerReference() (info.ContainerRefe
|
|||||||
Id: self.id,
|
Id: self.id,
|
||||||
Name: self.name,
|
Name: self.name,
|
||||||
Namespace: k8sContainerdNamespace,
|
Namespace: k8sContainerdNamespace,
|
||||||
Labels: self.labels,
|
|
||||||
Aliases: self.aliases,
|
Aliases: self.aliases,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
@ -89,7 +89,6 @@ func TestHandler(t *testing.T) {
|
|||||||
Name: "/kubepods/pod068e8fa0-9213-11e7-a01f-507b9d4141fa/40af7cdcbe507acad47a5a62025743ad3ddc6ab93b77b21363aa1c1d641047c9",
|
Name: "/kubepods/pod068e8fa0-9213-11e7-a01f-507b9d4141fa/40af7cdcbe507acad47a5a62025743ad3ddc6ab93b77b21363aa1c1d641047c9",
|
||||||
Aliases: []string{"40af7cdcbe507acad47a5a62025743ad3ddc6ab93b77b21363aa1c1d641047c9", "/kubepods/pod068e8fa0-9213-11e7-a01f-507b9d4141fa/40af7cdcbe507acad47a5a62025743ad3ddc6ab93b77b21363aa1c1d641047c9"},
|
Aliases: []string{"40af7cdcbe507acad47a5a62025743ad3ddc6ab93b77b21363aa1c1d641047c9", "/kubepods/pod068e8fa0-9213-11e7-a01f-507b9d4141fa/40af7cdcbe507acad47a5a62025743ad3ddc6ab93b77b21363aa1c1d641047c9"},
|
||||||
Namespace: k8sContainerdNamespace,
|
Namespace: k8sContainerdNamespace,
|
||||||
Labels: map[string]string{"io.cri-containerd.kind": "sandbox"},
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
} {
|
} {
|
||||||
|
@ -209,7 +209,6 @@ func (self *crioContainerHandler) ContainerReference() (info.ContainerReference,
|
|||||||
Name: self.name,
|
Name: self.name,
|
||||||
Aliases: self.aliases,
|
Aliases: self.aliases,
|
||||||
Namespace: CrioNamespace,
|
Namespace: CrioNamespace,
|
||||||
Labels: self.labels,
|
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -99,7 +99,6 @@ func TestHandler(t *testing.T) {
|
|||||||
Name: "/kubepods/pod068e8fa0-9213-11e7-a01f-507b9d4141fa/crio-81e5c2990803c383229c9680ce964738d5e566d97f5bd436ac34808d2ec75d5f",
|
Name: "/kubepods/pod068e8fa0-9213-11e7-a01f-507b9d4141fa/crio-81e5c2990803c383229c9680ce964738d5e566d97f5bd436ac34808d2ec75d5f",
|
||||||
Aliases: []string{"test", "81e5c2990803c383229c9680ce964738d5e566d97f5bd436ac34808d2ec75d5f"},
|
Aliases: []string{"test", "81e5c2990803c383229c9680ce964738d5e566d97f5bd436ac34808d2ec75d5f"},
|
||||||
Namespace: CrioNamespace,
|
Namespace: CrioNamespace,
|
||||||
Labels: map[string]string{"io.kubernetes.container.name": "POD"},
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
} {
|
} {
|
||||||
|
@ -369,7 +369,6 @@ func (self *dockerContainerHandler) ContainerReference() (info.ContainerReferenc
|
|||||||
Name: self.name,
|
Name: self.name,
|
||||||
Aliases: self.aliases,
|
Aliases: self.aliases,
|
||||||
Namespace: DockerNamespace,
|
Namespace: DockerNamespace,
|
||||||
Labels: self.labels,
|
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -178,7 +178,6 @@ func (handler *rktContainerHandler) ContainerReference() (info.ContainerReferenc
|
|||||||
Name: handler.name,
|
Name: handler.name,
|
||||||
Aliases: handler.aliases,
|
Aliases: handler.aliases,
|
||||||
Namespace: RktNamespace,
|
Namespace: RktNamespace,
|
||||||
Labels: handler.labels,
|
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -85,8 +85,6 @@ type ContainerReference struct {
|
|||||||
// Namespace under which the aliases of a container are unique.
|
// Namespace under which the aliases of a container are unique.
|
||||||
// An example of a namespace is "docker" for Docker containers.
|
// An example of a namespace is "docker" for Docker containers.
|
||||||
Namespace string `json:"namespace,omitempty"`
|
Namespace string `json:"namespace,omitempty"`
|
||||||
|
|
||||||
Labels map[string]string `json:"labels,omitempty"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sorts by container name.
|
// Sorts by container name.
|
||||||
|
@ -615,7 +615,12 @@ func (c *containerData) updateStats() error {
|
|||||||
}
|
}
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
err = c.memoryCache.AddStats(ref, stats)
|
|
||||||
|
cInfo := info.ContainerInfo{
|
||||||
|
ContainerReference: ref,
|
||||||
|
}
|
||||||
|
|
||||||
|
err = c.memoryCache.AddStats(&cInfo, stats)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -102,8 +102,12 @@ func expectManagerWithContainers(containers []string, query *info.ContainerInfoR
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cInfo := info.ContainerInfo{
|
||||||
|
ContainerReference: ref,
|
||||||
|
}
|
||||||
for _, stat := range cinfo.Stats {
|
for _, stat := range cinfo.Stats {
|
||||||
err = memoryCache.AddStats(ref, stat)
|
err = memoryCache.AddStats(&cInfo, stat)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
}
|
}
|
||||||
@ -148,8 +152,13 @@ func expectManagerWithContainersV2(containers []string, query *info.ContainerInf
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cInfo := info.ContainerInfo{
|
||||||
|
ContainerReference: ref,
|
||||||
|
}
|
||||||
|
|
||||||
for _, stat := range cinfo.Stats {
|
for _, stat := range cinfo.Stats {
|
||||||
err = memoryCache.AddStats(ref, stat)
|
err = memoryCache.AddStats(&cInfo, stat)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
}
|
}
|
||||||
|
@ -193,7 +193,7 @@ func (self *bigqueryStorage) GetSchema() *bigquery.TableSchema {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (self *bigqueryStorage) containerStatsToRows(
|
func (self *bigqueryStorage) containerStatsToRows(
|
||||||
ref info.ContainerReference,
|
cInfo *info.ContainerInfo,
|
||||||
stats *info.ContainerStats,
|
stats *info.ContainerStats,
|
||||||
) (row map[string]interface{}) {
|
) (row map[string]interface{}) {
|
||||||
row = make(map[string]interface{})
|
row = make(map[string]interface{})
|
||||||
@ -205,9 +205,9 @@ func (self *bigqueryStorage) containerStatsToRows(
|
|||||||
row[colMachineName] = self.machineName
|
row[colMachineName] = self.machineName
|
||||||
|
|
||||||
// Container name
|
// Container name
|
||||||
name := ref.Name
|
name := cInfo.ContainerReference.Name
|
||||||
if len(ref.Aliases) > 0 {
|
if len(cInfo.ContainerReference.Aliases) > 0 {
|
||||||
name = ref.Aliases[0]
|
name = cInfo.ContainerReference.Aliases[0]
|
||||||
}
|
}
|
||||||
row[colContainerName] = name
|
row[colContainerName] = name
|
||||||
|
|
||||||
@ -250,7 +250,7 @@ func (self *bigqueryStorage) containerStatsToRows(
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (self *bigqueryStorage) containerFilesystemStatsToRows(
|
func (self *bigqueryStorage) containerFilesystemStatsToRows(
|
||||||
ref info.ContainerReference,
|
cInfo *info.ContainerInfo,
|
||||||
stats *info.ContainerStats,
|
stats *info.ContainerStats,
|
||||||
) (rows []map[string]interface{}) {
|
) (rows []map[string]interface{}) {
|
||||||
for _, fsStat := range stats.Filesystem {
|
for _, fsStat := range stats.Filesystem {
|
||||||
@ -263,13 +263,13 @@ func (self *bigqueryStorage) containerFilesystemStatsToRows(
|
|||||||
return rows
|
return rows
|
||||||
}
|
}
|
||||||
|
|
||||||
func (self *bigqueryStorage) AddStats(ref info.ContainerReference, stats *info.ContainerStats) error {
|
func (self *bigqueryStorage) AddStats(cInfo *info.ContainerInfo, stats *info.ContainerStats) error {
|
||||||
if stats == nil {
|
if stats == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
rows := make([]map[string]interface{}, 0)
|
rows := make([]map[string]interface{}, 0)
|
||||||
rows = append(rows, self.containerStatsToRows(ref, stats))
|
rows = append(rows, self.containerStatsToRows(cInfo, stats))
|
||||||
rows = append(rows, self.containerFilesystemStatsToRows(ref, stats)...)
|
rows = append(rows, self.containerFilesystemStatsToRows(cInfo, stats)...)
|
||||||
for _, row := range rows {
|
for _, row := range rows {
|
||||||
err := self.client.InsertRow(row)
|
err := self.client.InsertRow(row)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -68,13 +68,13 @@ func new() (storage.StorageDriver, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (self *elasticStorage) containerStatsAndDefaultValues(
|
func (self *elasticStorage) containerStatsAndDefaultValues(
|
||||||
ref info.ContainerReference, stats *info.ContainerStats) *detailSpec {
|
cInfo *info.ContainerInfo, stats *info.ContainerStats) *detailSpec {
|
||||||
timestamp := stats.Timestamp.UnixNano() / 1E3
|
timestamp := stats.Timestamp.UnixNano() / 1E3
|
||||||
var containerName string
|
var containerName string
|
||||||
if len(ref.Aliases) > 0 {
|
if len(cInfo.ContainerReference.Aliases) > 0 {
|
||||||
containerName = ref.Aliases[0]
|
containerName = cInfo.ContainerReference.Aliases[0]
|
||||||
} else {
|
} else {
|
||||||
containerName = ref.Name
|
containerName = cInfo.ContainerReference.Name
|
||||||
}
|
}
|
||||||
detail := &detailSpec{
|
detail := &detailSpec{
|
||||||
Timestamp: timestamp,
|
Timestamp: timestamp,
|
||||||
@ -85,7 +85,7 @@ func (self *elasticStorage) containerStatsAndDefaultValues(
|
|||||||
return detail
|
return detail
|
||||||
}
|
}
|
||||||
|
|
||||||
func (self *elasticStorage) AddStats(ref info.ContainerReference, stats *info.ContainerStats) error {
|
func (self *elasticStorage) AddStats(cInfo *info.ContainerInfo, stats *info.ContainerStats) error {
|
||||||
if stats == nil {
|
if stats == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -94,7 +94,7 @@ func (self *elasticStorage) AddStats(ref info.ContainerReference, stats *info.Co
|
|||||||
self.lock.Lock()
|
self.lock.Lock()
|
||||||
defer self.lock.Unlock()
|
defer self.lock.Unlock()
|
||||||
// Add some default params based on ContainerStats
|
// Add some default params based on ContainerStats
|
||||||
detail := self.containerStatsAndDefaultValues(ref, stats)
|
detail := self.containerStatsAndDefaultValues(cInfo, stats)
|
||||||
// Index a cadvisor (using JSON serialization)
|
// Index a cadvisor (using JSON serialization)
|
||||||
_, err := self.client.Index().
|
_, err := self.client.Index().
|
||||||
Index(self.indexName).
|
Index(self.indexName).
|
||||||
|
@ -108,7 +108,7 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func (self *influxdbStorage) containerFilesystemStatsToPoints(
|
func (self *influxdbStorage) containerFilesystemStatsToPoints(
|
||||||
ref info.ContainerReference,
|
cInfo *info.ContainerInfo,
|
||||||
stats *info.ContainerStats) (points []*influxdb.Point) {
|
stats *info.ContainerStats) (points []*influxdb.Point) {
|
||||||
if len(stats.Filesystem) == 0 {
|
if len(stats.Filesystem) == 0 {
|
||||||
return points
|
return points
|
||||||
@ -143,20 +143,20 @@ func (self *influxdbStorage) containerFilesystemStatsToPoints(
|
|||||||
points = append(points, pointFsUsage, pointFsLimit)
|
points = append(points, pointFsUsage, pointFsLimit)
|
||||||
}
|
}
|
||||||
|
|
||||||
self.tagPoints(ref, stats, points)
|
self.tagPoints(cInfo, stats, points)
|
||||||
|
|
||||||
return points
|
return points
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set tags and timestamp for all points of the batch.
|
// Set tags and timestamp for all points of the batch.
|
||||||
// Points should inherit the tags that are set for BatchPoints, but that does not seem to work.
|
// Points should inherit the tags that are set for BatchPoints, but that does not seem to work.
|
||||||
func (self *influxdbStorage) tagPoints(ref info.ContainerReference, stats *info.ContainerStats, points []*influxdb.Point) {
|
func (self *influxdbStorage) tagPoints(cInfo *info.ContainerInfo, stats *info.ContainerStats, points []*influxdb.Point) {
|
||||||
// Use container alias if possible
|
// Use container alias if possible
|
||||||
var containerName string
|
var containerName string
|
||||||
if len(ref.Aliases) > 0 {
|
if len(cInfo.ContainerReference.Aliases) > 0 {
|
||||||
containerName = ref.Aliases[0]
|
containerName = cInfo.ContainerReference.Aliases[0]
|
||||||
} else {
|
} else {
|
||||||
containerName = ref.Name
|
containerName = cInfo.ContainerReference.Name
|
||||||
}
|
}
|
||||||
|
|
||||||
commonTags := map[string]string{
|
commonTags := map[string]string{
|
||||||
@ -166,13 +166,13 @@ func (self *influxdbStorage) tagPoints(ref info.ContainerReference, stats *info.
|
|||||||
for i := 0; i < len(points); i++ {
|
for i := 0; i < len(points); i++ {
|
||||||
// merge with existing tags if any
|
// merge with existing tags if any
|
||||||
addTagsToPoint(points[i], commonTags)
|
addTagsToPoint(points[i], commonTags)
|
||||||
addTagsToPoint(points[i], ref.Labels)
|
addTagsToPoint(points[i], cInfo.Spec.Labels)
|
||||||
points[i].Time = stats.Timestamp
|
points[i].Time = stats.Timestamp
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (self *influxdbStorage) containerStatsToPoints(
|
func (self *influxdbStorage) containerStatsToPoints(
|
||||||
ref info.ContainerReference,
|
cInfo *info.ContainerInfo,
|
||||||
stats *info.ContainerStats,
|
stats *info.ContainerStats,
|
||||||
) (points []*influxdb.Point) {
|
) (points []*influxdb.Point) {
|
||||||
// CPU usage: Total usage in nanoseconds
|
// CPU usage: Total usage in nanoseconds
|
||||||
@ -208,7 +208,7 @@ func (self *influxdbStorage) containerStatsToPoints(
|
|||||||
points = append(points, makePoint(serTxBytes, stats.Network.TxBytes))
|
points = append(points, makePoint(serTxBytes, stats.Network.TxBytes))
|
||||||
points = append(points, makePoint(serTxErrors, stats.Network.TxErrors))
|
points = append(points, makePoint(serTxErrors, stats.Network.TxErrors))
|
||||||
|
|
||||||
self.tagPoints(ref, stats, points)
|
self.tagPoints(cInfo, stats, points)
|
||||||
|
|
||||||
return points
|
return points
|
||||||
}
|
}
|
||||||
@ -221,7 +221,7 @@ func (self *influxdbStorage) defaultReadyToFlush() bool {
|
|||||||
return time.Since(self.lastWrite) >= self.bufferDuration
|
return time.Since(self.lastWrite) >= self.bufferDuration
|
||||||
}
|
}
|
||||||
|
|
||||||
func (self *influxdbStorage) AddStats(ref info.ContainerReference, stats *info.ContainerStats) error {
|
func (self *influxdbStorage) AddStats(cInfo *info.ContainerInfo, stats *info.ContainerStats) error {
|
||||||
if stats == nil {
|
if stats == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -231,8 +231,8 @@ func (self *influxdbStorage) AddStats(ref info.ContainerReference, stats *info.C
|
|||||||
self.lock.Lock()
|
self.lock.Lock()
|
||||||
defer self.lock.Unlock()
|
defer self.lock.Unlock()
|
||||||
|
|
||||||
self.points = append(self.points, self.containerStatsToPoints(ref, stats)...)
|
self.points = append(self.points, self.containerStatsToPoints(cInfo, stats)...)
|
||||||
self.points = append(self.points, self.containerFilesystemStatsToPoints(ref, stats)...)
|
self.points = append(self.points, self.containerFilesystemStatsToPoints(cInfo, stats)...)
|
||||||
if self.readyToFlush() {
|
if self.readyToFlush() {
|
||||||
pointsToFlush = self.points
|
pointsToFlush = self.points
|
||||||
self.points = make([]*influxdb.Point, 0)
|
self.points = make([]*influxdb.Point, 0)
|
||||||
|
@ -47,9 +47,9 @@ func (self *influxDbTestStorageDriver) readyToFlush() bool {
|
|||||||
return self.count >= self.buffer
|
return self.count >= self.buffer
|
||||||
}
|
}
|
||||||
|
|
||||||
func (self *influxDbTestStorageDriver) AddStats(ref info.ContainerReference, stats *info.ContainerStats) error {
|
func (self *influxDbTestStorageDriver) AddStats(cInfo *info.ContainerInfo, stats *info.ContainerStats) error {
|
||||||
self.count++
|
self.count++
|
||||||
return self.base.AddStats(ref, stats)
|
return self.base.AddStats(cInfo, stats)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (self *influxDbTestStorageDriver) Close() error {
|
func (self *influxDbTestStorageDriver) Close() error {
|
||||||
|
@ -60,11 +60,11 @@ type detailSpec struct {
|
|||||||
ContainerStats *info.ContainerStats `json:"container_stats,omitempty"`
|
ContainerStats *info.ContainerStats `json:"container_stats,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (driver *kafkaStorage) infoToDetailSpec(ref info.ContainerReference, stats *info.ContainerStats) *detailSpec {
|
func (driver *kafkaStorage) infoToDetailSpec(cInfo *info.ContainerInfo, stats *info.ContainerStats) *detailSpec {
|
||||||
timestamp := time.Now()
|
timestamp := time.Now()
|
||||||
containerID := ref.Id
|
containerID := cInfo.ContainerReference.Id
|
||||||
containerLabels := ref.Labels
|
containerLabels := cInfo.Spec.Labels
|
||||||
containerName := container.GetPreferredName(ref)
|
containerName := container.GetPreferredName(cInfo.ContainerReference)
|
||||||
|
|
||||||
detail := &detailSpec{
|
detail := &detailSpec{
|
||||||
Timestamp: timestamp,
|
Timestamp: timestamp,
|
||||||
@ -77,8 +77,8 @@ func (driver *kafkaStorage) infoToDetailSpec(ref info.ContainerReference, stats
|
|||||||
return detail
|
return detail
|
||||||
}
|
}
|
||||||
|
|
||||||
func (driver *kafkaStorage) AddStats(ref info.ContainerReference, stats *info.ContainerStats) error {
|
func (driver *kafkaStorage) AddStats(cInfo *info.ContainerInfo, stats *info.ContainerStats) error {
|
||||||
detail := driver.infoToDetailSpec(ref, stats)
|
detail := driver.infoToDetailSpec(cInfo, stats)
|
||||||
b, err := json.Marshal(detail)
|
b, err := json.Marshal(detail)
|
||||||
|
|
||||||
driver.producer.Input() <- &kafka.ProducerMessage{
|
driver.producer.Input() <- &kafka.ProducerMessage{
|
||||||
|
@ -65,13 +65,13 @@ func (self *redisStorage) defaultReadyToFlush() bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// We must add some default params (for example: MachineName,ContainerName...)because containerStats do not include them
|
// We must add some default params (for example: MachineName,ContainerName...)because containerStats do not include them
|
||||||
func (self *redisStorage) containerStatsAndDefaultValues(ref info.ContainerReference, stats *info.ContainerStats) *detailSpec {
|
func (self *redisStorage) containerStatsAndDefaultValues(cInfo *info.ContainerInfo, stats *info.ContainerStats) *detailSpec {
|
||||||
timestamp := stats.Timestamp.UnixNano() / 1E3
|
timestamp := stats.Timestamp.UnixNano() / 1E3
|
||||||
var containerName string
|
var containerName string
|
||||||
if len(ref.Aliases) > 0 {
|
if len(cInfo.ContainerReference.Aliases) > 0 {
|
||||||
containerName = ref.Aliases[0]
|
containerName = cInfo.ContainerReference.Aliases[0]
|
||||||
} else {
|
} else {
|
||||||
containerName = ref.Name
|
containerName = cInfo.ContainerReference.Name
|
||||||
}
|
}
|
||||||
detail := &detailSpec{
|
detail := &detailSpec{
|
||||||
Timestamp: timestamp,
|
Timestamp: timestamp,
|
||||||
@ -83,7 +83,7 @@ func (self *redisStorage) containerStatsAndDefaultValues(ref info.ContainerRefer
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Push the data into redis
|
// Push the data into redis
|
||||||
func (self *redisStorage) AddStats(ref info.ContainerReference, stats *info.ContainerStats) error {
|
func (self *redisStorage) AddStats(cInfo *info.ContainerInfo, stats *info.ContainerStats) error {
|
||||||
if stats == nil {
|
if stats == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -93,7 +93,7 @@ func (self *redisStorage) AddStats(ref info.ContainerReference, stats *info.Cont
|
|||||||
self.lock.Lock()
|
self.lock.Lock()
|
||||||
defer self.lock.Unlock()
|
defer self.lock.Unlock()
|
||||||
// Add some default params based on containerStats
|
// Add some default params based on containerStats
|
||||||
detail := self.containerStatsAndDefaultValues(ref, stats)
|
detail := self.containerStatsAndDefaultValues(cInfo, stats)
|
||||||
// To json
|
// To json
|
||||||
b, _ := json.Marshal(detail)
|
b, _ := json.Marshal(detail)
|
||||||
if self.readyToFlush() {
|
if self.readyToFlush() {
|
||||||
|
@ -105,16 +105,16 @@ func (self *statsdStorage) containerFsStatsToValues(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Push the data into redis
|
// Push the data into redis
|
||||||
func (self *statsdStorage) AddStats(ref info.ContainerReference, stats *info.ContainerStats) error {
|
func (self *statsdStorage) AddStats(cInfo *info.ContainerInfo, stats *info.ContainerStats) error {
|
||||||
if stats == nil {
|
if stats == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
var containerName string
|
var containerName string
|
||||||
if len(ref.Aliases) > 0 {
|
if len(cInfo.ContainerReference.Aliases) > 0 {
|
||||||
containerName = ref.Aliases[0]
|
containerName = cInfo.ContainerReference.Aliases[0]
|
||||||
} else {
|
} else {
|
||||||
containerName = ref.Name
|
containerName = cInfo.ContainerReference.Name
|
||||||
}
|
}
|
||||||
|
|
||||||
series := self.containerStatsToValues(stats)
|
series := self.containerStatsToValues(stats)
|
||||||
|
@ -89,14 +89,14 @@ func (driver *stdoutStorage) containerFsStatsToValues(series *map[string]uint64,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (driver *stdoutStorage) AddStats(ref info.ContainerReference, stats *info.ContainerStats) error {
|
func (driver *stdoutStorage) AddStats(cInfo *info.ContainerInfo, stats *info.ContainerStats) error {
|
||||||
if stats == nil {
|
if stats == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
containerName := ref.Name
|
containerName := cInfo.ContainerReference.Name
|
||||||
if len(ref.Aliases) > 0 {
|
if len(cInfo.ContainerReference.Aliases) > 0 {
|
||||||
containerName = ref.Aliases[0]
|
containerName = cInfo.ContainerReference.Aliases[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
var buffer bytes.Buffer
|
var buffer bytes.Buffer
|
||||||
|
@ -22,7 +22,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type StorageDriver interface {
|
type StorageDriver interface {
|
||||||
AddStats(ref info.ContainerReference, stats *info.ContainerStats) error
|
AddStats(cInfo *info.ContainerInfo, stats *info.ContainerStats) error
|
||||||
|
|
||||||
// Close will clear the state of the storage driver. The elements
|
// Close will clear the state of the storage driver. The elements
|
||||||
// stored in the underlying storage may or may not be deleted depending
|
// stored in the underlying storage may or may not be deleted depending
|
||||||
|
@ -25,8 +25,8 @@ type MockStorageDriver struct {
|
|||||||
MockCloseMethod bool
|
MockCloseMethod bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func (self *MockStorageDriver) AddStats(ref info.ContainerReference, stats *info.ContainerStats) error {
|
func (self *MockStorageDriver) AddStats(cInfo *info.ContainerInfo, stats *info.ContainerStats) error {
|
||||||
args := self.Called(ref, stats)
|
args := self.Called(cInfo.ContainerReference, stats)
|
||||||
return args.Error(0)
|
return args.Error(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -123,14 +123,16 @@ func StorageDriverFillRandomStatsFunc(
|
|||||||
|
|
||||||
samplePeriod := 1 * time.Second
|
samplePeriod := 1 * time.Second
|
||||||
|
|
||||||
ref := info.ContainerReference{
|
cInfo := info.ContainerInfo{
|
||||||
Name: containerName,
|
ContainerReference: info.ContainerReference{
|
||||||
|
Name: containerName,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
trace := buildTrace(cpuTrace, memTrace, samplePeriod)
|
trace := buildTrace(cpuTrace, memTrace, samplePeriod)
|
||||||
|
|
||||||
for _, stats := range trace {
|
for _, stats := range trace {
|
||||||
err := driver.AddStats(ref, stats)
|
err := driver.AddStats(&cInfo, stats)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("unable to add stats: %v", err)
|
t.Fatalf("unable to add stats: %v", err)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user