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, ...) (<-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)
- type Clock
- type ConnectedConfig
- type ControllerBackedState
- type Disconnected
- type DiskBackedState
- type HookRunner
- type HookRunnerConfig
- type IsolatedConfig
- type Logger
- type ManifoldConfig
- type State
- type StateReadWriter
- type TriggerCreator
- type UnitStateAPI
- 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, 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.
Types ¶
type ConnectedConfig ¶
type ConnectedConfig struct {
Runner HookRunner
Status meterstatus.MeterStatusClient
StateReadWriter StateReadWriter
Logger Logger
}
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 ControllerBackedState ¶
type ControllerBackedState struct {
// contains filtered or unexported fields
}
ControllerBackedState is a StateReadWriter that uses the controller as its backing store.
func NewControllerBackedState ¶
func NewControllerBackedState(api UnitStateAPI) *ControllerBackedState
NewControllerBackedState returns a new ControllerBackedState that uses the provided UnitStateAPI to communicate with the controller.
func (*ControllerBackedState) Read ¶
func (cbs *ControllerBackedState) Read() (*State, error)
Read the current meter status information from the controller.
func (*ControllerBackedState) Write ¶
func (cbs *ControllerBackedState) Write(st *State) error
Write the supplied status information to the controller.
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 DiskBackedState ¶
type DiskBackedState struct {
// contains filtered or unexported fields
}
DiskBackedState stores the meter status on disk.
func NewDiskBackedState ¶
func NewDiskBackedState(path string) *DiskBackedState
NewDiskBackedState creates a DiskBackedState instance that uses path for reading/writing the meter status state.
func (*DiskBackedState) Read ¶
func (dbs *DiskBackedState) Read() (*State, error)
Read the current meter status information from disk.
func (*DiskBackedState) Write ¶
func (dbs *DiskBackedState) Write(st *State) error
Write the supplied status information to disk.
type HookRunner ¶
HookRunner implements the functionality necessary to run a meter-status-changed hook.
func NewHookRunner ¶
func NewHookRunner(config HookRunnerConfig) HookRunner
type HookRunnerConfig ¶
type HookRunnerConfig struct {
MachineLock machinelock.Lock
AgentConfig agent.Config
Tag names.UnitTag
Clock Clock
Logger Logger
}
HookRunnerConfig is just an argument struct for NewHookRunner.
type IsolatedConfig ¶
type IsolatedConfig struct {
Runner HookRunner
StateReadWriter StateReadWriter
Clock Clock
Logger Logger
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 Logger ¶
type Logger interface {
Errorf(string, ...interface{})
Warningf(string, ...interface{})
Infof(string, ...interface{})
Debugf(string, ...interface{})
Tracef(string, ...interface{})
Root() loggo.Logger
}
Logger represents the logging methods used in this package.
type ManifoldConfig ¶
type ManifoldConfig struct {
AgentName string
APICallerName string
MachineLock machinelock.Lock
Clock Clock
Logger Logger
NewHookRunner func(HookRunnerConfig) HookRunner
NewMeterStatusAPIClient func(base.APICaller, names.UnitTag) meterstatus.MeterStatusClient
NewUniterStateAPIClient func(base.FacadeCaller, names.UnitTag) *common.UnitStateAPI
NewConnectedStatusWorker func(ConnectedConfig) (worker.Worker, error)
NewIsolatedStatusWorker func(IsolatedConfig) (worker.Worker, error)
}
ManifoldConfig identifies the resource names upon which the status manifold depends.
type State ¶
type State struct {
Code string `yaml:"status-code"`
Info string `yaml:"status-info"`
Disconnected *Disconnected `yaml:"disconnected,omitempty"`
}
State represents the worker's internal state.
type StateReadWriter ¶
StateReadWriter is implemented by types that can read and write the meter worker's internal state.
type TriggerCreator ¶
type UnitStateAPI ¶
type UnitStateAPI interface {
State() (params.UnitStateResult, error)
SetState(params.SetUnitStateArg) error
}
UnitStateAPI describes the API for reading/writing unit state data from/to the controller.
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. )