mirror of
https://github.com/containers/podman.git
synced 2025-05-23 01:57:56 +08:00

We can just calculate the cpu percent for the time the container is running. There is no need to use datapoints. Signed-off-by: Paul Holzinger <pholzing@redhat.com>
153 lines
4.9 KiB
Go
153 lines
4.9 KiB
Go
package define
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
// ContainerStatus represents the current state of a container
|
|
type ContainerStatus int
|
|
|
|
const (
|
|
// ContainerStateUnknown indicates that the container is in an error
|
|
// state where information about it cannot be retrieved
|
|
ContainerStateUnknown ContainerStatus = iota
|
|
// ContainerStateConfigured indicates that the container has had its
|
|
// storage configured but it has not been created in the OCI runtime
|
|
ContainerStateConfigured ContainerStatus = iota
|
|
// ContainerStateCreated indicates the container has been created in
|
|
// the OCI runtime but not started
|
|
ContainerStateCreated ContainerStatus = iota
|
|
// ContainerStateRunning indicates the container is currently executing
|
|
ContainerStateRunning ContainerStatus = iota
|
|
// ContainerStateStopped indicates that the container was running but has
|
|
// exited
|
|
ContainerStateStopped ContainerStatus = iota
|
|
// ContainerStatePaused indicates that the container has been paused
|
|
ContainerStatePaused ContainerStatus = iota
|
|
// ContainerStateExited indicates the the container has stopped and been
|
|
// cleaned up
|
|
ContainerStateExited ContainerStatus = iota
|
|
// ContainerStateRemoving indicates the container is in the process of
|
|
// being removed.
|
|
ContainerStateRemoving ContainerStatus = iota
|
|
// ContainerStateStopping indicates the container is in the process of
|
|
// being stopped.
|
|
ContainerStateStopping ContainerStatus = iota
|
|
)
|
|
|
|
// ContainerStatus returns a string representation for users of a container
|
|
// state. All results should match Docker's versions (from `docker ps`) as
|
|
// closely as possible, given the different set of states we support.
|
|
func (t ContainerStatus) String() string {
|
|
switch t {
|
|
case ContainerStateUnknown:
|
|
return "unknown"
|
|
case ContainerStateConfigured:
|
|
// The naming here is confusing, but it's necessary for Docker
|
|
// compatibility - their Created state is our Configured state.
|
|
return "created"
|
|
case ContainerStateCreated:
|
|
// Docker does not have an equivalent to this state, so give it
|
|
// a clear name. Most of the time this is a purely transitory
|
|
// state between Configured and Running so we don't expect to
|
|
// see it much anyways.
|
|
return "initialized"
|
|
case ContainerStateRunning:
|
|
return "running"
|
|
case ContainerStateStopped:
|
|
return "stopped"
|
|
case ContainerStatePaused:
|
|
return "paused"
|
|
case ContainerStateExited:
|
|
return "exited"
|
|
case ContainerStateRemoving:
|
|
return "removing"
|
|
case ContainerStateStopping:
|
|
return "stopping"
|
|
}
|
|
return "bad state"
|
|
}
|
|
|
|
// StringToContainerStatus converts a string representation of a containers
|
|
// status into an actual container status type
|
|
func StringToContainerStatus(status string) (ContainerStatus, error) {
|
|
switch status {
|
|
case ContainerStateUnknown.String():
|
|
return ContainerStateUnknown, nil
|
|
case ContainerStateConfigured.String():
|
|
return ContainerStateConfigured, nil
|
|
case ContainerStateCreated.String():
|
|
return ContainerStateCreated, nil
|
|
case ContainerStateRunning.String():
|
|
return ContainerStateRunning, nil
|
|
case ContainerStateStopped.String():
|
|
return ContainerStateStopped, nil
|
|
case ContainerStatePaused.String():
|
|
return ContainerStatePaused, nil
|
|
case ContainerStateExited.String():
|
|
return ContainerStateExited, nil
|
|
case ContainerStateRemoving.String():
|
|
return ContainerStateRemoving, nil
|
|
default:
|
|
return ContainerStateUnknown, errors.Wrapf(ErrInvalidArg, "unknown container state: %s", status)
|
|
}
|
|
}
|
|
|
|
// ContainerExecStatus is the status of an exec session within a container.
|
|
type ContainerExecStatus int
|
|
|
|
const (
|
|
// ExecStateUnknown indicates that the state of the exec session is not
|
|
// known.
|
|
ExecStateUnknown ContainerExecStatus = iota
|
|
// ExecStateCreated indicates that the exec session has been created but
|
|
// not yet started
|
|
ExecStateCreated ContainerExecStatus = iota
|
|
// ExecStateRunning indicates that the exec session has been started but
|
|
// has not yet exited.
|
|
ExecStateRunning ContainerExecStatus = iota
|
|
// ExecStateStopped indicates that the exec session has stopped and is
|
|
// no longer running.
|
|
ExecStateStopped ContainerExecStatus = iota
|
|
)
|
|
|
|
// String returns a string representation of a given exec state.
|
|
func (s ContainerExecStatus) String() string {
|
|
switch s {
|
|
case ExecStateUnknown:
|
|
return "unknown"
|
|
case ExecStateCreated:
|
|
return "created"
|
|
case ExecStateRunning:
|
|
return "running"
|
|
case ExecStateStopped:
|
|
return "stopped"
|
|
default:
|
|
return "bad state"
|
|
}
|
|
}
|
|
|
|
// ContainerStats contains the statistics information for a running container
|
|
type ContainerStats struct {
|
|
AvgCPU float64
|
|
ContainerID string
|
|
Name string
|
|
PerCPU []uint64
|
|
CPU float64
|
|
CPUNano uint64
|
|
CPUSystemNano uint64
|
|
SystemNano uint64
|
|
MemUsage uint64
|
|
MemLimit uint64
|
|
MemPerc float64
|
|
NetInput uint64
|
|
NetOutput uint64
|
|
BlockInput uint64
|
|
BlockOutput uint64
|
|
PIDs uint64
|
|
UpTime time.Duration
|
|
Duration uint64
|
|
}
|