Documentation ¶
Index ¶
- Constants
- Variables
- func AdminFacadeDetails() []facade.Details
- func AllFacades() *facade.Registry
- func DescribeFacades(registry *facade.Registry) []params.FacadeVersions
- func IsAnonymousFacade(facadeName string) bool
- func IsControllerFacade(facadeName string) bool
- func IsMethodAllowedDuringMigration(facadeName, methodName string) bool
- func IsMethodAllowedDuringUpgrade(facadeName, methodName string) bool
- func IsModelFacade(facadeName string) bool
- func NewAllWatcher(context facade.Context) (facade.Facade, error)
- func RepackageAndUploadCharm(st *state.State, archive *charm.CharmArchive, curl *charm.URL) error
- type CharmsHTTPHandler
- type Collector
- type EntitiesWatcher
- type ExecEmbeddedCommandFunc
- type FailableHandlerFunc
- type Hub
- type LogSinkConfig
- type Logger
- type Pinger
- type Queue
- type ResourcesBackend
- type ResourcesHandler
- type RestHTTPHandler
- type Server
- type ServerConfig
- type SharedHub
- type SrvAllWatcher
- type SrvModelSummaryWatcher
- type UnitResourcesHandler
Constants ¶
const ( // MetricLabelEndpoint defines a constant for the APIConnections and // PingFailureCount Labels MetricLabelEndpoint = "endpoint" // MetricLabelModelUUID defines a constant for the PingFailureCount and // LogWriteCount Labels // Note: prometheus doesn't allow hyphens only underscores MetricLabelModelUUID = "model_uuid" // MetricLabelState defines a constant for the state Label MetricLabelState = "state" // MetricLabelHost defines a host constant for the Requests Label MetricLabelHost = "host" // MetricLabelStatus defines a status constant for the Requests Label MetricLabelStatus = "status" )
const ( // ApplyLeaseTimeout is the maximum upper bound of waiting for applying a // command to the lease. This should never trigger, as the underlying system // has other underlying shorter timeouts that should never grow to this // timeout. This stop gap is to ensure that we never block leases. ApplyLeaseTimeout = time.Second * 10 )
Variables ¶
var MaintenanceNoLoginError = errors.New("login failed - maintenance in progress")
var MetricAPIConnectionsLabelNames = []string{ MetricLabelEndpoint, }
MetricAPIConnectionsLabelNames defines a series of labels for the APIConnections metric.
var MetricLogLabelNames = []string{ MetricLabelModelUUID, MetricLabelState, }
MetricLogLabelNames defines a series of labels for the LogWrite and LogRead metric
var MetricPingFailureLabelNames = []string{ MetricLabelModelUUID, MetricLabelEndpoint, }
MetricPingFailureLabelNames defines a series of labels for the PingFailure metric.
var MetricTotalRequestsLabelNames = []string{ MetricLabelModelUUID, MetricLabelHost, }
MetricTotalRequestsLabelNames defines a series of labels for the TotalRequests metric.
var MetricTotalRequestsWithStatusLabelNames = []string{ MetricLabelModelUUID, MetricLabelHost, MetricLabelStatus, }
MetricTotalRequestsWithStatusLabelNames defines a series of labels for the TotalRequests metric.
Functions ¶
func AdminFacadeDetails ¶
AdminFacadeDetails returns information on the Admin facade provided at login time. The Facade field of the returned slice elements will be nil.
func AllFacades ¶
AllFacades returns a registry containing all known API facades.
This will panic if facade registration fails, but there is a unit test to guard against that.
func DescribeFacades ¶
func DescribeFacades(registry *facade.Registry) []params.FacadeVersions
DescribeFacades returns the list of available Facades and their Versions
func IsAnonymousFacade ¶
IsAnonymousFacade reports whether the given facade name can be accessed using an anonymous connection.
func IsControllerFacade ¶
IsControllerFacade reports whether the given facade name can be accessed using a controller connection.
func IsModelFacade ¶
IsModelFacade reports whether the given facade name can be accessed using a model connection.
func NewAllWatcher ¶
NewAllWatcher returns a new API server endpoint for interacting with a watcher created by the WatchAll and WatchAllModels API calls.
func RepackageAndUploadCharm ¶
RepackageAndUploadCharm expands the given charm archive to a temporary directory, repackages it with the given curl's revision, then uploads it to storage, and finally updates the state.
Types ¶
type CharmsHTTPHandler ¶
type CharmsHTTPHandler struct { PostHandler FailableHandlerFunc GetHandler FailableHandlerFunc }
CharmsHTTPHandler creates is a http.Handler which serves POST requests to a PostHandler and GET requests to a GetHandler.
TODO(katco): This is the beginning of inverting the dependencies in this callstack by splitting out the serving mechanism from the modules that are processing the requests. The next step is to publically expose construction of a suitable PostHandler and GetHandler whose goals should be clearly called out in their names, (e.g. charmPersitAPI for POSTs).
To accomplish this, we'll have to make the httpContext type public so that we can pass it into these public functions.
After we do this, we can then test the individual funcs/structs without standing up an entire HTTP server. I.e. actual unit tests. If you're in this area and can, please chisel away at this problem and update this TODO as needed! Many thanks, hacker!
TODO(stickupkid): This handler is terrible, we could implement a middleware pattern to handle discreet logic and then pass it on to the next in the pipeline.
As usual big methods lead to untestable code and it causes testing pain.
func (*CharmsHTTPHandler) ServeHTTP ¶
func (h *CharmsHTTPHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
type Collector ¶
type Collector struct { TotalConnections prometheus.Counter LoginAttempts prometheus.Gauge APIConnections *prometheus.GaugeVec APIRequestDuration *prometheus.SummaryVec PingFailureCount *prometheus.CounterVec LogWriteCount *prometheus.CounterVec LogReadCount *prometheus.CounterVec TotalRequests *prometheus.CounterVec TotalRequestErrors *prometheus.CounterVec TotalRequestsDuration *prometheus.SummaryVec }
Collector is a prometheus.Collector that collects metrics based on apiserver status.
func NewMetricsCollector ¶
func NewMetricsCollector() *Collector
NewMetricsCollector returns a new Collector.
func (*Collector) Collect ¶
func (c *Collector) Collect(ch chan<- prometheus.Metric)
Collect is part of the prometheus.Collector interface.
func (*Collector) Describe ¶
func (c *Collector) Describe(ch chan<- *prometheus.Desc)
Describe is part of the prometheus.Collector interface.
type EntitiesWatcher ¶
type EntitiesWatcher interface { state.StringsWatcher // MapChanges maps the received strings to their according tag strings. // The EntityFinder interface representing state or a mock has to be // upcasted into the needed sub-interface of state for the real mapping. MapChanges(in []string) ([]string, error) }
EntitiesWatcher defines an interface based on the StringsWatcher but also providing a method for the mapping of the received strings to the tags of the according entities.
type ExecEmbeddedCommandFunc ¶
type ExecEmbeddedCommandFunc func(ctx *cmd.Context, store jujuclient.ClientStore, whitelist []string, cmdPlusArgs string) int
ExecEmbeddedCommandFunc defines a function which runs a named Juju command with the whitelisted sub commands.
type FailableHandlerFunc ¶
type FailableHandlerFunc func(http.ResponseWriter, *http.Request) error
type Hub ¶
Hub defines the publish method that the handler uses to publish messages on the centralhub of the apiserver.
type LogSinkConfig ¶
type LogSinkConfig struct { // DBLoggerBufferSize is the capacity of the database logger's buffer. DBLoggerBufferSize int // DBLoggerFlushInterval is the amount of time to allow a log record // to sit in the buffer before being flushed to the database. DBLoggerFlushInterval time.Duration // RateLimitBurst defines the number of log messages that will be let // through before we start rate limiting. RateLimitBurst int64 // RateLimitRefill defines the rate at which log messages will be let // through once the initial burst amount has been depleted. RateLimitRefill time.Duration }
LogSinkConfig holds parameters to control the API server's logsink endpoint behaviour.
func DefaultLogSinkConfig ¶
func DefaultLogSinkConfig() LogSinkConfig
DefaultLogSinkConfig returns a LogSinkConfig with default values.
func (LogSinkConfig) Validate ¶
func (cfg LogSinkConfig) Validate() error
Validate validates the logsink endpoint configuration.
type Pinger ¶
type Pinger interface { Ping() Stop() error }
pinger describes a resource that can be pinged and stopped.
type Queue ¶
type Queue interface { // Enqueue will add an operation to the queue. As this is a blocking queue, any // additional enqueue operations will block and wait for subsequent operations // to be completed. // The design of this is to ensure that people calling this will have to // correctly handle backing off from enqueueing. Enqueue(queue.Operation) }
Queue is a blocking queue to guard access and to serialize raft applications, allowing for client side backoff.
type ResourcesBackend ¶
type ResourcesBackend interface { // OpenResource returns the identified resource and its content. OpenResource(applicationID, name string) (resource.Resource, io.ReadCloser, error) // GetResource returns the identified resource. GetResource(applicationID, name string) (resource.Resource, error) // GetPendingResource returns the identified resource. GetPendingResource(applicationID, name, pendingID string) (resource.Resource, error) // SetResource adds the resource to blob storage and updates the metadata. SetResource(applicationID, userID string, res charmresource.Resource, r io.Reader, _ state.IncrementCharmModifiedVersionType) (resource.Resource, error) // UpdatePendingResource adds the resource to blob storage and updates the metadata. UpdatePendingResource(applicationID, pendingID, userID string, res charmresource.Resource, r io.Reader) (resource.Resource, error) }
ResourcesBackend is the functionality of Juju's state needed for the resources API.
type ResourcesHandler ¶
type ResourcesHandler struct { StateAuthFunc func(*http.Request, ...string) (ResourcesBackend, state.PoolHelper, names.Tag, error) ChangeAllowedFunc func(*http.Request) error }
ResourcesHandler is the HTTP handler for client downloads and uploads of resources.
func (*ResourcesHandler) ServeHTTP ¶
func (h *ResourcesHandler) ServeHTTP(resp http.ResponseWriter, req *http.Request)
ServeHTTP implements http.Handler.
type RestHTTPHandler ¶
type RestHTTPHandler struct {
GetHandler FailableHandlerFunc
}
RestHTTPHandler creates is a http.Handler which serves ReST requests.
func (*RestHTTPHandler) ServeHTTP ¶
func (h *RestHTTPHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
ServeHTTP is defined on handler.Handler.
type Server ¶
type Server struct {
// contains filtered or unexported fields
}
Server holds the server side of the API.
func NewServer ¶
func NewServer(cfg ServerConfig) (*Server, error)
NewServer serves API requests using the given configuration.
func (*Server) Dead ¶
func (srv *Server) Dead() <-chan struct{}
Dead returns a channel that signals when the server has exited.
func (*Server) GetAuditConfig ¶
GetAuditConfig returns a copy of the current audit logging configuration.
type ServerConfig ¶
type ServerConfig struct { Clock clock.Clock PingClock clock.Clock Tag names.Tag DataDir string LogDir string Hub *pubsub.StructuredHub Presence presence.Recorder Mux *apiserverhttp.Mux Authenticator httpcontext.LocalMacaroonAuthenticator // MultiwatcherFactory is used by the API server to create // multiwatchers. The real factory is managed by the multiwatcher // worker. MultiwatcherFactory multiwatcher.Factory // StatePool is the StatePool used for looking up State // to pass to facades. StatePool will not be closed by the // server; it is the callers responsibility to close it // after the apiserver has exited. StatePool *state.StatePool // Controller is the in-memory representation of the models // in the controller. It is kept up to date with an all model // watcher and the modelcache worker. Controller *cache.Controller // UpgradeComplete is a function that reports whether or not // the if the agent running the API server has completed // running upgrade steps. This is used by the API server to // limit logins during upgrades. UpgradeComplete func() bool // PublicDNSName is reported to the API clients who connect. PublicDNSName string // AllowModelAccess holds whether users will be allowed to // access models that they have access rights to even when // they don't have access to the controller. AllowModelAccess bool // NewObserver is a function which will return an observer. This // is used per-connection to instantiate a new observer to be // notified of key events during API requests. NewObserver observer.ObserverFactory // RegisterIntrospectionHandlers is a function that will // call a function with (path, http.Handler) tuples. This // is to support registering the handlers underneath the // "/introspection" prefix. RegisterIntrospectionHandlers func(func(string, http.Handler)) // LogSinkConfig holds parameters to control the API server's // logsink endpoint behaviour. If this is nil, the values from // DefaultLogSinkConfig() will be used. LogSinkConfig *LogSinkConfig // GetAuditConfig holds a function that returns the current audit // logging config. The function may return updated values, so // should be called every time a new login is handled. GetAuditConfig func() auditlog.Config // LeaseManager gives access to leadership and singular claimers // and checkers for use in API facades. LeaseManager lease.Manager // MetricsCollector defines all the metrics to be collected for the // apiserver MetricsCollector *Collector // ExecEmbeddedCommand is a function which creates an embedded Juju CLI instance. ExecEmbeddedCommand ExecEmbeddedCommandFunc // RaftOpQueue is used by the API to apply operations to the raft // instance. RaftOpQueue Queue }
ServerConfig holds parameters required to set up an API server.
func (ServerConfig) Validate ¶
func (c ServerConfig) Validate() error
Validate validates the API server configuration.
type SharedHub ¶
type SharedHub interface {}
SharedHub represents the methods of the pubsub.StructuredHub that are used. The context uses an interface to allow mocking of the hub.
type SrvAllWatcher ¶
type SrvAllWatcher struct {
// contains filtered or unexported fields
}
SrvAllWatcher defines the API methods on a state.Multiwatcher. which watches any changes to the state. Each client has its own current set of watchers, stored in resources. It is used by both the AllWatcher and AllModelWatcher facades.
func (*SrvAllWatcher) Next ¶
func (aw *SrvAllWatcher) Next() (params.AllWatcherNextResults, error)
Next will return the current state of everything on the first call and subsequent calls will
type SrvModelSummaryWatcher ¶
type SrvModelSummaryWatcher struct {
// contains filtered or unexported fields
}
SrvModelSummaryWatcher defines the API methods on a ModelSummaryWatcher.
func NewModelSummaryWatcher ¶
func NewModelSummaryWatcher(context facade.Context) (*SrvModelSummaryWatcher, error)
NewModelSummaryWatcher returns a new API server endpoint for interacting with a watcher created by the WatchModelSummaries and WatchAllModelSummaries API calls.
func (*SrvModelSummaryWatcher) Next ¶
func (w *SrvModelSummaryWatcher) Next() (params.SummaryWatcherNextResults, error)
Next will return the current state of everything on the first call and subsequent calls will return just those model summaries that have changed.
type UnitResourcesHandler ¶
type UnitResourcesHandler struct {
NewOpener func(*http.Request, ...string) (resource.Opener, state.PoolHelper, error)
}
UnitResourcesHandler is the HTTP handler for unit agent downloads of resources.
func (*UnitResourcesHandler) ServeHTTP ¶
func (h *UnitResourcesHandler) ServeHTTP(resp http.ResponseWriter, req *http.Request)
ServeHTTP implements http.Handler.
Source Files ¶
- admin.go
- allfacades.go
- apiserver.go
- apiservermetrics.go
- backup.go
- charms.go
- config.go
- debuglog.go
- debuglog_db.go
- embeddedcli.go
- embeddedcli_whitelist.go
- httpcontext.go
- introspection.go
- leadership.go
- localofferauth.go
- logsink.go
- logstream.go
- logtransfer.go
- pinger.go
- pubsub.go
- raft.go
- registration.go
- resources.go
- resources_mig.go
- resources_unit.go
- rest.go
- restrict_anonymous.go
- restrict_caasmodel.go
- restrict_controller.go
- restrict_migrations.go
- restrict_model.go
- restrict_newer_client.go
- restrict_upgrades.go
- restricted_root.go
- root.go
- shared.go
- tools.go
- watcher.go
Directories ¶
Path | Synopsis |
---|---|
charms/mocks
Package mocks is a generated GoMock package.
|
Package mocks is a generated GoMock package. |
mocks
Package mocks is a generated GoMock package.
|
Package mocks is a generated GoMock package. |
networkingcommon/mocks
Package mocks is a generated GoMock package.
|
Package mocks is a generated GoMock package. |
storagecommon
Package storagecommon provides common storage-related services for API server facades.
|
Package storagecommon provides common storage-related services for API server facades. |
mocks
Package mocks is a generated GoMock package.
|
Package mocks is a generated GoMock package. |
facades
|
|
agent/hostkeyreporter
Package hostkeyreporter implements the API facade used by the hostkeyreporter worker.
|
Package hostkeyreporter implements the API facade used by the hostkeyreporter worker. |
agent/instancemutater/mocks
Package mocks is a generated GoMock package.
|
Package mocks is a generated GoMock package. |
agent/machine
The machiner package implements the API interface used by the machiner worker.
|
The machiner package implements the API interface used by the machiner worker. |
agent/machineactions
machineactions implements the the apiserver side of running actions on machines
|
machineactions implements the the apiserver side of running actions on machines |
agent/meterstatus
Package meterstatus provides the meter status API facade.
|
Package meterstatus provides the meter status API facade. |
agent/meterstatus/mocks
Package mocks is a generated GoMock package.
|
Package mocks is a generated GoMock package. |
agent/metricsender
Package metricsender contains functions for sending metrics from a controller to a remote metric collector.
|
Package metricsender contains functions for sending metrics from a controller to a remote metric collector. |
agent/migrationminion
Package migrationminion defines the API facade for use by the migration minion worker to monitor the progress of, and interact with, model migrations.
|
Package migrationminion defines the API facade for use by the migration minion worker to monitor the progress of, and interact with, model migrations. |
agent/provisioner
Package provisioner supplies the API facade used by the provisioner worker.
|
Package provisioner supplies the API facade used by the provisioner worker. |
agent/provisioner/mocks
Package mocks is a generated GoMock package.
|
Package mocks is a generated GoMock package. |
agent/secretsmanager/mocks
Package mocks is a generated GoMock package.
|
Package mocks is a generated GoMock package. |
agent/uniter
Package uniter implements the API interface used by the uniter worker.
|
Package uniter implements the API interface used by the uniter worker. |
agent/uniter/mocks
Package mocks is a generated GoMock package.
|
Package mocks is a generated GoMock package. |
agent/upgradesteps/mocks
Package mocks is a generated GoMock package.
|
Package mocks is a generated GoMock package. |
client/application
Package application contains api calls for functionality related to deploying and managing applications and their related charms.
|
Package application contains api calls for functionality related to deploying and managing applications and their related charms. |
client/application/mocks
Package mocks is a generated GoMock package.
|
Package mocks is a generated GoMock package. |
client/bundle
Package bundle defines an API endpoint for functions dealing with bundles.
|
Package bundle defines an API endpoint for functions dealing with bundles. |
client/charms/mocks
Package mocks is a generated GoMock package.
|
Package mocks is a generated GoMock package. |
client/charms/services
Package services is a generated GoMock package.
|
Package services is a generated GoMock package. |
client/client/mocks
Package mocks is a generated GoMock package.
|
Package mocks is a generated GoMock package. |
client/cloud
Package cloud defines an API end point for functions dealing with the controller's cloud definition, and cloud credentials.
|
Package cloud defines an API end point for functions dealing with the controller's cloud definition, and cloud credentials. |
client/controller
Package controller defines an API end point for functions dealing with controllers as a whole.
|
Package controller defines an API end point for functions dealing with controllers as a whole. |
client/controller/mocks
Package mocks is a generated GoMock package.
|
Package mocks is a generated GoMock package. |
client/machinemanager/mocks
Package mocks is a generated GoMock package.
|
Package mocks is a generated GoMock package. |
client/metricsdebug
Package metricsdebug contains the implementation of an api endpoint for metrics debug functionality.
|
Package metricsdebug contains the implementation of an api endpoint for metrics debug functionality. |
client/modelgeneration/mocks
Package mocks is a generated GoMock package.
|
Package mocks is a generated GoMock package. |
client/modelmanager
Package modelmanager defines an API end point for functions dealing with models.
|
Package modelmanager defines an API end point for functions dealing with models. |
client/modelmanager/mocks
Package mocks is a generated GoMock package.
|
Package mocks is a generated GoMock package. |
client/resources/mocks
Package mocks is a generated GoMock package.
|
Package mocks is a generated GoMock package. |
client/sshclient
Package sshclient implements the API endpoint required for Juju clients that wish to make SSH connections to Juju managed machines.
|
Package sshclient implements the API endpoint required for Juju clients that wish to make SSH connections to Juju managed machines. |
client/storage
Package storage provides an API server facade for managing storage entities.
|
Package storage provides an API server facade for managing storage entities. |
client/subnets/mocks
Package mocks is a generated GoMock package.
|
Package mocks is a generated GoMock package. |
controller/caasmodelconfigmanager/mocks
Package mocks is a generated GoMock package.
|
Package mocks is a generated GoMock package. |
controller/charmdownloader
Package charmdownloader is a generated GoMock package.
|
Package charmdownloader is a generated GoMock package. |
controller/charmrevisionupdater/mocks
Package mocks is a generated GoMock package.
|
Package mocks is a generated GoMock package. |
controller/metricsmanager
Package metricsmanager contains the implementation of an api endpoint for calling metrics functions in state.
|
Package metricsmanager contains the implementation of an api endpoint for calling metrics functions in state. |
controller/migrationmaster
This package defines the API facade for use by the migration master worker when communicating with its own controller.
|
This package defines the API facade for use by the migration master worker when communicating with its own controller. |
controller/migrationmaster/mocks
Package mocks is a generated GoMock package.
|
Package mocks is a generated GoMock package. |
controller/migrationtarget
This package defines the API facade for use by the migration master worker when interacting with the target controller during a migration.
|
This package defines the API facade for use by the migration master worker when interacting with the target controller during a migration. |
controller/resumer
The resumer package implements the API interface used by the resumer worker.
|
The resumer package implements the API interface used by the resumer worker. |
Package httpattachment provides facilities for attaching a streaming blob of data and associated metadata to an HTTP API request, and for reading that blob on the server side.
|
Package httpattachment provides facilities for attaching a streaming blob of data and associated metadata to an HTTP API request, and for reading that blob on the server side. |
mocks
Package mocks is a generated GoMock package.
|
Package mocks is a generated GoMock package. |
metricobserver
Package metricobserver provides an implementation of apiserver/observer.ObserverFactory that maintains Prometheus metrics.
|
Package metricobserver provides an implementation of apiserver/observer.ObserverFactory that maintains Prometheus metrics. |
metricobserver/mocks
Package mocks is a generated GoMock package.
|
Package mocks is a generated GoMock package. |