Documentation ¶
Index ¶
- Variables
- 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 ¶
var ( // WarnUnaryRequestLatency is the threshold for logging a warning for a slow unary request. WarnUnaryRequestLatency = 2 * time.Second )
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"` // PromGrpc allows to submit gRPC metrics to Prometheus interceptors PromGrpc bool `json:"prom_grpc" yaml:"prom_grpc"` // 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", ClientCAFile: "testdata/test-server-rootca.pem", // CA bundle for client certificates }, 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"` // ClientCAFile specifies location of the trusted Root file ClientCAFile string `json:"client_ca,omitempty" yaml:"client_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. |