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

readmodel

package
v0.5.1 Latest Latest
Warning

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

Go to latest
Published: Oct 29, 2026 License: Apache-2.0 Imports: 16 Imported by: 0

Documentation

Overview

Package readmodel is the operator read model: the pure reads over persisted state that the console's screens and the command line issue. Every function here is a read of what the registry, the rendered policy store, and the flow store already hold, shaped for the screen that asks; nothing here computes what a query could return, and nothing here writes. The operator surface's handlers and the command line call these functions and nothing else, which is what keeps the two transports from drifting (ADR-0007 as amended, ADR-0021).

The flow reads go through the FlowStore interface (ADR-0009): a rollup is one of a closed set of named groupings, aggregated in the store and bounded (ADR-0007 as amended); peers come back as ingestion resolved them, never re-resolved at read time (ADR-0019); flow lists paginate by cursor keyed on window start and row id. Workload reads pair the registry's record with the latest rendered version so sync drift is one read, and derive nothing but the credential state, which is a function of the stored expiry, the stored renewal error, the clock, and the renewal grace the control plane serves with.

Index

Constants

View Source
const (
	DefaultGapLimit = 500
	MaxGapLimit     = 5000
)

DefaultGapLimit and MaxGapLimit bound the evidence gaps one read returns.

View Source
const (
	DefaultWorkloadPageLimit = 100
	MaxWorkloadPageLimit     = 500
)

Page limits for the fleet list.

View Source
const DefaultRange = 24 * time.Hour

DefaultRange is the range a read covers when none is given: the last day up to now.

View Source
const RetiredRank int32 = 5

RetiredRank is the fleet order's rank of a retired workload: below every rank of the attention ordering, which a retired workload is outside. The retired list sorts by retirement instant within it.

View Source
const TelemetryLiveWindows = 2

TelemetryLiveWindows is how many flow windows may pass since the last report while a workload's telemetry is still live. The reporter ships one window per window length; two allow one late report.

Variables

View Source
var (
	// ErrInvalidRange is returned when a range's end is not after its
	// start.
	ErrInvalidRange = errors.New("readmodel: the end of the range must be after its start")
	// ErrInvalidCursor is returned for a cursor this read model did not
	// issue.
	ErrInvalidCursor = errors.New("readmodel: the cursor is not one this read issued")
	// ErrWorkloadRequired is returned by a read that has no unbounded
	// form when it is asked for one.
	ErrWorkloadRequired = errors.New("readmodel: a workload is required")
	// ErrInvalidService is returned for a service that is not
	// <protocol>/<port> or icmp.
	ErrInvalidService = errors.New("readmodel: a service is <protocol>/<port>, or icmp")
)

Errors a caller branches on. A transport maps each to its own problem; the command line prints them.

View Source
var ErrUnknownLifecycle = errors.New("readmodel: lifecycle must be active or retired")

ErrUnknownLifecycle is a fleet read asking for a lifecycle state that does not exist.

Functions

func GapKindName

func GapKindName(k innerwallv1.EvidenceGapKind) string

GapKindName is a gap kind as the surface and the command line name it.

func GapSourceName

func GapSourceName(s innerwallv1.EvidenceSource) string

GapSourceName is a gap's source as the surface and the command line name it; empty for a loss that is not one source's.

func IsUnknown

func IsUnknown(err error) bool

IsUnknown reports whether err says a workload is not registered.

func OwnedTableStateName added in v0.2.0

func OwnedTableStateName(s innerwallv1.OwnedTableState) string

OwnedTableStateName is the owned table's state as the surface and the command line name it: present, absent, or unknown.

func ParseSyncState

func ParseSyncState(s string) (innerwallv1.SyncState, error)

ParseSyncState parses a sync state name: synced, pending, degraded, or offline. Empty means every state.

func ParseVerdict

func ParseVerdict(s string) (innerwallv1.PolicyDecision, error)

ParseVerdict parses a decision name: observed, allowed, would_block, or blocked. Empty means every decision.

func SyncStateName

func SyncStateName(s innerwallv1.SyncState) string

SyncStateName is the inverse of ParseSyncState.

func TerminalVerdict

TerminalVerdict is what traffic no rendered rule admits receives under a mode: observed in visibility, would_block in simulation, blocked when enforced (ADR-0020).

func VerdictName

func VerdictName(d innerwallv1.PolicyDecision) string

VerdictName is the inverse of ParseVerdict.

Types

type Counters

type Counters struct {
	// FlowCount is the number of stored records.
	FlowCount       int64
	ConnectionCount uint64
	ByteCount       uint64
}

Counters are the summed counts of a group or of a whole rollup.

type CredentialLifecycle added in v0.5.0

type CredentialLifecycle string

CredentialLifecycle is what the control plane will still accept from a workload's credential, judged on its stored expiry by the rule that admits a presented one (enroll.StandingAt) and the renewal grace this control plane is configured with, which no client can know.

const (
	// CredentialValid: not yet expired.
	CredentialValid CredentialLifecycle = "valid"
	// CredentialInGrace: expired within the renewal grace. The agent
	// keeps retrying renewal, and the workload recovers by itself, with
	// the same identity, once one succeeds.
	CredentialInGrace CredentialLifecycle = "in-grace"
	// CredentialPastGrace: expired beyond the renewal grace. Nothing
	// accepts it; the workload returns only by enrolling again with a new
	// provisioning token, as a new identity.
	CredentialPastGrace CredentialLifecycle = "past-grace"
)

Credential lifecycle states.

type CredentialState

type CredentialState string

CredentialState is the state of a workload's credential as the stored expiry, the stored renewal error, and the clock give it (ADR-0016).

const (
	// CredentialRenews: the credential is valid and the last automatic
	// renewal, if any was due, succeeded.
	CredentialRenews CredentialState = "renews"
	// CredentialRenewalFailed: the credential is still valid but the
	// agent's last renewal attempt failed; it is heading for expiry.
	CredentialRenewalFailed CredentialState = "renewal-failed"
	// CredentialExpired: the credential has lapsed. The agent keeps
	// retrying renewal, which the control plane accepts within its
	// renewal grace; beyond it the workload must re-enroll (ADR-0016 as
	// amended).
	CredentialExpired CredentialState = "expired"
)

Credential states.

type CredentialStatus

type CredentialStatus struct {
	State CredentialState
	// Lifecycle is what the control plane will still accept from the
	// credential, and RenewableUntil the instant the renewal grace after
	// its expiry ends.
	Lifecycle      CredentialLifecycle
	RenewableUntil time.Time
	// Serial and ExpiresAt are the credential last issued, which State
	// and Lifecycle judge.
	Serial        string
	ExpiresAt     time.Time
	LastRenewedAt *time.Time
	LastError     string
	// LastLateRenewal is the workload's latest late renewal; nil when it
	// has never renewed late. A later on-time renewal leaves it.
	LastLateRenewal *registry.LateRenewal
	// LastPresented is the credential the workload's most recent sync
	// stream opened on; nil when none has been recorded. It is the one in
	// use only while the sync state says a stream is open, and differs
	// from the issued one while a stream outlives a renewal.
	LastPresented *registry.PresentedCredential
}

CredentialStatus is a workload's credential as the console shows it.

type Flow

type Flow struct {
	ID              int64
	WindowStart     time.Time
	WindowEnd       time.Time
	Peer            PeerRef
	SrcAddress      netip.Addr
	DstAddress      netip.Addr
	Service         Service
	Direction       innerwallv1.Direction
	Verdict         innerwallv1.PolicyDecision
	Rule            *RuleRef
	ConnectionCount uint64
	ByteCount       uint64
	FirstSeen       time.Time
	LastSeen        time.Time
	ProcessName     string
}

Flow is one stored window row as the operator sees it.

type FlowsPage

type FlowsPage struct {
	Workload   WorkloadRef
	Range      Range
	Flows      []Flow
	NextCursor string
}

FlowsPage is one page of flows, newest window first. NextCursor is empty on the last page.

type FlowsRequest

type FlowsRequest struct {
	Workload  identity.WorkloadID
	From      time.Time
	To        time.Time
	Verdict   innerwallv1.PolicyDecision
	Direction innerwallv1.Direction
	Peer      string
	Service   *Service
	Cursor    string
	// Limit bounds the page; the store's default and maximum apply.
	Limit int
}

FlowsRequest asks for one page of a workload's stored windows. Workload is required: there is no unbounded scan. A zero From or To takes the default range; a zero Verdict or Direction means any; an empty Peer means every peer, otherwise the stored peer key (a workload id, an address group id, or an address); a nil Service means every service. Cursor continues a previous page; empty is the first page.

type Gap

type Gap struct {
	Workload WorkloadRef
	Kind     innerwallv1.EvidenceGapKind
	Source   innerwallv1.EvidenceSource
	From     time.Time
	To       time.Time
	Count    *uint64
}

Gap is one interval [From, To) in which a workload's flow evidence is known to be incomplete (ADR-0019 as amended). Count is the records or table entries lost, nil when unknown.

type Gaps

type Gaps struct {
	Range     Range
	Gaps      []Gap
	Truncated bool
}

Gaps is the result of a gaps read: the range asked, the gaps intersecting it newest first, and whether more exist beyond the limit.

type GapsRequest

type GapsRequest struct {
	From     time.Time
	To       time.Time
	Workload *identity.WorkloadID
	Selector policy.Selector
	Limit    int
}

GapsRequest asks for the evidence gaps of a workload set that intersect a range. The range, Workload, and Selector follow RollupRequest: a nil Workload and empty Selector cover every workload, and a Selector is resolved to the workloads it currently matches. Limit bounds the gaps; DefaultGapLimit when zero, MaxGapLimit at most.

type GroupKeys

type GroupKeys struct {
	Rule    *RuleRef
	Peer    *PeerRef
	Src     *PeerRef
	Dst     *WorkloadRef
	Service *Service
}

GroupKeys are the dimensions of one group. Which are set follows the grouping: Rule for rule and rule,peer (nil for the group of records no rule admitted); Peer for rule,peer and peer,service; Src for src,dst; Dst for src,dst and dst,service; Service for dst,service and peer,service.

type Health

type Health struct {
	LastSeenAt         *time.Time
	Credential         CredentialStatus
	DroppedFlowRecords uint64
	// SourceOverruns counts the moments the kernel dropped events because
	// one of the agent's flow sources fell behind, since the agent
	// started; each is also an evidence gap with its interval.
	SourceOverruns uint64
	// ClockSkew is the latest flow report whose agent clock was beyond
	// the tolerance, and whether it is still the latest reading; nil when
	// none has been received.
	ClockSkew *registry.ClockSkew
	// OwnedTable is whether the agent's owned firewall table is in the
	// kernel, as its heartbeats last said; unspecified until one that
	// knows has arrived. OwnedTableAbsentSince is when the control plane
	// first heard it was absent, nil unless it is. An absent table means
	// the host enforces and observes nothing, whatever the sync state
	// says of the version the agent acknowledged (issue #64).
	OwnedTable            innerwallv1.OwnedTableState
	OwnedTableAbsentSince *time.Time
	// LastFlowReportAt is when the control plane last received a flow
	// report from the agent; nil when none has been. TelemetryLive says
	// one arrived within TelemetryLiveWindows flow windows of the read: the
	// agent is running and reaching the control plane, whatever its sync
	// stream's state, which travels on another connection (issue #61).
	LastFlowReportAt *time.Time
	TelemetryLive    bool
}

Health is what the agent's heartbeats and renewals have recorded.

type Lifecycle added in v0.5.0

type Lifecycle string

Lifecycle is where a workload stands in its life (ADR-0023): active, or retired by the operator. It is a state of its own, distinct from every sync state: offline is something to fix, and retired is something the operator decided.

const (
	LifecycleActive  Lifecycle = "active"
	LifecycleRetired Lifecycle = "retired"
)

Lifecycle states.

type PeerRef

type PeerRef struct {
	Kind   flowstore.PeerKind
	Key    string
	Name   string
	Labels map[string]string
}

PeerRef is a resolved peer as ingestion stored it (ADR-0019): its kind and key, the label snapshot captured at the time for a workload peer, and the name the registry currently gives the identity (a workload's hostname, an address group's name), which is looked up by the stored identity for display and is empty when the identity is no longer registered. An unresolved peer's key is its address.

type Range

type Range struct {
	From time.Time
	To   time.Time
}

Range is a half-open time range [From, To).

type Reader

type Reader struct {
	Store Store
	Flows flowstore.FlowStore
	// FlowWindow is the flow aggregation window the control plane hands
	// agents; a workload's telemetry is live while a report has arrived
	// within TelemetryLiveWindows of it. Zero judges no telemetry live.
	FlowWindow time.Duration
	// RenewalGrace is the renewal grace the control plane admits expired
	// credentials under, which a workload's credential lifecycle is
	// judged by; enroll.DefaultRenewalGrace if zero. The control plane
	// passes the grace it serves with.
	RenewalGrace time.Duration
	// Now is the clock; time.Now if nil.
	Now func() time.Time
}

Reader is the read model. The command line and the operator surface hold one each over the same store.

func (*Reader) CountWorkloads added in v0.2.0

func (s *Reader) CountWorkloads(ctx context.Context) (*WorkloadCounts, error)

CountWorkloads returns how many workloads the fleet holds, in total, in each sync state, and removed, from one read of the store, so the counts agree with each other. A count is exact or the read fails: an active workload stored in a state outside the four is an error, removed or not, never left out of a total. A retired workload counts in Retired whatever its last sync state.

func (*Reader) Gaps

func (s *Reader) Gaps(ctx context.Context, req GapsRequest) (*Gaps, error)

Gaps reads the evidence gaps of a workload set intersecting a range, through the store's one named statement.

func (*Reader) GetWorkload

func (s *Reader) GetWorkload(ctx context.Context, id identity.WorkloadID) (*Workload, error)

GetWorkload returns one workload, or registry.ErrWorkloadUnknown.

func (*Reader) ListFlows

func (s *Reader) ListFlows(ctx context.Context, req FlowsRequest) (*FlowsPage, error)

ListFlows returns one page of a workload's windows.

func (*Reader) ListWorkloads

func (s *Reader) ListWorkloads(ctx context.Context, req WorkloadsRequest) (*WorkloadsPage, error)

ListWorkloads returns one page of the fleet.

func (*Reader) RenderedPolicy

func (s *Reader) RenderedPolicy(ctx context.Context, id identity.WorkloadID) (*RenderedPolicy, error)

RenderedPolicy returns a workload's persisted rendered policy, or registry.ErrWorkloadUnknown. A workload with no persisted policy yet is reported at version zero with no rules and no render instant.

func (*Reader) Rollup

func (s *Reader) Rollup(ctx context.Context, req RollupRequest) (*Rollup, error)

Rollup runs one grouped rollup. The grouping is one of the store's named groupings and nothing else; the aggregation is the store's.

type RenderedPolicy

type RenderedPolicy struct {
	Workload        WorkloadRef
	Version         uint64
	Mode            innerwallv1.EnforcementMode
	RenderedAt      *time.Time
	TerminalVerdict innerwallv1.PolicyDecision
	Rules           []RenderedRule
}

RenderedPolicy is a workload's persisted rendered policy: the version the agent is served, the mode, when it was rendered (nil when no render has happened yet), the verdict traffic no rule admits receives under that mode, and the rules. A pure configuration read: no counts and no flow joins; the console pairs it with a rollup.

type RenderedRule

type RenderedRule struct {
	ID             string
	AuthoredRuleID string
	Ruleset        *RulesetRef
	Description    string
	// CreatedAt and UpdatedAt are the authored rule's own instants; nil
	// when the authored rule no longer exists.
	CreatedAt *time.Time
	UpdatedAt *time.Time
	Protocol  innerwallv1.Protocol
	// Ports is empty when the rule permits every port of the protocol.
	Ports     []policy.PortRange
	PeerCIDRs []string
	Verdict   innerwallv1.PolicyDecision
}

RenderedRule is one resolved inbound permission as the agent holds it (ADR-0018): its match criteria (peers, protocol, ports), the verdict a match receives, and the authored rule it was rendered from. Every rendered rule admits; the mode decides what the rest of the traffic receives.

type Rollup

type Rollup struct {
	Range         Range
	EffectiveFrom *time.Time
	EffectiveTo   *time.Time
	GroupBy       flowstore.GroupBy
	Groups        []RollupGroup
	GroupCount    int64
	Truncated     bool
	Totals        Counters
}

Rollup is a grouped rollup. Range is what was asked; EffectiveFrom and EffectiveTo are the bounds of the windows actually covered, since a range quantizes to window boundaries, and are nil when nothing matched. Groups are in the requested order; Truncated says groups beyond them exist, and GroupCount and Totals cover all of them.

type RollupGroup

type RollupGroup struct {
	Keys GroupKeys
	Counters
	WorkloadCount *int64
	FirstSeen     time.Time
	LastSeen      time.Time
}

RollupGroup is one group with its counters and the span it was seen over. WorkloadCount is the number of distinct workloads that saw the group; it is set by rule and peer,service and nil otherwise: src,dst and dst,service name their one workload in their keys, and rule,peer, whose key names none, is not counted.

type RollupRequest

type RollupRequest struct {
	From      time.Time
	To        time.Time
	GroupBy   flowstore.GroupBy
	Verdict   innerwallv1.PolicyDecision
	Direction innerwallv1.Direction
	Workload  *identity.WorkloadID
	Selector  policy.Selector
	Endpoint  flowstore.Endpoint
	Service   *Service
	Order     flowstore.GroupOrder
	// Limit bounds the groups; the store's default and maximum apply.
	Limit int
}

RollupRequest asks for one grouped rollup. A zero From or To takes the default range; a zero Verdict or Direction means any; a nil Workload and empty Selector cover every workload, a Workload restricts to that one, a Selector to the workloads it currently matches (ADR-0019 resolves a scope at read time, deliberately), and both to their intersection; Endpoint says which end of a record the scope selects, the reporting destination when zero, or either end, so a workload that only sends traffic is seen by its outbound records; a nil Service means every service.

type RuleRef

type RuleRef struct {
	ID             string
	AuthoredRuleID string
	Protocol       innerwallv1.Protocol
}

RuleRef names a resolved rule as flow records attribute traffic to it: the resolved id, and the authored rule and protocol it was rendered from (ADR-0018).

type RulesetRef

type RulesetRef struct {
	ID   uuid.UUID
	Name string
}

RulesetRef names the authored ruleset a rendered rule came from. It is nil on a rendered rule whose authored rule no longer exists, which can happen between a delete and the render it triggers. It carries no timestamps: the ruleset's instants are not the rule's, which the rendered rule carries itself.

type Service

type Service struct {
	Protocol innerwallv1.Protocol
	Port     uint16
}

Service is a destination port and protocol, the unit a flow record and a rendered rule share. A protocol without ports (ICMP) has Port 0.

func ParseService

func ParseService(s string) (Service, error)

ParseService parses "<protocol>/<port>" or "icmp".

func (Service) String

func (s Service) String() string

String is the inverse of ParseService.

type StatusCount added in v0.2.0

type StatusCount struct {
	SyncState innerwallv1.SyncState
	Removed   bool
	Retired   bool
	Workloads int64
}

StatusCount is how many workloads hold one sync state with their owned table recorded absent (Removed), or not, and retired, or not.

type Store

type Store interface {
	// ListWorkloads returns every workload with its labels and addresses,
	// the registry's view for naming peers and resolving scopes.
	ListWorkloads(ctx context.Context) ([]registry.Workload, error)
	ListAddressGroups(ctx context.Context) ([]policy.AddressGroup, error)
	ListRulesets(ctx context.Context) ([]policy.Ruleset, error)
	// GetWorkloadPolicy returns the persisted rendered policy of a
	// workload with its version, or nil when none has been rendered.
	GetWorkloadPolicy(ctx context.Context, id identity.WorkloadID) (*innerwallv1.WorkloadPolicy, error)
	// ListWorkloadPage returns one page of the fleet in fleet order.
	ListWorkloadPage(ctx context.Context, q WorkloadPageQuery) ([]WorkloadRecord, error)
	// CountWorkloadsByStatus returns how many workloads hold each sync
	// state, split by whether their owned table is recorded absent, read
	// at one instant; a pair no workload holds is absent.
	CountWorkloadsByStatus(ctx context.Context) ([]StatusCount, error)
	// GetWorkloadRecord returns one workload with its latest rendered
	// version and listening services, or registry.ErrWorkloadUnknown.
	GetWorkloadRecord(ctx context.Context, id identity.WorkloadID) (*WorkloadRecord, error)
	// ListWorkloadLabelIndex returns every workload's current labels, for
	// resolving a selector to the workloads in its scope.
	ListWorkloadLabelIndex(ctx context.Context) (map[identity.WorkloadID]map[string]string, error)
}

Store is the persisted state the read model reads. The Postgres store implements it with hand-written SQL (ADR-0006); flow data is read through the FlowStore beside it (ADR-0009).

type SyncStatus

type SyncStatus struct {
	State            innerwallv1.SyncState
	AppliedVersion   uint64
	LatestVersion    uint64
	LatestRenderedAt *time.Time
	Error            string
	// LastSnapshotSentAt is nil when no snapshot has been recorded. A
	// directed reconnect is observed as this instant advancing.
	LastSnapshotSentAt *time.Time
	// LastAckedAt is when the agent last acknowledged an applied
	// version, and LastApplyFailedAt when it last reported a failed
	// apply; each nil when none has been recorded. A failure instant
	// outlives the failure: State says whether it still stands.
	LastAckedAt       *time.Time
	LastApplyFailedAt *time.Time
}

SyncStatus is a workload's convergence with its rendered policy: the state the stream reports, the version the agent acknowledged against the latest rendered one, when that latest render happened, and when the sync path last sent the workload a snapshot.

type Workload

type Workload struct {
	ID                identity.WorkloadID
	Hostname          string
	Labels            []registry.Label
	Mode              innerwallv1.EnforcementMode
	EnrolledAt        time.Time
	Addresses         []netip.Addr
	Facts             *innerwallv1.HostFacts
	Agent             registry.AgentInfo
	ListeningServices []registry.ListeningService
	Sync              SyncStatus
	Health            Health
	// Lifecycle is active or retired, and RetiredAt when it was retired,
	// nil while it is active.
	Lifecycle Lifecycle
	RetiredAt *time.Time
}

Workload is the one object shape the fleet list and the workload detail share. The degraded-state screen reads entirely from it.

type WorkloadCounts added in v0.2.0

type WorkloadCounts struct {
	Total   int64
	BySync  map[innerwallv1.SyncState]int64
	Removed int64
	Retired int64
}

WorkloadCounts is the active fleet's size, in total, by sync state, and removed, beside the retired workloads. A workload whose owned table is recorded absent counts in Removed and in no sync state: its stored state is the agent's honest record of the version it acknowledged, but the host enforces none of it (issue #96). Every other active workload is in exactly one sync state, so Total is the sum of BySync and Removed. A retired workload is outside the attention ordering and counts in Retired alone, in no bucket and not in Total (ADR-0023).

type WorkloadCursor

type WorkloadCursor struct {
	SyncRank int32
	SeenKey  time.Time
	ID       identity.WorkloadID
}

WorkloadCursor is the position after which a fleet page continues.

type WorkloadPageQuery

type WorkloadPageQuery struct {
	IDs       []identity.WorkloadID
	Mode      innerwallv1.EnforcementMode
	SyncState innerwallv1.SyncState
	Retired   bool
	After     *WorkloadCursor
	Limit     int
}

WorkloadPageQuery selects one page of the fleet. An empty IDs means every workload; a zero Mode or SyncState means any; Retired selects the retired workloads instead of the active ones, never both; a nil After is the first page.

type WorkloadRecord

type WorkloadRecord struct {
	registry.Workload
	// LastRenewedAt is when the credential was last reissued; nil when
	// the enrollment credential is still the current one.
	LastRenewedAt     *time.Time
	LatestVersion     uint64
	LatestRenderedAt  *time.Time
	ListeningServices []registry.ListeningService
	// SyncRank and SeenKey are the store's sort keys for the fleet order:
	// the attention rank and the last-seen instant with never-seen as the
	// epoch. A cursor carries them.
	SyncRank int32
	SeenKey  time.Time
}

WorkloadRecord is a workload as the store returns it for the read model: the registry's record, the latest rendered version and when it was rendered (zero and nil when none has been rendered), the listening services the agent reported, and the position keys the fleet order sorts by.

type WorkloadRef

type WorkloadRef struct {
	ID       identity.WorkloadID
	Hostname string
	Labels   map[string]string
}

WorkloadRef names a workload as the reporting end of a flow, with the registry's current hostname and labels.

type WorkloadsPage

type WorkloadsPage struct {
	Workloads  []Workload
	NextCursor string
}

WorkloadsPage is one page of the fleet in fleet order: for the active fleet, attention rank (degraded or enforcement removed, offline, pending, synced), then most recently seen first; for the retired workloads, most recently retired first.

type WorkloadsRequest

type WorkloadsRequest struct {
	Selector  policy.Selector
	Mode      innerwallv1.EnforcementMode
	SyncState innerwallv1.SyncState
	Lifecycle Lifecycle
	Cursor    string
	Limit     int
}

WorkloadsRequest asks for one page of the fleet. An empty Selector means every workload, otherwise the workloads it currently matches; a zero Mode or SyncState means any; Lifecycle selects the active fleet (the default when empty) or the retired workloads; Cursor continues a previous page.

Directories

Path Synopsis
Package readmodeltest holds in-memory doubles of the read model's store and flow store for tests of the transports above it.
Package readmodeltest holds in-memory doubles of the read model's store and flow store for tests of the transports above it.

Jump to

Keyboard shortcuts

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