cf0adcc817 introduced two switch
statements to facilitate the addition of the `overlayStorageDriver`;
unfortunately neither of them conform to the Go switch semantic, which
does not fallthrough unless explicitly requested. In one case this was
innocuous (because a `break` was effectively the same as a no-op) but in
the other it would cause the `HasFilesystem` bool to not be set
appropriately in the case of `aufsStorageDriver` being used.
IMHO it's also more idiomatic to perform the default behaviour in the
default case rather than pre-setting and overriding it.
Docker does not provide the rootfs path through docker inspect or statefile
and the path is dependent on the storage driver being used.
Instead of enumerating the storage drivers, we pick a pid from the container
and get the config from /proc/pid/root. Although a bit expensive, this method
works for non-docker containers too.
/storage returns {device, mountpoint, capacity, usage} for all filesystems.
In addition, it also detect and applies label for each filesystem - currently two - "root", "docker-images".
/storage/<label> returns info about the filesystem with specific label. eg. /storage/root returns info for root filesystem.
This should make us more robust in the face of failure (at the cost of
making the failures less prominent). We allow GetStats() to return an
error and a partial result. We will process the result and report the
error.
Fixes#306.
The stats are only populated when cAdvisor is running outside network namespaces.
We'll add a different backend to retrieve the same data from within namespaces.
This adds an Exists() interface to detect when the container is dead.
Before reporting an update error we check is Exists() is true.
Some documentation was added as well.
This is done by introducting the concept of "namespaces" of container
names. The aliases of a container are under this namespace. Namespace
names are of the form:
//<namespace>/<alias>
This allows us to (within cAdvisor) query all docker containers as
//docker regardless of whether this is a systemd or a non-systemd system.
This does break our ability to handle Docker aliases with the /container
endpoint. I think this is acceptable as our support there was not
consistent between system types.