Help us shape the future of Go! Take the 2026 Go Developer Survey

workloads

package
v0.2.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 5, 2025 License: Apache-2.0 Imports: 29 Imported by: 0

Documentation

Overview

Package workloads contains high-level logic for managing the lifecycle of ToolHive-managed containers.

Index

Constants

View Source
const (
	// AsyncOperationTimeout is the timeout for async workload operations
	AsyncOperationTimeout = 5 * time.Minute
)

Variables

View Source
var (
	ErrWorkloadNotRunning  = fmt.Errorf("workload not running")
	ErrInvalidWorkloadName = fmt.Errorf("invalid workload name")
)

ErrWorkloadNotFound is returned when a container cannot be found by name. ErrInvalidWorkloadName is returned when a workload name fails validation.

Functions

This section is empty.

Types

type Manager

type Manager interface {
	// GetWorkload retrieves details of the named workload including its status.
	GetWorkload(ctx context.Context, workloadName string) (Workload, error)
	// ListWorkloads retrieves the states of all workloads.
	// The `listAll` parameter determines whether to include workloads that are not running.
	// The optional `labelFilters` parameter allows filtering workloads by labels (format: key=value).
	ListWorkloads(ctx context.Context, listAll bool, labelFilters ...string) ([]Workload, error)
	// DeleteWorkloads deletes the specified workloads by name.
	// It is implemented as an asynchronous operation which returns an errgroup.Group
	DeleteWorkloads(ctx context.Context, names []string) (*errgroup.Group, error)
	// StopWorkloads stops the specified workloads by name.
	// It is implemented as an asynchronous operation which returns an errgroup.Group
	StopWorkloads(ctx context.Context, names []string) (*errgroup.Group, error)
	// RunWorkload runs a container in the foreground.
	RunWorkload(ctx context.Context, runConfig *runner.RunConfig) error
	// RunWorkloadDetached runs a container in the background.
	RunWorkloadDetached(ctx context.Context, runConfig *runner.RunConfig) error
	// RestartWorkloads restarts the specified workloads by name.
	// It is implemented as an asynchronous operation which returns an errgroup.Group
	RestartWorkloads(ctx context.Context, names []string) (*errgroup.Group, error)
	// GetLogs retrieves the logs of a container.
	GetLogs(ctx context.Context, containerName string, follow bool) (string, error)
	// MoveToDefaultGroup moves the specified workloads to the default group by updating the runconfig.
	MoveToDefaultGroup(ctx context.Context, workloadNames []string, groupName string) error
}

Manager is responsible for managing the state of ToolHive-managed containers. NOTE: This interface may be split up in future PRs, in particular, operations which are only relevant to the CLI/API use case will be split out.

func NewManager

func NewManager(ctx context.Context) (Manager, error)

NewManager creates a new container manager instance.

func NewManagerFromRuntime added in v0.1.0

func NewManagerFromRuntime(runtime rt.Runtime) Manager

NewManagerFromRuntime creates a new container manager instance from an existing runtime.

type StatusManager added in v0.1.6

type StatusManager interface {
	// CreateWorkloadStatus creates the initial `starting` status for a new workload.
	// Unlike SetWorkloadStatus, this will create a new entry in the status store,
	// but will do nothing if the workload already exists.
	CreateWorkloadStatus(ctx context.Context, workloadName string) error
	// GetWorkload retrieves details of a workload by its name.
	GetWorkload(ctx context.Context, workloadName string) (Workload, error)
	// ListWorkloads returns details of all workloads.
	ListWorkloads(ctx context.Context, listAll bool, labelFilters []string) ([]Workload, error)
	// SetWorkloadStatus sets the status of a workload by its name.
	// Note that this does not return errors, but logs them instead.
	// This method will do nothing if the workload does not exist.
	SetWorkloadStatus(ctx context.Context, workloadName string, status rt.WorkloadStatus, contextMsg string)
	// DeleteWorkloadStatus removes the status of a workload by its name.
	DeleteWorkloadStatus(ctx context.Context, workloadName string) error
}

StatusManager is an interface for fetching and retrieving workload statuses.

func NewFileStatusManager added in v0.2.1

func NewFileStatusManager(runtime rt.Runtime) StatusManager

NewFileStatusManager creates a new file-based StatusManager. Status files will be stored in the XDG data directory under "statuses/".

func NewStatusManagerFromRuntime added in v0.1.6

func NewStatusManagerFromRuntime(runtime rt.Runtime) StatusManager

NewStatusManagerFromRuntime creates a new instance of StatusManager from an existing runtime.

type Workload

type Workload struct {
	// Name is the name of the workload.
	// It is used as a unique identifier.
	Name string `json:"name"`
	// Package specifies the Workload Package used to create this Workload.
	Package string `json:"package"`
	// URL is the URL of the workload exposed by the ToolHive proxy.
	URL string `json:"url"`
	// Port is the port on which the workload is exposed.
	// This is embedded in the URL.
	Port int `json:"port"`
	// ToolType is the type of tool this workload represents.
	// For now, it will always be "mcp" - representing an MCP server.
	ToolType string `json:"tool_type"`
	// TransportType is the type of transport used for this workload.
	TransportType types.TransportType `json:"transport_type"`
	// Status is the current status of the workload.
	Status runtime.WorkloadStatus `json:"status"`
	// StatusContext provides additional context about the workload's status.
	// The exact meaning is determined by the status and the underlying runtime.
	StatusContext string `json:"status_context,omitempty"`
	// CreatedAt is the timestamp when the workload was created.
	CreatedAt time.Time `json:"created_at"`
	// Labels are the container labels (excluding standard ToolHive labels)
	Labels map[string]string `json:"labels,omitempty"`
	// Group is the name of the group this workload belongs to, if any.
	Group string `json:"group,omitempty"`
	// ToolsFilter is the filter on tools applied to the workload.
	ToolsFilter []string `json:"tools,omitempty"`
}

Workload is a domain model representing a workload in the system. This is used in our API to hide details of the underlying runtime.

func FilterByGroup added in v0.2.2

func FilterByGroup(
	ctx context.Context, workloadList []Workload, groupName string,
) ([]Workload, error)

FilterByGroup filters workloads to only include those in the specified group

func WorkloadFromContainerInfo

func WorkloadFromContainerInfo(container *runtime.ContainerInfo) (Workload, error)

WorkloadFromContainerInfo creates a Workload struct from the runtime container info.

Directories

Path Synopsis
Package mocks is a generated GoMock package.
Package mocks is a generated GoMock package.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL