Documentation
¶
Index ¶
- Variables
- func AgentSearchPaths() []string
- func EnvKeyFor(path string) string
- type Config
- type FileOutputConfig
- type LoggingConfig
- type LokiOutputConfig
- type MetricsConfig
- type PathType
- type SecurityConfig
- type ShutdownConfig
- type SupervisorConfig
- type TimeoutConfig
- type TransportConfig
- type WatchdogConfig
Constants ¶
This section is empty.
Variables ¶
var ( // QUICStreamTimeout is the max time for a single QUIC stream operation. // Rationale: Covers network latency + agent marshaling/unmarshaling (< 10s typical). QUICStreamTimeout = 10 * time.Second // QUICIdleTimeout is the connection idle timeout before automatic closure. // Rationale: Balances connection reuse vs resource cleanup (1 minute idle acceptable). QUICIdleTimeout = 60 * time.Second )
QUIC Transport Timeouts
var ( // ClientPendingTimeout is the max wait for an agent to enter PENDING state. // Rationale: Fast-fail if supervisor doesn't acknowledge command quickly. ClientPendingTimeout = 2 * time.Second // ClientTerminalTimeout is the max wait for an agent to reach terminal state (RUNNING/STOPPED/FAILED). // Rationale: Covers Python startup, health checks, socket binding (< 20s for well-behaved agents). ClientTerminalTimeout = 20 * time.Second )
Client Lifecycle Timeouts
var ( // SupervisorStartDeadline is the max time for an agent to report ready after start command. // Rationale: Aligns with ClientTerminalTimeout to prevent supervisor-client mismatch. SupervisorStartDeadline = 20 * time.Second // SupervisorShutdownTimeout is the graceful shutdown timeout before force-kill. // Rationale: Allows agents to flush logs, close connections (5s is reasonable grace period). SupervisorShutdownTimeout = 5 * time.Second )
Supervisor Timeouts
var ( // TestAgentStartTimeout is the max time to wait for agent start in tests. // Rationale: CI environments may be slow; 2-minute buffer covers edge cases. TestAgentStartTimeout = 120 * time.Second // TestAgentStopTimeout is the max time to wait for agent stop in tests. // Rationale: Covers graceful shutdown + Python interpreter cleanup. TestAgentStopTimeout = 60 * time.Second )
Test Timeouts (more generous for CI environments)
Functions ¶
func AgentSearchPaths ¶
func AgentSearchPaths() []string
AgentSearchPaths returns the ordered list of directories to search for agents. Paths are searched in order, with earlier paths taking precedence.
Every directory below is namespaced by the PRODUCT rather than by the kernel (GAPI-DIV-061): gapid searches /usr/lib/gapi/agents, goblind searches /usr/lib/goblin/agents. This function is reached inside goblind through agentmgr's discovery, so it is one of the four kernel surfaces an operator who has never heard of gapi would otherwise meet.
Priority order (highest to lowest), with <p> the product name:
- Development paths (<PREFIX>_DEV_AGENTS, ./agents)
- User paths (XDG_DATA_HOME/<p>/agents, ~/.local/share/<p>/agents, ~/.<p>/agents)
- System paths (/usr/local/lib/<p>/agents, /usr/lib/<p>/agents, /etc/<p>/agents)
Environment variable overrides:
- <PREFIX>_AGENT_PATH: Replaces entire search path (colon-separated)
- <PREFIX>_DEV_AGENTS: Adds development path (highest priority)
- <PREFIX>_SKIP_SYSTEM_AGENTS: Skip system paths if set to "1" or "true"
func EnvKeyFor ¶
EnvKeyFor renders a dotted config path as the environment variable that overrides it: under gapid, "supervisor.pid1Mode" becomes GAPI_SUPERVISOR_PID1MODE; under goblind, GOBLIN_SUPERVISOR_PID1MODE.
The prefix was the literal "RUNTIME" until GAPI-DIV-059 and the literal "GAPI" until GAPI-DIV-061. Neither could be chosen by the process embedding the kernel, so an operator of goblind - which links this package as a library - had to configure it under a name belonging to a component they are not meant to know exists. It now comes from core/product, set once by the binary.
Both renames are HARD - no fallback reads an old spelling, decided by the operator. A deployed RUNTIME_CONFIG or, on goblind, a deployed GAPI_CONFIG therefore yields default config rather than an error, which is why each carries a release note.
Types ¶
type Config ¶
type Config struct {
Transport TransportConfig `mapstructure:"transport"`
Security SecurityConfig `mapstructure:"security"`
Metrics MetricsConfig `mapstructure:"metrics"`
Logging LoggingConfig `mapstructure:"logging"`
Timeouts TimeoutConfig `mapstructure:"timeouts"`
Supervisor SupervisorConfig `mapstructure:"supervisor"`
}
type FileOutputConfig ¶
type FileOutputConfig struct {
Enabled bool `mapstructure:"enabled"`
Path string `mapstructure:"path"`
MaxSize int `mapstructure:"maxSize"` // MB
MaxBackups int `mapstructure:"maxBackups"` // Number of old files to keep
MaxAge int `mapstructure:"maxAge"` // Days
Compress bool `mapstructure:"compress"`
}
type LoggingConfig ¶
type LoggingConfig struct {
Level string `mapstructure:"level"` // trace, debug, info, warn, error
Format string `mapstructure:"format"` // json, console
File FileOutputConfig `mapstructure:"file"`
Loki LokiOutputConfig `mapstructure:"loki"`
}
type LokiOutputConfig ¶
type MetricsConfig ¶
type PathType ¶
type PathType int
PathType represents the type of agent path
func ClassifyPath ¶
ClassifyPath determines the type of a given agent path
type SecurityConfig ¶
type SecurityConfig struct {
VerifyKey string `mapstructure:"verifyKey"` // Path to public key
}
type ShutdownConfig ¶
type ShutdownConfig struct {
GracePeriod string `mapstructure:"gracePeriod"`
}
type SupervisorConfig ¶
type SupervisorConfig struct {
ProductionMode bool `mapstructure:"productionMode"`
// Pid1Mode activates the Phase-0 pre-userspace boot sequence
// (subreaper, PID-1 signals, kmsg, early mounts). Off by default:
// gapid runs as an ordinary supervisor unless it IS init.
Pid1Mode bool `mapstructure:"pid1Mode"`
// NoEarlyMounts skips the mount phase (the OCI runtime owns mounts
// in a container).
NoEarlyMounts bool `mapstructure:"noEarlyMounts"`
Watchdog WatchdogConfig `mapstructure:"watchdog"`
Shutdown ShutdownConfig `mapstructure:"shutdown"`
}
type TimeoutConfig ¶
type TimeoutConfig struct {
QUICStream string `mapstructure:"quicStream"`
QUICIdle string `mapstructure:"quicIdle"`
ClientPending string `mapstructure:"clientPending"`
ClientTerminal string `mapstructure:"clientTerminal"`
SupervisorStart string `mapstructure:"supervisorStart"`
SupervisorShutdown string `mapstructure:"supervisorShutdown"`
}