Documentation ¶
Overview ¶
Package gravita implements the LambdaUDF dispatcher.
a simple usecase:
```
mux := gravita.NewMux() mux.HandleFunc("*", func(ctx context.Context, args [][]interface{}) ([]interface{}, error) { ret := make([]interface{}, 0, len(args)) // anything do return ret, nil }) lambda.Start(mux.HandleLambdaEvent)
````
more complex usecase ```
mux := gravita.NewMux() mux.HandleFunc("*func1*", func(ctx context.Context, args [][]interface{}) ([]interface{}, error) { ret := make([]interface{}, 0, len(args)) // anything do return ret, nil }) mux.HandleFunc("*func2*", func(ctx context.Context, args [][]interface{}) ([]interface{}, error) { ret := make([]interface{}, 0, len(args)) // anything do return ret, nil }) lambda.Start(mux.HandleLambdaEvent)
````
Index ¶
- type BatchProcessHandler
- type Entry
- func (e *Entry) Cluster(cluster string) *Entry
- func (e *Entry) ClusterRegexp(expr string) *Entry
- func (e *Entry) Database(database string) *Entry
- func (e *Entry) DatabaseRegexp(expr string) *Entry
- func (e *Entry) ExternalFunction(exFunc string) *Entry
- func (e *Entry) ExternalFunctionRegexp(expr string) *Entry
- func (e *Entry) GetHandler() LambdaUDFHandler
- func (e *Entry) Handler(handler LambdaUDFHandler) *Entry
- func (e *Entry) HandlerFunc(f func(context.Context, [][]interface{}) ([]interface{}, error)) *Entry
- func (e *Entry) Match(event *LambdaUDFEvent) bool
- func (e *Entry) User(user string) *Entry
- func (e *Entry) UserRegexp(expr string) *Entry
- type LambdaUDFEvent
- type LambdaUDFEventMetadata
- type LambdaUDFHandler
- type LambdaUDFHandlerFunc
- type LambdaUDFRowHandler
- type LambdaUDFRowHandlerFunc
- type Mux
- func (mux *Mux) Handle(exFunc string, handler LambdaUDFHandler) *Entry
- func (mux *Mux) HandleFunc(exFunc string, f func(context.Context, [][]interface{}) ([]interface{}, error)) *Entry
- func (mux *Mux) HandleLambdaEvent(ctx context.Context, event *LambdaUDFEvent) (jsonStr string, funcErr error)
- func (mux *Mux) HandleRow(exFunc string, handler LambdaUDFRowHandler) *Entry
- func (mux *Mux) HandleRowFunc(exFunc string, f func(context.Context, []interface{}) (interface{}, error)) *Entry
- func (mux *Mux) NewEntry() *Entry
- type ParallelRowProcessHandler
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type BatchProcessHandler ¶
type BatchProcessHandler struct {
// contains filtered or unexported fields
}
func NewBatchProcessHandler ¶
func NewBatchProcessHandler(batchSize int, handler LambdaUDFHandler) *BatchProcessHandler
func (*BatchProcessHandler) BatchSize ¶
func (h *BatchProcessHandler) BatchSize(s int)
func (*BatchProcessHandler) Distinct ¶
func (h *BatchProcessHandler) Distinct(enable bool)
func (*BatchProcessHandler) ExecuteUDF ¶
func (h *BatchProcessHandler) ExecuteUDF(ctx context.Context, args [][]interface{}) ([]interface{}, error)
func (*BatchProcessHandler) MaxBatchCount ¶
func (h *BatchProcessHandler) MaxBatchCount(m int)
type Entry ¶
type Entry struct {
// contains filtered or unexported fields
}
Entry represents a single LambdaUDFHandler matching rule in Mux
func (*Entry) ClusterRegexp ¶
ClusterRegexp matches a LambdaUDF cluster name with a regular expression
func (*Entry) DatabaseRegexp ¶
DatabaseRegexp matches a LambdaUDF database name with a regular expression
func (*Entry) ExternalFunction ¶
ExternalFunction matches by LambdaUDF function name. You can use * as a wildcard
func (*Entry) ExternalFunctionRegexp ¶
ExternalFunctionRegexp matches a LambdaUDF function name with a regular expression
func (*Entry) GetHandler ¶
func (e *Entry) GetHandler() LambdaUDFHandler
GetHandler returns the Handler registered in the Entry
func (*Entry) Handler ¶
func (e *Entry) Handler(handler LambdaUDFHandler) *Entry
Handler registers a LambdaUDFHandler with Entry
func (*Entry) HandlerFunc ¶
HandlerFunc registers a function that is the entity of LambdaUDF in Entry
func (*Entry) Match ¶
func (e *Entry) Match(event *LambdaUDFEvent) bool
Match determines if the given event matches this Entry
func (*Entry) UserRegexp ¶
UserRegexp matches a LambdaUDF user name with a regular expression
type LambdaUDFEvent ¶
type LambdaUDFEvent struct { LambdaUDFEventMetadata `json:",inline"` Arguments [][]interface{} `json:"arguments,omitempty"` }
LambdaUDFEvent represents the Event parameter when Redshift invokes as LambdaUDF see also: https://docs.aws.amazon.com/redshift/latest/dg/udf-creating-a-lambda-sql-udf.html
type LambdaUDFEventMetadata ¶
type LambdaUDFEventMetadata struct { RequestID string `json:"request_id,omitempty"` Cluster string `json:"cluster,omitempty"` User string `json:"user,omitempty"` Database string `json:"database,omitempty"` ExternalFunction string `json:"external_function,omitempty"` QueryID int `json:"query_id,omitempty"` NumRecords int `json:"num_records,omitempty"` }
LambdaUDFEventMetadata represents the metadata of an Invoke in a LambdaUDFEvent
func Metadata ¶
func Metadata(ctx context.Context) *LambdaUDFEventMetadata
Metadata retrieves LambdaUDFEvent metadata from Context
type LambdaUDFHandler ¶
type LambdaUDFHandler interface {
ExecuteUDF(context.Context, [][]interface{}) ([]interface{}, error)
}
LambdaUDFHandler is an interface for handling the actual state of LambdaUDF
type LambdaUDFHandlerFunc ¶
LambdaUDFHandlerFunc is a type of function that satisfies LambdaUDFHandler
func (LambdaUDFHandlerFunc) ExecuteUDF ¶
func (f LambdaUDFHandlerFunc) ExecuteUDF(ctx context.Context, args [][]interface{}) ([]interface{}, error)
type LambdaUDFRowHandler ¶
type LambdaUDFRowHandler interface {
ExecuteUDFRow(context.Context, []interface{}) (interface{}, error)
}
LambdaUDFRowHandler is an interface for handling the actual state of LambdaUDF Row
type LambdaUDFRowHandlerFunc ¶
LambdaUDFRowHandlerFunc is a type of function that satisfies LambdaUDFRowHandler
func (LambdaUDFRowHandlerFunc) ExecuteUDFRow ¶
func (f LambdaUDFRowHandlerFunc) ExecuteUDFRow(ctx context.Context, args []interface{}) (interface{}, error)
type Mux ¶
type Mux struct { NotMatchHandler LambdaUDFHandler // contains filtered or unexported fields }
func (*Mux) HandleFunc ¶
func (*Mux) HandleLambdaEvent ¶
func (*Mux) HandleRow ¶
func (mux *Mux) HandleRow(exFunc string, handler LambdaUDFRowHandler) *Entry
func (*Mux) HandleRowFunc ¶
type ParallelRowProcessHandler ¶
type ParallelRowProcessHandler struct {
RowHandler LambdaUDFRowHandler
}
ParallelRowProcessHandler is a LambdaUDFHandler that can be used when each row is independent and processes rows in parallel
func (ParallelRowProcessHandler) ExecuteUDF ¶
func (h ParallelRowProcessHandler) ExecuteUDF(ctx context.Context, args [][]interface{}) ([]interface{}, error)