Documentation
¶
Index ¶
- type CORS
- type Config
- type GRPCRegistrator
- type GServer
- type KeepAliveCfg
- type Middleware
- type Option
- type RateLimit
- type RouteRegistrator
- type Server
- func (e *Server) AddService(svc Service)
- func (e *Server) Close()
- func (e *Server) Configuration() *Config
- func (e *Server) Discovery() discovery.Discovery
- func (e *Server) Err() <-chan error
- func (e *Server) Hostname() string
- func (e *Server) IsReady() bool
- func (e *Server) ListenURLs() []string
- func (e *Server) LocalIP() string
- func (e *Server) Name() string
- func (e *Server) Service(name string) Service
- func (e *Server) StartedAt() time.Time
- type Service
- type ServiceFactory
- type StartSubcriber
- type SwaggerCfg
- type TLSInfo
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type CORS ¶
type CORS struct {
// Enabled specifies if the CORS is enabled.
Enabled *bool `json:"enabled,omitempty" yaml:"enabled,omitempty"`
// MaxAge indicates how long (in seconds) the results of a preflight request can be cached.
MaxAge int `json:"max_age,omitempty" yaml:"max_age,omitempty"`
// AllowedOrigins is a list of origins a cross-domain request can be executed from.
AllowedOrigins []string `json:"allowed_origins,omitempty" yaml:"allowed_origins,omitempty"`
// AllowedMethods is a list of methods the client is allowed to use with cross-domain requests.
AllowedMethods []string `json:"allowed_methods,omitempty" yaml:"allowed_methods,omitempty"`
// AllowedHeaders is list of non simple headers the client is allowed to use with cross-domain requests.
AllowedHeaders []string `json:"allowed_headers,omitempty" yaml:"allowed_headers,omitempty"`
// ExposedHeaders indicates which headers are safe to expose to the API of a CORS API specification.
ExposedHeaders []string `json:"exposed_headers,omitempty" yaml:"exposed_headers,omitempty"`
// AllowCredentials indicates whether the request can include user credentials.
AllowCredentials *bool `json:"allow_credentials,omitempty" yaml:"allow_credentials,omitempty"`
// OptionsPassthrough instructs preflight to let other potential next handlers to process the OPTIONS method.
OptionsPassthrough *bool `json:"options_pass_through,omitempty" yaml:"options_pass_through,omitempty"`
// Debug flag adds additional output to debug server side CORS issues.
Debug *bool `json:"debug,omitempty" yaml:"debug,omitempty"`
}
CORS contains configuration for CORS.
func (*CORS) GetAllowCredentials ¶
GetAllowCredentials flag
func (*CORS) GetEnabled ¶
GetEnabled specifies if the CORS is enabled.
func (*CORS) GetOptionsPassthrough ¶
GetOptionsPassthrough flag
type Config ¶
type Config struct {
// DebugLogs allows to add extra debog logs
DebugLogs bool `json:"debug_logs" yaml:"debug_logs"`
// Description provides description of the server
Description string `json:"description,omitempty" yaml:"description,omitempty"`
// Disabled specifies if the service is disabled
Disabled bool `json:"disabled,omitempty" yaml:"disabled,omitempty"`
// ClientURL is the public URL exposed to clients
ClientURL string `json:"client_url" yaml:"client_url"`
// ListenURLs is the list of URLs that the server will be listen on
ListenURLs []string `json:"listen_urls" yaml:"listen_urls"`
// ServerTLS provides TLS config for server
ServerTLS *TLSInfo `json:"server_tls,omitempty" yaml:"server_tls,omitempty"`
// SkipLogPaths if set, specifies a list of paths to not log.
// this can be used for /v1/status/node or /metrics
SkipLogPaths []telemetry.LoggerSkipPath `json:"logger_skip_paths,omitempty" yaml:"logger_skip_paths,omitempty"`
// Services is a list of services to enable for this server
Services []string `json:"services" yaml:"services"`
// IdentityMap contains configuration for the roles
IdentityMap *roles.IdentityMap `json:"identity_map" yaml:"identity_map"`
// Authz contains configuration for the authorization module
Authz *authz.Config `json:"authz" yaml:"authz"`
// CORS contains configuration for CORS.
CORS *CORS `json:"cors,omitempty" yaml:"cors,omitempty"`
// RateLimit contains configuration for the rate limiter
RateLimit *RateLimit `json:"rate_limit,omitempty" yaml:"rate_limit,omitempty"`
// Timeout settings
Timeout struct {
// Request is the timeout for client requests to finish.
Request time.Duration `json:"request,omitempty" yaml:"request,omitempty"`
} `json:"timeout" yaml:"timeout"`
// KeepAlive settings
KeepAlive KeepAliveCfg `json:"keep_alive" yaml:"keep_alive"`
}
Config contains the configuration of the server
type GRPCRegistrator ¶
GRPCRegistrator provides interface to register gRPC service
type GServer ¶ added in v0.14.0
type GServer interface {
// Name returns server name
Name() string
// Configuration of the server
Configuration() *Config
// AddService to the server
AddService(svc Service)
// Service returns service by name
Service(name string) Service
// IsReady returns true when the server is ready to serve
IsReady() bool
// StartedAt returns Time when the server has started
StartedAt() time.Time
// ListenURLs is the list of URLs that the server listens on
ListenURLs() []string
// Hostname is the hostname
Hostname() string
// LocalIP is the local IP4
LocalIP() string
// Discovery returns Discovery interface
Discovery() discovery.Discovery
// Err returns error channel
Err() <-chan error
// Close gracefully shuts down all servers/listeners.
// Client requests will be terminated with request timeout.
// After timeout, enforce remaning requests be closed immediately.
Close()
}
GServer is the interface for gRPC server
type KeepAliveCfg ¶
type KeepAliveCfg struct {
// MinTime is the minimum interval that a client should wait before pinging server.
MinTime time.Duration `json:"min_time,omitempty" yaml:"min_time,omitempty"`
// Interval is the frequency of server-to-client ping to check if a connection is alive.
Interval time.Duration `json:"interval,omitempty" yaml:"interval,omitempty"`
// Timeout is the additional duration of wait before closing a non-responsive connection, use 0 to disable.
Timeout time.Duration `json:"timeout,omitempty" yaml:"timeout,omitempty"`
}
KeepAliveCfg settings
type Middleware ¶
Middleware defines middleware handler
type Option ¶
type Option interface {
// contains filtered or unexported methods
}
Option is an option that can be passed to New(). Option configures how we set up the client
func WithMiddleware ¶
func WithMiddleware(otherHandler Middleware) Option
WithMiddleware option to provide HTTP handler
func WithStreamServerInterceptor ¶
func WithStreamServerInterceptor(other grpc.StreamServerInterceptor) Option
WithStreamServerInterceptor option to provide RPC StreamServerInterceptor
func WithUnaryServerInterceptor ¶
func WithUnaryServerInterceptor(other grpc.UnaryServerInterceptor) Option
WithUnaryServerInterceptor option to provide RPC UnaryServerInterceptor
type RateLimit ¶
type RateLimit struct {
// Enabled specifies if the Rate Limititing is enabled.
Enabled *bool `json:"enabled,omitempty" yaml:"enabled,omitempty"`
// RequestsPerSecond specifies the maximum number of requests per second.
RequestsPerSecond int `json:"requests_per_second,omitempty" yaml:"requests_per_second,omitempty"`
// ExpirationTTL specifies the TTL for token bucket, default 10 mins
ExpirationTTL time.Duration `json:"expiration_ttl,omitempty" yaml:"expiration_ttl,omitempty"`
// HeadersIPLookups, default is "X-Forwarded-For", "X-Real-IP" or "RemoteAddr".
HeadersIPLookups []string `json:"headers_ip_lookups,omitempty" yaml:"headers_ip_lookups,omitempty"`
// Metods, can be: "GET", "POST", "PUT", "DELETE", "PATCH", "HEAD", "OPTIONS".
Metods []string `json:"metods,omitempty" yaml:"metods,omitempty"`
}
RateLimit contains configuration for Rate Limititing.
func (*RateLimit) GetEnabled ¶
GetEnabled specifies if the Rate Limititing is enabled.
type RouteRegistrator ¶
type RouteRegistrator interface {
RegisterRoute(restserver.Router)
}
RouteRegistrator provides interface to register HTTP route
type Server ¶
Server contains a running server and its listeners.
Example ¶
sigs := make(chan os.Signal, 2)
cfg := &gserver.Config{
ListenURLs: []string{"https://127.0.0.1:12345", "unix:///tmp/gserver_test.sock"},
Services: []string{"test"},
KeepAlive: gserver.KeepAliveCfg{
MinTime: time.Second,
Interval: time.Second,
Timeout: time.Second,
},
ServerTLS: &gserver.TLSInfo{
CertFile: "testdata/test-server.pem",
KeyFile: "testdata/test-server-key.pem",
TrustedCAFile: "testdata/test-server-rootca.pem",
},
RateLimit: &gserver.RateLimit{
RequestsPerSecond: 10,
},
}
c := mockappcontainer.NewBuilder().
WithJwtParser(nil).
WithDiscovery(discovery.New()).
Container()
fact := map[string]gserver.ServiceFactory{
"test": testServiceFactory,
}
fmt.Println("starting server")
srv, err := gserver.Start("Empty", cfg, c, fact)
if err != nil {
panic("unable to start the server: " + err.Error())
}
go func() {
// Send STOP signal after few seconds,
// in production the service should listen to
// os.Interrupt, os.Kill, syscall.SIGTERM, syscall.SIGUSR2, syscall.SIGABRT events
time.Sleep(3 * time.Second)
fmt.Println("sending syscall.SIGTERM signal")
sigs <- syscall.SIGTERM
}()
// register for signals, and wait to be shutdown
signal.Notify(sigs, os.Interrupt, syscall.SIGTERM)
// Block until a signal is received.
sig := <-sigs
fmt.Printf("received signal: %v\n", sig)
srv.Close()
fmt.Println("stopped server")
Output: starting server sending syscall.SIGTERM signal received signal: terminated stopped server
func (*Server) Close ¶
func (e *Server) Close()
Close gracefully shuts down all servers/listeners. Client requests will be terminated with request timeout. After timeout, enforce remaning requests be closed immediately.
func (*Server) ListenURLs ¶
ListenURLs is the list of URLs that the server listens on
type Service ¶
type Service interface {
Name() string
Close()
// IsReady indicates that service is ready to serve its end-points
IsReady() bool
}
Service provides a way for subservices to be registered so they get added to the http API.
type ServiceFactory ¶
type ServiceFactory func(GServer) interface{}
ServiceFactory is interface to create Services
type StartSubcriber ¶
type StartSubcriber interface {
// OnStarted is called when the server started and
// is ready to serve requests
OnStarted() error
}
StartSubcriber provides
type SwaggerCfg ¶
type SwaggerCfg struct {
// Enabled allows Swagger
Enabled bool `json:"enabled" yaml:"enabled"`
// Files is a map of service name to location
Files map[string]string `json:"files" yaml:"files"`
}
SwaggerCfg specifies the configuration for Swagger
type TLSInfo ¶
type TLSInfo struct {
// CertFile specifies location of the cert
CertFile string `json:"cert,omitempty" yaml:"cert,omitempty"`
// KeyFile specifies location of the key
KeyFile string `json:"key,omitempty" yaml:"key,omitempty"`
// TrustedCAFile specifies location of the trusted Root file
TrustedCAFile string `json:"trusted_ca,omitempty" yaml:"trusted_ca,omitempty"`
// CRLFile specifies location of the CRL
CRLFile string `json:"crl,omitempty" yaml:"crl,omitempty"`
// OCSPFile specifies location of the OCSP response
OCSPFile string `json:"ocsp,omitempty" yaml:"ocsp,omitempty"`
// CipherSuites allows to speciy Cipher suites
CipherSuites []string `json:"cipher_suites,omitempty" yaml:"cipher_suites,omitempty"`
// ClientCertAuth controls client auth
ClientCertAuth *bool `json:"client_cert_auth,omitempty" yaml:"client_cert_auth,omitempty"`
}
TLSInfo contains configuration info for the TLS
func (*TLSInfo) GetClientCertAuth ¶
GetClientCertAuth controls client auth
Directories
¶
| Path | Synopsis |
|---|---|
|
Package credentials implements gRPC credential interface with etcd specific logic.
|
Package credentials implements gRPC credential interface with etcd specific logic. |