internal

package
v1.8.7 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 19, 2020 License: Apache-2.0 Imports: 26 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// WorkerKey specify where is the Worker should be located in Context
	WorkerKey = "STORE-WORKER-KEY"
)

Variables

This section is empty.

Functions

func ConvertAssign

func ConvertAssign(dest, src interface{}) error

ConvertAssign .

func HandleBusMiddleware

func HandleBusMiddleware(worker Worker)

HandleBusMiddleware .

func InSlice

func InSlice(array interface{}, item interface{}) bool

InSlice .

func NewMap

func NewMap(dst interface{}) error

NewMap .

func NewSlice

func NewSlice(dsc interface{}, len int) error

NewSlice .

func Prepare

func Prepare(f func(Initiator))

Prepare app.BindController or app.BindControllerByParty.

func SliceDelete

func SliceDelete(arr interface{}, indexArr ...int) error

SliceDelete delete the specified subscript element of the array

Types

type Application

type Application struct {
	// IrisApp is an iris application
	IrisApp *iris.Application

	// Database contains a database connection object and an installation function
	Database struct {
		Install func() (db interface{})
		// contains filtered or unexported fields
	}
	// Cache contains a redis client and an installation function
	Cache struct {
		Install func() (client redis.Cmdable)
		// contains filtered or unexported fields
	}

	// Middleware is a set that satisfies the iris handler's definition
	Middleware []context.Handler
	Prometheus *Prometheus
	// ControllerDep TODO
	ControllerDep []interface{}
	// contains filtered or unexported fields
}

Application is the framework's application. Create an application of freedom, by using NewApplication().

func NewApplication

func NewApplication() *Application

NewApplication create an instance of freedom.

func (*Application) AsyncCachePreheat

func (app *Application) AsyncCachePreheat(f func(repo *Repository))

AsyncCachePreheat .

func (*Application) BindController

func (app *Application) BindController(relativePath string, controller interface{}, handlers ...context.Handler)

BindController binds the controller that satisfies the iris's definition to the Application and adds the controller into msgsBus

func (*Application) BindControllerByParty

func (app *Application) BindControllerByParty(party iris.Party, controller interface{})

BindControllerByParty binds the controller by iris's party

func (*Application) BindFactory added in v1.7.11

func (app *Application) BindFactory(f interface{})

BindFactory .

func (*Application) BindInfra

func (app *Application) BindInfra(single bool, com interface{})

BindInfra .

func (*Application) BindRepository

func (app *Application) BindRepository(f interface{})

BindRepository .

func (*Application) BindService

func (app *Application) BindService(f interface{})

BindService .

func (*Application) CachePreheat

func (app *Application) CachePreheat(f func(repo *Repository))

CachePreheat .

func (*Application) CallService added in v1.7.16

func (app *Application) CallService(fun interface{}, worker ...Worker)

CallService .

func (*Application) CreateParty

func (app *Application) CreateParty(relativePath string, handlers ...context.Handler) iris.Party

CreateParty returns a sub-router of iris which may have the same prefix and share same handlers

func (*Application) EventsPath

func (app *Application) EventsPath(infra interface{}) map[string]string

EventsPath .

func (*Application) GetInfra

func (app *Application) GetInfra(ctx iris.Context, com interface{})

GetInfra .

func (*Application) GetService

func (app *Application) GetService(ctx iris.Context, service interface{})

GetService TODO

func (*Application) GetSingleInfra

func (app *Application) GetSingleInfra(com interface{}) bool

GetSingleInfra .

func (*Application) InjectController

func (app *Application) InjectController(f interface{})

InjectController .

func (*Application) InstallBusMiddleware

func (app *Application) InstallBusMiddleware(handle ...BusHandler)

InstallBusMiddleware .

func (*Application) InstallDB added in v1.7.13

func (app *Application) InstallDB(f func() interface{})

InstallDB .

func (*Application) InstallMiddleware

func (app *Application) InstallMiddleware(handler iris.Handler)

InstallMiddleware .

func (*Application) InstallOther

func (app *Application) InstallOther(f func() interface{})

InstallOther .

func (*Application) InstallParty

func (app *Application) InstallParty(relativePath string)

InstallParty installs prefixParty of Application

func (*Application) InstallRedis

func (app *Application) InstallRedis(f func() (client redis.Cmdable))

InstallRedis .

func (*Application) InstallSerializer

func (app *Application) InstallSerializer(marshal func(v interface{}) ([]byte, error), unmarshal func(data []byte, v interface{}) error)

InstallSerializer .

func (*Application) Iris

func (app *Application) Iris() *iris.Application

Iris .

func (*Application) ListenEvent

func (app *Application) ListenEvent(eventName string, objectMethod string, appointInfra ...interface{})

ListenEvent .

func (*Application) Logger

func (app *Application) Logger() *golog.Logger

Logger .

func (*Application) NewAutoTLSRunner added in v1.8.5

func (app *Application) NewAutoTLSRunner(addr string, domain string, email string, configurators ...host.Configurator) iris.Runner

NewAutoTLSRunner can be used as an argument for the `Run` method. It will start the Application's secure server using certifications created on the fly by the "autocert" golang/x package, so localhost may not be working, use it at "production" machine.

Addr should have the form of host:port, i.e mydomain.com:443.

The whitelisted domains are separated by whitespace in "domain" argument, i.e "8tree.net", can be different than "addr". If empty, all hosts are currently allowed. This is not recommended, as it opens a potential attack where clients connect to a server by IP address and pretend to be asking for an incorrect host name. Manager will attempt to obtain a certificate for that host, incorrectly, eventually reaching the CA's rate limit for certificate requests and making it impossible to obtain actual certificates.

For an "e-mail" use a non-public one, letsencrypt needs that for your own security.

Note: `AutoTLS` will start a new server for you which will redirect all http versions to their https, including subdomains as well.

Last argument is optional, it accepts one or more `func(*host.Configurator)` that are being executed on that specific host that this function will create to start the server. Via host configurators you can configure the back-end host supervisor, i.e to add events for shutdown, serve or error. Look at the `ConfigureHost` too.

func (*Application) NewH2CRunner added in v1.8.5

func (app *Application) NewH2CRunner(addr string, configurators ...host.Configurator) iris.Runner

NewH2CRunner .

func (*Application) NewRunner added in v1.8.5

func (app *Application) NewRunner(addr string, configurators ...host.Configurator) iris.Runner

NewRunner can be used as an argument for the `Run` method. It accepts a host address which is used to build a server and a listener which listens on that host and port.

Addr should have the form of host:port, i.e localhost:8080 or :8080.

Second argument is optional, it accepts one or more `func(*host.Configurator)` that are being executed on that specific host that this function will create to start the server. Via host configurators you can configure the back-end host supervisor, i.e to add events for shutdown, serve or error.

func (*Application) NewTLSRunner added in v1.8.5

func (app *Application) NewTLSRunner(addr string, certFile, keyFile string, configurators ...host.Configurator) iris.Runner

NewTLSRunner can be used as an argument for the `Run` method. It will start the Application's secure server.

Use it like you used to use the http.ListenAndServeTLS function.

Addr should have the form of host:port, i.e localhost:443 or :443. CertFile & KeyFile should be filenames with their extensions.

Second argument is optional, it accepts one or more `func(*host.Configurator)` that are being executed on that specific host that this function will create to start the server. Via host configurators you can configure the back-end host supervisor, i.e to add events for shutdown, serve or error. An example of this use case can be found at:

func (*Application) RegisterShutdown added in v1.8.0

func (app *Application) RegisterShutdown(f func())

RegisterShutdown .

func (*Application) Run

func (app *Application) Run(serve iris.Runner, irisConf iris.Configuration)

Run .

func (*Application) Start

func (app *Application) Start(f func(starter Starter))

Start .

type BeginRequest

type BeginRequest interface {
	BeginRequest(Worker Worker)
}

BeginRequest .

type Bus

type Bus struct {
	http.Header
}

Bus message bus, using http header to pass through data.

func (*Bus) Add

func (b *Bus) Add(key, obj string)

Add .

func (*Bus) Del

func (b *Bus) Del(key string)

Del .

func (*Bus) Get

func (b *Bus) Get(key string) string

Get .

func (*Bus) Set

func (b *Bus) Set(key, obj string)

Set .

type BusHandler

type BusHandler func(Worker)

BusHandler The middleware type of the message bus. .

type DomainEvent added in v1.8.6

type DomainEvent interface {
	Topic() string
	SetPrototypes(map[string]interface{})
	GetPrototypes() map[string]interface{}
	Marshal() []byte
	Identity() interface{}
	SetIdentity(identity interface{})
}

DomainEvent .

type Entity

type Entity interface {
	Identity() string
	Worker() Worker
	Marshal() []byte
	AddPubEvent(DomainEvent)
	GetPubEvent() []DomainEvent
	RemoveAllPubEvent()
	AddSubEvent(DomainEvent)
	GetSubEvent() []DomainEvent
	RemoveAllSubEvent()
}

Entity is the entity's father interface.

type EventBus

type EventBus struct {
	// contains filtered or unexported fields
}

EventBus .

func (*EventBus) EventsPath

func (msgBus *EventBus) EventsPath(infra interface{}) (msgs map[string]string)

EventsPath .

type FactoryPool added in v1.7.11

type FactoryPool struct {
	// contains filtered or unexported fields
}

FactoryPool .

type Infra

type Infra struct {
	// contains filtered or unexported fields
}

Infra .

func (*Infra) BeginRequest

func (infra *Infra) BeginRequest(rt Worker)

BeginRequest .子实现多态

func (*Infra) GetSingleInfra added in v1.8.6

func (infra *Infra) GetSingleInfra(com interface{}) bool

GetSingleInfra .

func (*Infra) InjectBaseEntity added in v1.7.5

func (infra *Infra) InjectBaseEntity(entity Entity)

InjectBaseEntity .

func (*Infra) InjectBaseEntitys added in v1.7.5

func (infra *Infra) InjectBaseEntitys(entitys interface{})

InjectBaseEntitys .

func (*Infra) NewH2CRequest

func (infra *Infra) NewH2CRequest(url string, transferBus ...bool) requests.Request

NewH2CRequest transferBus : Whether to pass the context, turned on by default. Typically used for tracking internal services.

func (*Infra) NewHTTPRequest added in v1.8.0

func (infra *Infra) NewHTTPRequest(url string, transferBus ...bool) requests.Request

NewHTTPRequest transferBus : Whether to pass the context, turned on by default. Typically used for tracking internal services.

func (*Infra) Other added in v1.7.5

func (infra *Infra) Other(obj interface{})

Other .

func (*Infra) Redis

func (infra *Infra) Redis() redis.Cmdable

Redis .

func (*Infra) SourceDB added in v1.7.13

func (infra *Infra) SourceDB() (db interface{})

SourceDB .

func (*Infra) Worker

func (infra *Infra) Worker() Worker

Worker .

type InfraPool

type InfraPool struct {
	// contains filtered or unexported fields
}

InfraPool .

func (*InfraPool) GetSingleInfra

func (pool *InfraPool) GetSingleInfra(ptr reflect.Value) bool

GetSingleInfra .

type Initiator

type Initiator interface {
	CreateParty(relativePath string, handlers ...context.Handler) iris.Party
	BindController(relativePath string, controller interface{}, handlers ...context.Handler)
	BindControllerByParty(party iris.Party, controller interface{})
	BindService(f interface{})
	InjectController(f interface{})
	BindRepository(f interface{})
	BindFactory(f interface{})
	GetService(ctx iris.Context, service interface{})
	// BindInfra if is a singleton, com is an object. if is multiton, com is a function
	BindInfra(single bool, com interface{})
	GetInfra(ctx iris.Context, com interface{})
	// Listen Event
	ListenEvent(eventName string, objectMethod string, appointInfra ...interface{})
	Start(f func(starter Starter))
	Iris() *iris.Application
}

Initiator .

type JMap

type JMap struct {
	// contains filtered or unexported fields
}

JMap .

func NewJMap

func NewJMap(openLock ...bool) *JMap

NewJMap .

func (*JMap) AllKey

func (jm *JMap) AllKey() []interface{}

AllKey .

func (*JMap) DelAll

func (jm *JMap) DelAll()

DelAll .

func (*JMap) Exist

func (jm *JMap) Exist(key interface{}) bool

Exist .

func (*JMap) Get

func (jm *JMap) Get(key interface{}, value interface{}) error

Get .

func (*JMap) Interface

func (jm *JMap) Interface(key interface{}) interface{}

Interface .

func (*JMap) Remove

func (jm *JMap) Remove(key interface{})

Remove .

func (*JMap) Set

func (jm *JMap) Set(key interface{}, value interface{})

Set .

func (*JMap) SetOrStore

func (jm *JMap) SetOrStore(key interface{}, value interface{}) (v interface{}, set bool)

SetOrStore .

type Logger

type Logger interface {
	Print(v ...interface{})
	Println(v ...interface{})
	Fatal(v ...interface{})
	Fatalf(format string, args ...interface{})
	Error(v ...interface{})
	Errorf(format string, args ...interface{})
	Warn(v ...interface{})
	Warnf(format string, args ...interface{})
	Info(v ...interface{})
	Infof(format string, args ...interface{})
	Debug(v ...interface{})
	Debugf(format string, args ...interface{})
}

Logger .

type Prometheus

type Prometheus struct {
	// contains filtered or unexported fields
}

Prometheus is a handler that exposes prometheus metrics for the number of requests, the latency and the response size, partitioned by status code, method and HTTP path.

Usage: pass its `ServeHTTP` to a route or globally.

func (*Prometheus) OrmWithLabelValues

func (p *Prometheus) OrmWithLabelValues(model, method string, e error, starTime time.Time)

OrmWithLabelValues .

func (*Prometheus) RegisterCounter

func (p *Prometheus) RegisterCounter(conter *prometheus.CounterVec)

RegisterCounter .

func (*Prometheus) RegisterHistogram

func (p *Prometheus) RegisterHistogram(histogram *prometheus.HistogramVec)

RegisterHistogram .

type Repository

type Repository struct {
	// contains filtered or unexported fields
}

Repository .

func (*Repository) BeginRequest

func (repo *Repository) BeginRequest(rt Worker)

BeginRequest .

func (*Repository) FetchDB added in v1.7.13

func (repo *Repository) FetchDB(db interface{}) error

FetchDB .

func (*Repository) FetchSourceDB added in v1.7.13

func (repo *Repository) FetchSourceDB(db interface{}) error

FetchSourceDB .

func (*Repository) InjectBaseEntity

func (repo *Repository) InjectBaseEntity(entity Entity)

InjectBaseEntity .

func (*Repository) InjectBaseEntitys

func (repo *Repository) InjectBaseEntitys(entitys interface{})

InjectBaseEntitys .

func (*Repository) NewH2CRequest

func (repo *Repository) NewH2CRequest(url string, transferBus ...bool) requests.Request

NewH2CRequest transferBus : Whether to pass the context, turned on by default. Typically used for tracking internal services.

func (*Repository) NewHTTPRequest added in v1.8.0

func (repo *Repository) NewHTTPRequest(url string, transferBus ...bool) requests.Request

NewHTTPRequest transferBus : Whether to pass the context, turned on by default. Typically used for tracking internal services.

func (*Repository) Other

func (repo *Repository) Other(obj interface{})

Other .

func (*Repository) Redis

func (repo *Repository) Redis() redis.Cmdable

Redis .

func (*Repository) Worker

func (repo *Repository) Worker() Worker

Worker .

type RepositoryPool

type RepositoryPool struct {
	// contains filtered or unexported fields
}

RepositoryPool .

type Scanner

type Scanner interface {
	Scan(src interface{}) error
}

Scanner .

type ServicePool

type ServicePool struct {
	// contains filtered or unexported fields
}

ServicePool is domain service pool,a domain service type owns a pool pool key: the reflect.Type of domain service pool value: *sync.Pool

type SingleBoot

type SingleBoot interface {
	Iris() *iris.Application
	//Pass in the current component to get the event path, which can bind the specified component.
	EventsPath(infra interface{}) map[string]string
	//Register for a shutdown event.
	RegisterShutdown(func())
}

SingleBoot singleton startup component.

type Starter

type Starter interface {
	Iris() *iris.Application
	// Asynchronous cache warm-up
	AsyncCachePreheat(f func(repo *Repository))
	// Sync cache warm-up
	CachePreheat(f func(repo *Repository))
	GetSingleInfra(com interface{}) bool
}

Starter .

type Store

type Store struct {
	// contains filtered or unexported fields
}

Store .

func (*Store) Exist

func (s *Store) Exist(key interface{}) bool

Exist .

func (*Store) Get

func (s *Store) Get(key interface{}, value interface{}) error

Get .

func (*Store) Keys

func (s *Store) Keys() []interface{}

Keys .

func (*Store) Remove

func (s *Store) Remove(key interface{})

Remove .

func (*Store) RemoveAll

func (s *Store) RemoveAll()

RemoveAll .

func (*Store) Set

func (s *Store) Set(key interface{}, value interface{})

Set .

func (*Store) SetOrStore

func (s *Store) SetOrStore(key interface{}, value interface{}) (v interface{}, set bool)

SetOrStore .

func (*Store) ToInterface

func (s *Store) ToInterface(key interface{}) interface{}

ToInterface .

func (*Store) ToMap

func (s *Store) ToMap() map[interface{}]interface{}

ToMap .

func (*Store) Values

func (s *Store) Values() []interface{}

Values .

type UnitTest

type UnitTest interface {
	GetService(service interface{})
	GetRepository(repository interface{})
	GetFactory(factory interface{})
	InstallDB(f func() (db interface{}))
	InstallRedis(f func() (client redis.Cmdable))
	Run()
	SetRequest(request *http.Request)
	InjectBaseEntity(entity interface{})
}

UnitTest .

type UnitTestImpl

type UnitTestImpl struct {
	// contains filtered or unexported fields
}

UnitTestImpl .

func (*UnitTestImpl) GetFactory added in v1.7.12

func (u *UnitTestImpl) GetFactory(factory interface{})

GetFactory .

func (*UnitTestImpl) GetRepository

func (u *UnitTestImpl) GetRepository(repository interface{})

GetRepository .

func (*UnitTestImpl) GetService

func (u *UnitTestImpl) GetService(service interface{})

GetService .

func (*UnitTestImpl) InjectBaseEntity

func (u *UnitTestImpl) InjectBaseEntity(entity interface{})

InjectBaseEntity .

func (*UnitTestImpl) InstallDB added in v1.7.13

func (u *UnitTestImpl) InstallDB(f func() (db interface{}))

InstallDB .

func (*UnitTestImpl) InstallRedis

func (u *UnitTestImpl) InstallRedis(f func() (client redis.Cmdable))

InstallRedis .

func (*UnitTestImpl) Run

func (u *UnitTestImpl) Run()

Run .

func (*UnitTestImpl) SetRequest

func (u *UnitTestImpl) SetRequest(request *http.Request)

SetRequest .

type Worker

type Worker interface {

	// IrisContext point to current iris.Context.
	IrisContext() iris.Context

	// Logger returns current Logger.
	Logger() Logger

	// SetLogger set current Logger instead Logger.
	SetLogger(Logger)

	// Store returns an address to current memstore.Store.
	//
	// memstore.Store is a collection of key/value entries. usually use to store metadata produced by freedom runtime.
	Store() *memstore.Store

	// Bus returns an address to current Bus.
	Bus() *Bus

	// Context returns current context.
	Context() stdContext.Context

	// WithContext set current context instead Context.
	WithContext(stdContext.Context)

	// StartTime returns a time since this Worker be created.
	StartTime() time.Time

	// DeferRecycle marks the resource won't be recycled immediately after
	// the request has ended.
	//
	// It is a bit hard to understand what is, here is a simply explain about
	// this.
	//
	// When an HTTP request is incoming, the program will probably serve a bunch
	// of business logic services, DB connections, transactions, Redis caches,
	// and so on. Once those procedures has done, the system should write
	// response and release those resource immediately. In other words, the
	// system should do some clean up procedures for this request. You might
	// thought it is a matter of course. But in special cases, such as goroutine
	// without synchronizing-signal. When all business procedures has completed
	// on business goroutine, and prepare to respond. GC system may be run before
	// the http handler goroutine to respond to the client. Once this opportunity
	// was met, the client will got an "Internal Server Error" or other wrong
	// result, because resource has been recycled by GC before to respond to client.
	DeferRecycle()

	// IsDeferRecycle indicates system need to wait a while for recycle resource.
	IsDeferRecycle() bool

	// Rand returns a rand.Rand act a random number seeder.
	Rand() *rand.Rand
}

Worker describes a global context which use to share the internal component (i.e infrastructure, transaction, logger and so on) with middleware, controller, domain service and etc.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL