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. )