Documentation
¶
Index ¶
- Variables
- type Dependency
- type Edge
- type Graph
- func (g *Graph[EdgeType, VertexType]) AddEdge(from, to VertexType, edge EdgeType) error
- func (g *Graph[EdgeType, VertexType]) GetForwardAdjacentVertices(from VertexType) []Edge[EdgeType, VertexType]
- func (g *Graph[EdgeType, VertexType]) GetReverseAdjacentVertices(to VertexType) []Edge[EdgeType, VertexType]
- func (g *Graph[EdgeType, VertexType]) ToDOT(name string) (string, error)
- type ID
- type Manager
- func (m *Manager) AddDependency(unit ID, dependsOn ID, requiredStatus Status) error
- func (m *Manager) ExportDOT(name string) (string, error)
- func (m *Manager) GetAllDependencies(unit ID) ([]Dependency, error)
- func (m *Manager) GetGraph() *Graph[Status, ID]
- func (m *Manager) GetUnmetDependencies(unit ID) ([]Dependency, error)
- func (m *Manager) IsReady(id ID) (bool, error)
- func (m *Manager) Register(id ID) error
- func (m *Manager) Unit(id ID) (Unit, error)
- func (m *Manager) UpdateStatus(unit ID, newStatus Status) error
- type Status
- type Unit
Constants ¶
This section is empty.
Variables ¶
var ( ErrUnitIDRequired = xerrors.New("unit name is required") ErrUnitNotFound = xerrors.New("unit not found") ErrUnitAlreadyRegistered = xerrors.New("unit already registered") ErrCannotUpdateOtherUnit = xerrors.New("cannot update other unit's status") ErrDependenciesNotSatisfied = xerrors.New("unit dependencies not satisfied") ErrSameStatusAlreadySet = xerrors.New("same status already set") ErrCycleDetected = xerrors.New("cycle detected") ErrFailedToAddDependency = xerrors.New("failed to add dependency") )
Functions ¶
This section is empty.
Types ¶
type Dependency ¶ added in v2.29.0
type Dependency struct {
Unit ID
DependsOn ID
RequiredStatus Status
CurrentStatus Status
IsSatisfied bool
}
Dependency represents a dependency relationship between units.
type Edge ¶
type Edge[EdgeType, VertexType comparable] struct { From VertexType To VertexType Edge EdgeType }
Edge is a convenience type for representing an edge in the graph. It encapsulates the from and to vertices and the edge type itself.
type Graph ¶
type Graph[EdgeType, VertexType comparable] struct { // contains filtered or unexported fields }
Graph provides a bidirectional interface over gonum's directed graph implementation. While the underlying gonum graph is directed, we overlay bidirectional semantics by distinguishing between forward and reverse edges. Wanting and being wanted by other units are related but different concepts that have different graph traversal implications when Units update their status.
The graph stores edge types to represent different relationships between units, allowing for domain-specific semantics beyond simple connectivity.
func (*Graph[EdgeType, VertexType]) AddEdge ¶
AddEdge adds an edge to the graph. It initializes the graph and metadata on first use, checks for cycles, and adds the edge to the gonum graph.
func (*Graph[EdgeType, VertexType]) GetForwardAdjacentVertices ¶
func (g *Graph[EdgeType, VertexType]) GetForwardAdjacentVertices(from VertexType) []Edge[EdgeType, VertexType]
GetForwardAdjacentVertices returns all the edges that originate from the given vertex.
func (*Graph[EdgeType, VertexType]) GetReverseAdjacentVertices ¶
func (g *Graph[EdgeType, VertexType]) GetReverseAdjacentVertices(to VertexType) []Edge[EdgeType, VertexType]
GetReverseAdjacentVertices returns all the edges that terminate at the given vertex.
type ID ¶ added in v2.29.0
type ID string
ID provides a type narrowed representation of the unique identifier of a unit.
type Manager ¶ added in v2.29.0
type Manager struct {
// contains filtered or unexported fields
}
Manager provides reactive dependency tracking over a Graph. It manages Unit registration, dependency relationships, and status updates with automatic recalculation of readiness when dependencies are satisfied.
func NewManager ¶ added in v2.29.0
func NewManager() *Manager
NewManager creates a new Manager instance.
func (*Manager) AddDependency ¶ added in v2.29.0
AddDependency adds a dependency relationship between units. The unit depends on the dependsOn unit reaching the requiredStatus.
func (*Manager) ExportDOT ¶ added in v2.29.0
ExportDOT exports the dependency graph to DOT format for visualization.
func (*Manager) GetAllDependencies ¶ added in v2.29.0
func (m *Manager) GetAllDependencies(unit ID) ([]Dependency, error)
GetAllDependencies returns all dependencies for a unit, both satisfied and unsatisfied.
func (*Manager) GetGraph ¶ added in v2.29.0
GetGraph returns the underlying graph for visualization and debugging. This should be used carefully as it exposes the internal graph structure.
func (*Manager) GetUnmetDependencies ¶ added in v2.29.0
func (m *Manager) GetUnmetDependencies(unit ID) ([]Dependency, error)
GetUnmetDependencies returns a list of unsatisfied dependencies for a unit.
func (*Manager) Register ¶ added in v2.29.0
Register adds a unit to the manager if it is not already registered. If a Unit is already registered (per the ID field), it is not updated.
type Status ¶ added in v2.29.0
type Status string
Status represents the status of a unit.
type Unit ¶ added in v2.29.0
type Unit struct {
// contains filtered or unexported fields
}
Unit represents a point-in-time snapshot of a vertex in the dependency graph. Units may depend on other units, or be depended on by other units. The unit struct is not aware of updates made to the dependency graph after it is initialized and should not be cached.