Documentation ¶
Overview ¶
Package meterstatus provides a worker that executes the meter-status-changed hook periodically.
Index ¶
- func GetTriggers(wst WorkerState, status string, disconnectedAt time.Time, clk clock.Clock, ...) (<-chan time.Time, <-chan time.Time)
- func Manifold(config ManifoldConfig) dependency.Manifold
- func NewConnectedStatusHandler(cfg ConnectedConfig) (watcher.NotifyHandler, error)
- func NewConnectedStatusWorker(cfg ConnectedConfig) (worker.Worker, error)
- func NewIsolatedStatusWorker(cfg IsolatedConfig) (worker.Worker, error)
- func NewLimitedContext(unitName string) *limitedContext
- type ConnectedConfig
- type Disconnected
- type HookRunner
- type IsolatedConfig
- type ManifoldConfig
- type StateFile
- type TriggerCreator
- type WorkerState
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func GetTriggers ¶
func GetTriggers( wst WorkerState, status string, disconnectedAt time.Time, clk clock.Clock, amberGracePeriod time.Duration, redGracePeriod time.Duration) (<-chan time.Time, <-chan time.Time)
GetTriggers returns the signal channels for state transitions based on the current state. It controls the transitions of the inactive meter status worker.
In a simple case, the transitions are trivial:
D------------------A----------------------R--------------------->
D - disconnect time A - amber status triggered R - red status triggered
The problem arises from the fact that the lifetime of the worker can be interrupted, possibly with significant portions of the duration missing.
func Manifold ¶
func Manifold(config ManifoldConfig) dependency.Manifold
Manifold returns a status manifold.
func NewConnectedStatusHandler ¶
func NewConnectedStatusHandler(cfg ConnectedConfig) (watcher.NotifyHandler, error)
NewConnectedStatusHandler creates a new meter status handler for handling meter status changes as provided by the API.
func NewConnectedStatusWorker ¶
func NewConnectedStatusWorker(cfg ConnectedConfig) (worker.Worker, error)
NewConnectedStatusWorker creates a new worker that monitors the meter status of the unit and runs the meter-status-changed hook appropriately.
func NewIsolatedStatusWorker ¶
func NewIsolatedStatusWorker(cfg IsolatedConfig) (worker.Worker, error)
NewIsolatedStatusWorker creates a new status worker that runs without an API connection.
func NewLimitedContext ¶
func NewLimitedContext(unitName string) *limitedContext
NewLimitedContext creates a new context that implements just the bare minimum of the jujuc.Context interface.
Types ¶
type ConnectedConfig ¶
type ConnectedConfig struct { Runner HookRunner StateFile *StateFile Status meterstatus.MeterStatusClient }
ConnectedConfig contains all the dependencies required to create a new connected status worker.
func (ConnectedConfig) Validate ¶
func (c ConnectedConfig) Validate() error
Validate validates the config structure and returns an error on failure.
type Disconnected ¶
type Disconnected struct { Disconnected int64 `yaml:"disconnected-at,omitempty"` State WorkerState `yaml:"disconnected-state,omitempty"` }
Disconnected stores the information relevant to the inactive meter status worker.
func (Disconnected) When ¶
func (d Disconnected) When() time.Time
When returns the time when the unit was disconnected.
type HookRunner ¶
HookRunner implements the functionality necessary to run a meter-status-changed hook.
func NewHookRunner ¶
type IsolatedConfig ¶
type IsolatedConfig struct { Runner HookRunner StateFile *StateFile Clock clock.Clock AmberGracePeriod time.Duration RedGracePeriod time.Duration TriggerFactory TriggerCreator }
IsolatedConfig stores all the dependencies required to create an isolated meter status worker.
func (IsolatedConfig) Validate ¶
func (c IsolatedConfig) Validate() error
Validate validates the config structure and returns an error on failure.
type ManifoldConfig ¶
type ManifoldConfig struct { AgentName string APICallerName string MachineLockName string Clock clock.Clock NewHookRunner func(names.UnitTag, string, agent.Config, clock.Clock) HookRunner NewMeterStatusAPIClient func(base.APICaller, names.UnitTag) meterstatus.MeterStatusClient NewConnectedStatusWorker func(ConnectedConfig) (worker.Worker, error) NewIsolatedStatusWorker func(IsolatedConfig) (worker.Worker, error) }
ManifoldConfig identifies the resource names upon which the status manifold depends.
type StateFile ¶
type StateFile struct {
// contains filtered or unexported fields
}
StateFile holds the meter status on disk.
func NewStateFile ¶
NewStateFile creates a new file for persistent storage of the meter status.
type TriggerCreator ¶
type WorkerState ¶
type WorkerState int
workerState defines all the possible states the isolatedStatusWorker can be in.
const ( Uninitialized WorkerState = iota WaitingAmber // Waiting for a signal to switch to AMBER status. WaitingRed // Waiting for a signal to switch to RED status. Done // No more transitions to perform. )