meterstatus

package
v0.0.0-...-6cf1bc9 Latest Latest
Warning

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

Go to latest
Published: Oct 13, 2016 License: AGPL-3.0 Imports: 23 Imported by: 0

Documentation

Overview

Package meterstatus provides a worker that executes the meter-status-changed hook periodically.

Index

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

type HookRunner interface {
	RunHook(string, string, <-chan struct{}) error
}

HookRunner implements the functionality necessary to run a meter-status-changed hook.

func NewHookRunner

func NewHookRunner(tag names.UnitTag, lockName string, config agent.Config, clock clock.Clock) HookRunner

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

func NewStateFile(path string) *StateFile

NewStateFile creates a new file for persistent storage of the meter status.

func (*StateFile) Read

func (f *StateFile) Read() (string, string, *Disconnected, error)

Read reads the current meter status information from disk.

func (*StateFile) Write

func (f *StateFile) Write(code, info string, disconnected *Disconnected) error

Write stores the supplied status information to disk.

type TriggerCreator

type TriggerCreator func(WorkerState, string, time.Time, clock.Clock, time.Duration, time.Duration) (<-chan time.Time, <-chan time.Time)

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

Jump to

Keyboard shortcuts

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