All checks were successful
		
		
	
	test / test (push) Successful in 3m25s
				
			* util/id: add ability to specify what kind of id generate (nanoid/uuid v8) * logger/slog: write stacktrace always on fatal * logger/slog: try to close Out and sleep 1s Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org> Reviewed-on: #382 Co-authored-by: Vasiliy Tolstov <v.tolstov@unistack.org> Co-committed-by: Vasiliy Tolstov <v.tolstov@unistack.org>
		
			
				
	
	
		
			193 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			193 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package tunnel
 | |
| 
 | |
| import (
 | |
| 	"time"
 | |
| 
 | |
| 	"go.unistack.org/micro/v3/logger"
 | |
| 	"go.unistack.org/micro/v3/meter"
 | |
| 	"go.unistack.org/micro/v3/network/transport"
 | |
| 	"go.unistack.org/micro/v3/tracer"
 | |
| 	"go.unistack.org/micro/v3/util/id"
 | |
| )
 | |
| 
 | |
| var (
 | |
| 	// DefaultAddress is default tunnel bind address
 | |
| 	DefaultAddress = ":0"
 | |
| 	// DefaultToken the shared default token
 | |
| 	DefaultToken = "go.micro.tunnel"
 | |
| )
 | |
| 
 | |
| // Option func signature
 | |
| type Option func(*Options)
 | |
| 
 | |
| // Options provides network configuration options
 | |
| type Options struct {
 | |
| 	// Logger used for logging
 | |
| 	Logger logger.Logger
 | |
| 	// Meter used for metrics
 | |
| 	Meter meter.Meter
 | |
| 	// Tracer used for tracing
 | |
| 	Tracer tracer.Tracer
 | |
| 	// Transport used for communication
 | |
| 	Transport transport.Transport
 | |
| 	// Token the shared auth token
 | |
| 	Token string
 | |
| 	// Name holds the tunnel name
 | |
| 	Name string
 | |
| 	// ID holds the tunnel id
 | |
| 	ID string
 | |
| 	// Address holds the tunnel address
 | |
| 	Address string
 | |
| 	// Nodes holds the tunnel nodes
 | |
| 	Nodes []string
 | |
| }
 | |
| 
 | |
| // DialOption func
 | |
| type DialOption func(*DialOptions)
 | |
| 
 | |
| // DialOptions provides dial options
 | |
| type DialOptions struct {
 | |
| 	// Link specifies the link to use
 | |
| 	Link string
 | |
| 	// specify mode of the session
 | |
| 	Mode Mode
 | |
| 	// Wait for connection to be accepted
 | |
| 	Wait bool
 | |
| 	// the dial timeout
 | |
| 	Timeout time.Duration
 | |
| }
 | |
| 
 | |
| // ListenOption func
 | |
| type ListenOption func(*ListenOptions)
 | |
| 
 | |
| // ListenOptions provides listen options
 | |
| type ListenOptions struct {
 | |
| 	// Mode specify mode of the session
 | |
| 	Mode Mode
 | |
| 	// Timeout the read timeout
 | |
| 	Timeout time.Duration
 | |
| }
 | |
| 
 | |
| // ID sets the tunnel id
 | |
| func ID(id string) Option {
 | |
| 	return func(o *Options) {
 | |
| 		o.ID = id
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // Logger sets the logger
 | |
| func Logger(l logger.Logger) Option {
 | |
| 	return func(o *Options) {
 | |
| 		o.Logger = l
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // Meter sets the meter
 | |
| func Meter(m meter.Meter) Option {
 | |
| 	return func(o *Options) {
 | |
| 		o.Meter = m
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // Address sets the tunnel address
 | |
| func Address(a string) Option {
 | |
| 	return func(o *Options) {
 | |
| 		o.Address = a
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // Nodes specify remote network nodes
 | |
| func Nodes(n ...string) Option {
 | |
| 	return func(o *Options) {
 | |
| 		o.Nodes = n
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // Token sets the shared token for auth
 | |
| func Token(t string) Option {
 | |
| 	return func(o *Options) {
 | |
| 		o.Token = t
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // Transport listens for incoming connections
 | |
| func Transport(t transport.Transport) Option {
 | |
| 	return func(o *Options) {
 | |
| 		o.Transport = t
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // ListenMode option
 | |
| func ListenMode(m Mode) ListenOption {
 | |
| 	return func(o *ListenOptions) {
 | |
| 		o.Mode = m
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // ListenTimeout for reads and writes on the listener session
 | |
| func ListenTimeout(t time.Duration) ListenOption {
 | |
| 	return func(o *ListenOptions) {
 | |
| 		o.Timeout = t
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // DialMode multicast sets the multicast option to send only to those mapped
 | |
| func DialMode(m Mode) DialOption {
 | |
| 	return func(o *DialOptions) {
 | |
| 		o.Mode = m
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // DialTimeout sets the dial timeout of the connection
 | |
| func DialTimeout(t time.Duration) DialOption {
 | |
| 	return func(o *DialOptions) {
 | |
| 		o.Timeout = t
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // DialLink specifies the link to pin this connection to.
 | |
| // This is not applicable if the multicast option is set.
 | |
| func DialLink(id string) DialOption {
 | |
| 	return func(o *DialOptions) {
 | |
| 		o.Link = id
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // DialWait specifies whether to wait for the connection
 | |
| // to be accepted before returning the session
 | |
| func DialWait(b bool) DialOption {
 | |
| 	return func(o *DialOptions) {
 | |
| 		o.Wait = b
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // NewOptions returns router default options with filled values
 | |
| func NewOptions(opts ...Option) Options {
 | |
| 	options := Options{
 | |
| 		ID:      id.MustNew(),
 | |
| 		Address: DefaultAddress,
 | |
| 		Token:   DefaultToken,
 | |
| 		Logger:  logger.DefaultLogger,
 | |
| 		Meter:   meter.DefaultMeter,
 | |
| 		Tracer:  tracer.DefaultTracer,
 | |
| 	}
 | |
| 	for _, o := range opts {
 | |
| 		o(&options)
 | |
| 	}
 | |
| 	return options
 | |
| }
 | |
| 
 | |
| // Tracer to be used for tracing
 | |
| func Tracer(t tracer.Tracer) Option {
 | |
| 	return func(o *Options) {
 | |
| 		o.Tracer = t
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // Name sets the name
 | |
| func Name(n string) Option {
 | |
| 	return func(o *Options) {
 | |
| 		o.Name = n
 | |
| 	}
 | |
| }
 |