Skip to content

Commit cc5be66

Browse files
committed
feat: add RS middleware for plugins
1 parent 1694b7c commit cc5be66

9 files changed

Lines changed: 83 additions & 281 deletions

File tree

main.go

Lines changed: 34 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -172,24 +172,30 @@ func main() {
172172
// ES v7 and v6 clients
173173
util.NewClient()
174174
// map of specific plugins
175-
sequencedPlugins := []string{"rules.so", "functions.so", "querytranslate.so", "analytics.so"}
175+
sequencedPlugins := []string{"rules.so", "functions.so", "analytics.so"}
176176
sequencedPluginsByPath := make(map[string]string)
177177

178-
var elasticSearchPath string
178+
var elasticSearchPath, reactiveSearchPath string
179179
elasticSearchMiddleware := make([]middleware.Middleware, 0)
180+
reactiveSearchMiddleware := make([]middleware.Middleware, 0)
180181
err := filepath.Walk(pluginDir, func(path string, info os.FileInfo, err error) error {
181182
if err != nil {
182183
return err
183184
}
184185
if !info.IsDir() && filepath.Ext(info.Name()) == ".so" && info.Name() != "elasticsearch.so" {
185-
if util.IsExists(info.Name(), sequencedPlugins) {
186-
sequencedPluginsByPath[info.Name()] = path
187-
} else {
188-
mw, err1 := LoadPluginFromFile(router, path)
189-
if err1 != nil {
190-
return err1
186+
if info.Name() != "querytranslate.so" {
187+
if util.IsExists(info.Name(), sequencedPlugins) {
188+
sequencedPluginsByPath[info.Name()] = path
189+
} else {
190+
plugin, err1 := LoadPluginFromFile(router, path)
191+
if err1 != nil {
192+
return err1
193+
}
194+
reactiveSearchMiddleware = append(reactiveSearchMiddleware, plugin.RSMiddleware()...)
195+
elasticSearchMiddleware = append(elasticSearchMiddleware, plugin.ESMiddleware()...)
191196
}
192-
elasticSearchMiddleware = append(elasticSearchMiddleware, mw...)
197+
} else {
198+
reactiveSearchPath = path
193199
}
194200
} else if info.Name() == "elasticsearch.so" {
195201
elasticSearchPath = path
@@ -200,14 +206,19 @@ func main() {
200206
for _, pluginName := range sequencedPlugins {
201207
path, _ := sequencedPluginsByPath[pluginName]
202208
if path != "" {
203-
mw, err := LoadPluginFromFile(router, path)
209+
plugin, err := LoadPluginFromFile(router, path)
204210
if err != nil {
205211
log.Fatal("error loading plugins: ", err)
206212
}
207-
elasticSearchMiddleware = append(elasticSearchMiddleware, mw...)
213+
elasticSearchMiddleware = append(elasticSearchMiddleware, plugin.ESMiddleware()...)
214+
reactiveSearchMiddleware = append(reactiveSearchMiddleware, plugin.RSMiddleware()...)
208215
}
209216
}
210217
LoadESPluginFromFile(router, elasticSearchPath, elasticSearchMiddleware)
218+
// Load ReactiveSearch plugin
219+
if reactiveSearchPath != "" {
220+
LoadESPluginFromFile(router, reactiveSearchPath, reactiveSearchMiddleware)
221+
}
211222
if err != nil {
212223
log.Fatal("error loading plugins: ", err)
213224
}
@@ -242,7 +253,7 @@ func LoadPIFromFile(path string) (plugin.Symbol, error) {
242253
}
243254

244255
// LoadPluginFromFile loads a plugin at the given location
245-
func LoadPluginFromFile(router *mux.Router, path string) ([]middleware.Middleware, error) {
256+
func LoadPluginFromFile(router *mux.Router, path string) (plugins.Plugin, error) {
246257
pi, err2 := LoadPIFromFile(path)
247258
if err2 != nil {
248259
return nil, err2
@@ -253,7 +264,7 @@ func LoadPluginFromFile(router *mux.Router, path string) ([]middleware.Middlewar
253264
if err3 != nil {
254265
return nil, err3
255266
}
256-
return p.ESMiddleware(), nil
267+
return p, nil
257268
}
258269

259270
func LoadESPluginFromFile(router *mux.Router, path string, mw []middleware.Middleware) error {
@@ -266,6 +277,16 @@ func LoadESPluginFromFile(router *mux.Router, path string, mw []middleware.Middl
266277
return plugins.LoadESPlugin(router, p, mw)
267278
}
268279

280+
func LoadRSPluginFromFile(router *mux.Router, path string, mw []middleware.Middleware) error {
281+
pi, err2 := LoadPIFromFile(path)
282+
if err2 != nil {
283+
return err2
284+
}
285+
var p plugins.RSPlugin
286+
p = *pi.(*plugins.RSPlugin)
287+
return plugins.LoadRSPlugin(router, p, mw)
288+
}
289+
269290
// LoadEnvFromFile loads env vars from envFile. Envs in the file
270291
// should be in KEY=VALUE format.
271292
func LoadEnvFromFile(envFile string) error {

plugins/auth/auth.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,3 +135,8 @@ func (a *Auth) Routes() []plugins.Route {
135135
func (a *Auth) ESMiddleware() []middleware.Middleware {
136136
return make([]middleware.Middleware, 0)
137137
}
138+
139+
// Default empty middleware array function
140+
func (a *Auth) RSMiddleware() []middleware.Middleware {
141+
return make([]middleware.Middleware, 0)
142+
}

plugins/auth/main/auth.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package main
22

3-
import "github.com/appbaseio/arc/plugins/auth"
4-
import "github.com/appbaseio/arc/plugins"
3+
import (
4+
"github.com/appbaseio/arc/plugins"
5+
"github.com/appbaseio/arc/plugins/auth"
6+
)
57

68
var PluginInstance plugins.Plugin = auth.Instance()

plugins/logs/logs.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,3 +73,8 @@ func (l *Logs) Routes() []plugins.Route {
7373
func (l *Logs) ESMiddleware() []middleware.Middleware {
7474
return make([]middleware.Middleware, 0)
7575
}
76+
77+
// Default empty middleware array function
78+
func (a *Logs) RSMiddleware() []middleware.Middleware {
79+
return make([]middleware.Middleware, 0)
80+
}

plugins/permissions/permissions.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,3 +65,8 @@ func (p *permissions) Routes() []plugins.Route {
6565
func (p *permissions) ESMiddleware() []middleware.Middleware {
6666
return make([]middleware.Middleware, 0)
6767
}
68+
69+
// Default empty middleware array function
70+
func (p *permissions) RSMiddleware() []middleware.Middleware {
71+
return make([]middleware.Middleware, 0)
72+
}

plugins/registry.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,9 @@ type Plugin interface {
3939

4040
// The plugin's elastic search middleware, if any.
4141
ESMiddleware() []middleware.Middleware
42+
43+
// The plugin's reactive search middleware, if any.
44+
RSMiddleware() []middleware.Middleware
4245
}
4346

4447
// ElasticSearchPlugin holds the plugin for ES
@@ -49,6 +52,14 @@ type ESPlugin interface {
4952
InitFunc(mw []middleware.Middleware) error
5053
}
5154

55+
// ReactiveSearchPlugin holds the plugin for ReactiveSearch API
56+
type RSPlugin interface {
57+
nameRoutes
58+
59+
// mw takes a array of middleware to be intialized by ES Plugin
60+
InitFunc(mw []middleware.Middleware) error
61+
}
62+
5263
// RegisterPlugin plugs in plugin. All plugins must have a name:
5364
// preferably lowercase and one word. The name of the plugin must
5465
// be unique. A plugin, however, may not define any routes, but
@@ -86,6 +97,15 @@ func LoadESPlugin(router *mux.Router, p ESPlugin, mw []middleware.Middleware) er
8697
return loadRoutes(router, p)
8798
}
8899

100+
func LoadRSPlugin(router *mux.Router, p RSPlugin, mw []middleware.Middleware) error {
101+
log.Println(logTag, ": Initializing plugin:", p.Name())
102+
err := p.InitFunc(mw)
103+
if err != nil {
104+
return err
105+
}
106+
return loadRoutes(router, p)
107+
}
108+
89109
// loadRoutes registers the routes to the router that are associated with
90110
// that plugin.
91111
func loadRoutes(router *mux.Router, p nameRoutes) error {

plugins/reindexer/reindexer.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,3 +43,8 @@ func (rx *reindexer) Routes() []plugins.Route {
4343
func (rx *reindexer) ESMiddleware() []middleware.Middleware {
4444
return make([]middleware.Middleware, 0)
4545
}
46+
47+
// Default empty middleware array function
48+
func (rx *reindexer) RSMiddleware() []middleware.Middleware {
49+
return make([]middleware.Middleware, 0)
50+
}

plugins/users/users.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,3 +67,8 @@ func (u *Users) Routes() []plugins.Route {
6767
func (u *Users) ESMiddleware() []middleware.Middleware {
6868
return make([]middleware.Middleware, 0)
6969
}
70+
71+
// Default empty middleware array function
72+
func (u *Users) RSMiddleware() []middleware.Middleware {
73+
return make([]middleware.Middleware, 0)
74+
}

0 commit comments

Comments
 (0)