e5545a1461
This currently logs to a json file with the stream type. This is slow and hard on the cpu and memory so we need to swich this over to something like protobufs for the binary logs but this is just a start. Signed-off-by: Michael Crosby <crosbymichael@gmail.com>
106 lines
2.6 KiB
Go
106 lines
2.6 KiB
Go
package runtime
|
|
|
|
import (
|
|
"io"
|
|
"os"
|
|
"time"
|
|
|
|
"github.com/opencontainers/specs"
|
|
)
|
|
|
|
type Process interface {
|
|
Pid() (int, error)
|
|
Spec() specs.Process
|
|
Signal(os.Signal) error
|
|
}
|
|
|
|
type Status string
|
|
|
|
const (
|
|
Paused Status = "paused"
|
|
Running Status = "running"
|
|
)
|
|
|
|
type State struct {
|
|
Status Status
|
|
}
|
|
|
|
type IO struct {
|
|
Stdin io.WriteCloser
|
|
Stdout io.ReadCloser
|
|
Stderr io.ReadCloser
|
|
}
|
|
|
|
func (i *IO) Close() error {
|
|
var oerr error
|
|
for _, c := range []io.Closer{
|
|
i.Stdin,
|
|
i.Stdout,
|
|
i.Stderr,
|
|
} {
|
|
if err := c.Close(); oerr == nil {
|
|
oerr = err
|
|
}
|
|
}
|
|
return oerr
|
|
}
|
|
|
|
type Stat struct {
|
|
// Timestamp is the time that the statistics where collected
|
|
Timestamp time.Time
|
|
// Data is the raw stats
|
|
// TODO: it is currently an interface because we don't know what type of exec drivers
|
|
// we will have or what the structure should look like at the moment os the containers
|
|
// can return what they want and we could marshal to json or whatever.
|
|
Data interface{}
|
|
}
|
|
|
|
type Checkpoint struct {
|
|
// Timestamp is the time that checkpoint happened
|
|
Timestamp time.Time
|
|
// Name is the name of the checkpoint
|
|
Name string
|
|
// Tcp checkpoints open tcp connections
|
|
Tcp bool
|
|
// UnixSockets persists unix sockets in the checkpoint
|
|
UnixSockets bool
|
|
// Shell persists tty sessions in the checkpoint
|
|
Shell bool
|
|
// Exit exits the container after the checkpoint is finished
|
|
Exit bool
|
|
}
|
|
|
|
type Container interface {
|
|
// ID returns the container ID
|
|
ID() string
|
|
// Start starts the init process of the container
|
|
Start() error
|
|
// Path returns the path to the bundle
|
|
Path() string
|
|
// Pid returns the container's init process id
|
|
Pid() (int, error)
|
|
// SetExited sets the exit status of the container after it's init dies
|
|
SetExited(status int)
|
|
// Delete deletes the container
|
|
Delete() error
|
|
// Processes returns all the containers processes that have been added
|
|
Processes() ([]Process, error)
|
|
// RemoveProcess removes a specific process for the container because it exited
|
|
RemoveProcess(pid int) error
|
|
// State returns the containers runtime state
|
|
State() State
|
|
// Resume resumes a paused container
|
|
Resume() error
|
|
// Pause pauses a running container
|
|
Pause() error
|
|
// Checkpoints returns all the checkpoints for a container
|
|
Checkpoints() ([]Checkpoint, error)
|
|
// Checkpoint creates a new checkpoint
|
|
Checkpoint(Checkpoint) error
|
|
// DeleteCheckpoint deletes the checkpoint for the provided name
|
|
DeleteCheckpoint(name string) error
|
|
// Restore restores the container to that of the checkpoint provided by name
|
|
Restore(name string) error
|
|
// Stats returns realtime container stats and resource information
|
|
Stats() (*Stat, error)
|
|
}
|