зеркало из https://github.com/microsoft/docker.git
43 строки
1.0 KiB
Go
43 строки
1.0 KiB
Go
package stats
|
|
|
|
import (
|
|
"bufio"
|
|
"sync"
|
|
"time"
|
|
|
|
"github.com/docker/docker/api/types"
|
|
"github.com/docker/docker/container"
|
|
"github.com/docker/docker/pkg/pubsub"
|
|
)
|
|
|
|
type supervisor interface {
|
|
// GetContainerStats collects all the stats related to a container
|
|
GetContainerStats(container *container.Container) (*types.StatsJSON, error)
|
|
}
|
|
|
|
// NewCollector creates a stats collector that will poll the supervisor with the specified interval
|
|
func NewCollector(supervisor supervisor, interval time.Duration) *Collector {
|
|
s := &Collector{
|
|
interval: interval,
|
|
supervisor: supervisor,
|
|
publishers: make(map[*container.Container]*pubsub.Publisher),
|
|
bufReader: bufio.NewReaderSize(nil, 128),
|
|
}
|
|
|
|
platformNewStatsCollector(s)
|
|
|
|
return s
|
|
}
|
|
|
|
// Collector manages and provides container resource stats
|
|
type Collector struct {
|
|
m sync.Mutex
|
|
supervisor supervisor
|
|
interval time.Duration
|
|
publishers map[*container.Container]*pubsub.Publisher
|
|
bufReader *bufio.Reader
|
|
|
|
// The following fields are not set on Windows currently.
|
|
clockTicksPerSecond uint64
|
|
}
|