// NewPinger returns an object that can be pinged by calling its Ping method. // If this method is not called frequently enough, the connection will be // dropped. func NewPinger(st *state.State, resources facade.Resources, authorizer facade.Authorizer) (Pinger, error) { pingTimeout, ok := resources.Get("pingTimeout").(*pingTimeout) if !ok { return nullPinger{}, nil } return pingTimeout, nil }
func extractResourceValue(resources facade.Resources, key string) (string, error) { res := resources.Get(key) strRes, ok := res.(common.StringResource) if !ok { if res == nil { strRes = "" } else { return "", errors.Errorf("invalid %s resource: %v", key, res) } } return strRes.String(), nil }
func newMachineStorageIdsWatcher( st *state.State, resources facade.Resources, auth facade.Authorizer, id string, parser func([]string) ([]params.MachineStorageId, error), ) (facade.Facade, error) { if !isAgent(auth) { return nil, common.ErrPerm } watcher, ok := resources.Get(id).(state.StringsWatcher) if !ok { return nil, common.ErrUnknownWatcher } return &srvMachineStorageIdsWatcher{watcher, id, resources, parser}, nil }
func leadershipSettingsAccessorFactory( st *state.State, resources facade.Resources, auth facade.Authorizer, ) *leadershipapiserver.LeadershipSettingsAccessor { registerWatcher := func(serviceId string) (string, error) { service, err := st.Application(serviceId) if err != nil { return "", err } w := service.WatchLeaderSettings() if _, ok := <-w.Changes(); ok { return resources.Register(w), nil } return "", watcher.EnsureErr(w) } getSettings := func(serviceId string) (map[string]string, error) { service, err := st.Application(serviceId) if err != nil { return nil, err } return service.LeaderSettings() } writeSettings := func(token leadership.Token, serviceId string, settings map[string]string) error { service, err := st.Application(serviceId) if err != nil { return err } return service.UpdateLeaderSettings(token, settings) } return leadershipapiserver.NewLeadershipSettingsAccessor( auth, registerWatcher, getSettings, st.LeadershipChecker().LeadershipCheck, writeSettings, ) }