mirror of
https://github.com/aljazceru/kata-containers.git
synced 2025-12-27 19:14:21 +01:00
StatsSandbox is used to gather metrics for the sandbox (host cgroup) as well as from the individual containers (from the guest cgroups). This is intended to be used for easily calculating Kata sandbox overheads. Fixes: #2096 Signed-off-by: Jose Carlos Venegas Munoz <jose.carlos.venegas.munoz@intel.com> Signed-off-by: Eric Ernst <eric.ernst@intel.com>
117 lines
5.5 KiB
Go
117 lines
5.5 KiB
Go
// Copyright (c) 2017 Intel Corporation
|
|
//
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
//
|
|
|
|
package virtcontainers
|
|
|
|
import (
|
|
"context"
|
|
"io"
|
|
"syscall"
|
|
|
|
"github.com/kata-containers/runtime/virtcontainers/device/api"
|
|
"github.com/kata-containers/runtime/virtcontainers/device/config"
|
|
vcTypes "github.com/kata-containers/runtime/virtcontainers/pkg/types"
|
|
"github.com/kata-containers/runtime/virtcontainers/types"
|
|
specs "github.com/opencontainers/runtime-spec/specs-go"
|
|
"github.com/sirupsen/logrus"
|
|
)
|
|
|
|
// VC is the Virtcontainers interface
|
|
type VC interface {
|
|
SetLogger(ctx context.Context, logger *logrus.Entry)
|
|
SetFactory(ctx context.Context, factory Factory)
|
|
|
|
CreateSandbox(ctx context.Context, sandboxConfig SandboxConfig) (VCSandbox, error)
|
|
DeleteSandbox(ctx context.Context, sandboxID string) (VCSandbox, error)
|
|
FetchSandbox(ctx context.Context, sandboxID string) (VCSandbox, error)
|
|
ListSandbox(ctx context.Context) ([]SandboxStatus, error)
|
|
PauseSandbox(ctx context.Context, sandboxID string) (VCSandbox, error)
|
|
ResumeSandbox(ctx context.Context, sandboxID string) (VCSandbox, error)
|
|
RunSandbox(ctx context.Context, sandboxConfig SandboxConfig) (VCSandbox, error)
|
|
StartSandbox(ctx context.Context, sandboxID string) (VCSandbox, error)
|
|
StatusSandbox(ctx context.Context, sandboxID string) (SandboxStatus, error)
|
|
StopSandbox(ctx context.Context, sandboxID string, force bool) (VCSandbox, error)
|
|
|
|
CreateContainer(ctx context.Context, sandboxID string, containerConfig ContainerConfig) (VCSandbox, VCContainer, error)
|
|
DeleteContainer(ctx context.Context, sandboxID, containerID string) (VCContainer, error)
|
|
EnterContainer(ctx context.Context, sandboxID, containerID string, cmd types.Cmd) (VCSandbox, VCContainer, *Process, error)
|
|
KillContainer(ctx context.Context, sandboxID, containerID string, signal syscall.Signal, all bool) error
|
|
StartContainer(ctx context.Context, sandboxID, containerID string) (VCContainer, error)
|
|
StatusContainer(ctx context.Context, sandboxID, containerID string) (ContainerStatus, error)
|
|
StatsContainer(ctx context.Context, sandboxID, containerID string) (ContainerStats, error)
|
|
StatsSandbox(ctx context.Context, sandboxID string) (SandboxStats, []ContainerStats, error)
|
|
StopContainer(ctx context.Context, sandboxID, containerID string) (VCContainer, error)
|
|
ProcessListContainer(ctx context.Context, sandboxID, containerID string, options ProcessListOptions) (ProcessList, error)
|
|
UpdateContainer(ctx context.Context, sandboxID, containerID string, resources specs.LinuxResources) error
|
|
PauseContainer(ctx context.Context, sandboxID, containerID string) error
|
|
ResumeContainer(ctx context.Context, sandboxID, containerID string) error
|
|
|
|
AddDevice(ctx context.Context, sandboxID string, info config.DeviceInfo) (api.Device, error)
|
|
|
|
AddInterface(ctx context.Context, sandboxID string, inf *vcTypes.Interface) (*vcTypes.Interface, error)
|
|
RemoveInterface(ctx context.Context, sandboxID string, inf *vcTypes.Interface) (*vcTypes.Interface, error)
|
|
ListInterfaces(ctx context.Context, sandboxID string) ([]*vcTypes.Interface, error)
|
|
UpdateRoutes(ctx context.Context, sandboxID string, routes []*vcTypes.Route) ([]*vcTypes.Route, error)
|
|
ListRoutes(ctx context.Context, sandboxID string) ([]*vcTypes.Route, error)
|
|
|
|
CleanupContainer(ctx context.Context, sandboxID, containerID string, force bool) error
|
|
}
|
|
|
|
// VCSandbox is the Sandbox interface
|
|
// (required since virtcontainers.Sandbox only contains private fields)
|
|
type VCSandbox interface {
|
|
Annotations(key string) (string, error)
|
|
GetNetNs() string
|
|
GetAllContainers() []VCContainer
|
|
GetAnnotations() map[string]string
|
|
GetContainer(containerID string) VCContainer
|
|
ID() string
|
|
SetAnnotations(annotations map[string]string) error
|
|
|
|
Start() error
|
|
Stop(force bool) error
|
|
Pause() error
|
|
Resume() error
|
|
Release() error
|
|
Monitor() (chan error, error)
|
|
Delete() error
|
|
Status() SandboxStatus
|
|
CreateContainer(contConfig ContainerConfig) (VCContainer, error)
|
|
DeleteContainer(contID string) (VCContainer, error)
|
|
StartContainer(containerID string) (VCContainer, error)
|
|
StopContainer(containerID string, force bool) (VCContainer, error)
|
|
KillContainer(containerID string, signal syscall.Signal, all bool) error
|
|
StatusContainer(containerID string) (ContainerStatus, error)
|
|
StatsContainer(containerID string) (ContainerStats, error)
|
|
PauseContainer(containerID string) error
|
|
ResumeContainer(containerID string) error
|
|
EnterContainer(containerID string, cmd types.Cmd) (VCContainer, *Process, error)
|
|
UpdateContainer(containerID string, resources specs.LinuxResources) error
|
|
ProcessListContainer(containerID string, options ProcessListOptions) (ProcessList, error)
|
|
WaitProcess(containerID, processID string) (int32, error)
|
|
SignalProcess(containerID, processID string, signal syscall.Signal, all bool) error
|
|
WinsizeProcess(containerID, processID string, height, width uint32) error
|
|
IOStream(containerID, processID string) (io.WriteCloser, io.Reader, io.Reader, error)
|
|
|
|
AddDevice(info config.DeviceInfo) (api.Device, error)
|
|
|
|
AddInterface(inf *vcTypes.Interface) (*vcTypes.Interface, error)
|
|
RemoveInterface(inf *vcTypes.Interface) (*vcTypes.Interface, error)
|
|
ListInterfaces() ([]*vcTypes.Interface, error)
|
|
UpdateRoutes(routes []*vcTypes.Route) ([]*vcTypes.Route, error)
|
|
ListRoutes() ([]*vcTypes.Route, error)
|
|
}
|
|
|
|
// VCContainer is the Container interface
|
|
// (required since virtcontainers.Container only contains private fields)
|
|
type VCContainer interface {
|
|
GetAnnotations() map[string]string
|
|
GetPid() int
|
|
GetToken() string
|
|
ID() string
|
|
Sandbox() VCSandbox
|
|
Process() Process
|
|
}
|