diff --git a/app/apinto/worker.go b/app/apinto/worker.go index a727d3f1..b41577a9 100644 --- a/app/apinto/worker.go +++ b/app/apinto/worker.go @@ -26,9 +26,9 @@ import ( proxy_rewriteV2 "github.com/eolinker/apinto/drivers/plugins/proxy_rewrite_v2" rate_limiting "github.com/eolinker/apinto/drivers/plugins/rate-limiting" response_rewrite "github.com/eolinker/apinto/drivers/plugins/response-rewrite" - http_router "github.com/eolinker/apinto/v2/router-http-driver" - service_http "github.com/eolinker/apinto/v2/service-http" - template "github.com/eolinker/apinto/v2/template" + http_router "github.com/eolinker/apinto/drivers/router/http-router" + service "github.com/eolinker/apinto/drivers/service" + template "github.com/eolinker/apinto/drivers/template" //upstream_http "github.com/eolinker/apinto/drivers/upstream/upstream-http" plugin_manager "github.com/eolinker/apinto/plugin-manager" "github.com/eolinker/eosc" @@ -49,7 +49,7 @@ func Register(extenderRegister eosc.IExtenderDriverRegister) { template.Register(extenderRegister) // service - service_http.Register(extenderRegister) + service.Register(extenderRegister) ////// upstream //upstream_http.Register(extenderRegister) diff --git a/v2/router-http-driver/complate.go b/drivers/router/http-router/complate.go similarity index 100% rename from v2/router-http-driver/complate.go rename to drivers/router/http-router/complate.go diff --git a/v2/router-http-driver/config.go b/drivers/router/http-router/config.go similarity index 86% rename from v2/router-http-driver/config.go rename to drivers/router/http-router/config.go index feb003aa..d0bf15a7 100644 --- a/v2/router-http-driver/config.go +++ b/drivers/router/http-router/config.go @@ -11,8 +11,8 @@ type Config struct { Host []string `json:"host" yaml:"host" label:"域名"` Path string `json:"location"` Rules []Rule `json:"rules" yaml:"rules" label:"路由规则"` - Service eosc.RequireId `json:"Service" yaml:"Service" skill:"github.com/eolinker/apinto/scheme/http/http.IService" required:"true" label:"目标服务"` - Template eosc.RequireId `json:"template" yaml:"template" skill:"github.com/eolinker/apinto/scheme/http/http.ITemplate" required:"true" label:"插件模版"` + Service eosc.RequireId `json:"Service" yaml:"Service" skill:"github.com/eolinker/apinto/service/service.IService" required:"true" label:"目标服务"` + Template eosc.RequireId `json:"template" yaml:"template" skill:"github.com/eolinker/apinto/template/template.ITemplate" required:"true" label:"插件模版"` Disable bool `json:"disable" yaml:"disable" label:"禁用路由"` Plugins map[string]*plugin.Config `json:"plugins" yaml:"plugins" label:"插件配置"` Retry int `json:"retry" label:"重试次数" yaml:"retry"` diff --git a/v2/router-http-driver/driver.go b/drivers/router/http-router/driver.go similarity index 51% rename from v2/router-http-driver/driver.go rename to drivers/router/http-router/driver.go index 3ca2767c..ba70341f 100644 --- a/v2/router-http-driver/driver.go +++ b/drivers/router/http-router/driver.go @@ -2,15 +2,15 @@ package http_router import ( "fmt" - router_http_manager "github.com/eolinker/apinto/v2/router-http-manager" + "github.com/eolinker/apinto/drivers/router/http-router/manager" + "github.com/eolinker/apinto/service" + "github.com/eolinker/apinto/template" "github.com/eolinker/eosc/utils/config" "reflect" "github.com/eolinker/apinto/plugin" "github.com/eolinker/eosc/common/bean" - service "github.com/eolinker/apinto/v2" - "github.com/eolinker/eosc" ) @@ -18,7 +18,15 @@ import ( type HTTPRouterDriver struct { configType reflect.Type pluginManager plugin.IPluginManager - routerManger router_http_manager.IManger + routerManger manager.IManger +} + +func (h *HTTPRouterDriver) Check(v interface{}, workers map[eosc.RequireId]eosc.IWorker) error { + _, _, _, err := h.check(v, workers) + if err != nil { + return err + } + return nil } //NewHTTPRouter 创建一个http路由驱动 @@ -48,20 +56,31 @@ func (h *HTTPRouterDriver) Create(id, name string, v interface{}, workers map[eo } //check 检查http路由驱动配置 -func (h *HTTPRouterDriver) check(v interface{}, workers map[eosc.RequireId]eosc.IWorker) (*Config, service.IService, error) { +func (h *HTTPRouterDriver) check(v interface{}, workers map[eosc.RequireId]eosc.IWorker) (*Config, service.IService, template.ITemplate, error) { conf, ok := v.(*Config) if !ok { - return nil, nil, fmt.Errorf("get %s but %s %w", config.TypeNameOf(v), config.TypeNameOf(new(Config)), eosc.ErrorRequire) + return nil, nil, nil, fmt.Errorf("get %s but %s %w", config.TypeNameOf(v), config.TypeNameOf(new(Config)), eosc.ErrorRequire) } ser, has := workers[conf.Service] if !has { - return nil, nil, fmt.Errorf("target %w", eosc.ErrorRequire) + return nil, nil, nil, fmt.Errorf("target %s: %w", conf.Service, eosc.ErrorRequire) } target, ok := ser.(service.IService) if !ok { - return nil, nil, fmt.Errorf("target name: %s type of %s,target %w", conf.Service, config.TypeNameOf(ser), eosc.ErrorNotGetSillForRequire) + return nil, nil, nil, fmt.Errorf("target name: %s type of %s,target %w", conf.Service, config.TypeNameOf(ser), eosc.ErrorNotGetSillForRequire) } - return conf, target, nil + var tmp template.ITemplate + if conf.Template != "" { + tp, has := workers[conf.Template] + if !has { + return nil, nil, nil, fmt.Errorf("target %s %w", conf.Template, eosc.ErrorRequire) + } + tmp, ok = tp.(template.ITemplate) + if !ok { + return nil, nil, nil, fmt.Errorf("target name: %s type of %s,target %w", conf.Template, config.TypeNameOf(tp), eosc.ErrorNotGetSillForRequire) + } + } + return conf, target, tmp, nil } diff --git a/v2/router-http-driver/finish.go b/drivers/router/http-router/finish.go similarity index 100% rename from v2/router-http-driver/finish.go rename to drivers/router/http-router/finish.go diff --git a/v2/router-http-driver/handler.go b/drivers/router/http-router/handler.go similarity index 91% rename from v2/router-http-driver/handler.go rename to drivers/router/http-router/handler.go index 7d7e0e3c..aa8ce16e 100644 --- a/v2/router-http-driver/handler.go +++ b/drivers/router/http-router/handler.go @@ -1,7 +1,7 @@ package http_router import ( - service "github.com/eolinker/apinto/v2" + "github.com/eolinker/apinto/service" "github.com/eolinker/eosc/eocontext" ) diff --git a/drivers/router/http-router/manager/append.go b/drivers/router/http-router/manager/append.go new file mode 100644 index 00000000..a4b1a483 --- /dev/null +++ b/drivers/router/http-router/manager/append.go @@ -0,0 +1,5 @@ +package manager + +import http_router "github.com/eolinker/apinto/router/http-router" + +type AppendRule = http_router.AppendRule diff --git a/v2/router-http-manager/data.go b/drivers/router/http-router/manager/data.go similarity index 75% rename from v2/router-http-manager/data.go rename to drivers/router/http-router/manager/data.go index ffa3fc9c..0a74adb9 100644 --- a/v2/router-http-manager/data.go +++ b/drivers/router/http-router/manager/data.go @@ -1,20 +1,22 @@ -package router_http_manager +package manager -import "github.com/eolinker/apinto/v2/router" +import ( + http_router "github.com/eolinker/apinto/router/http-router" +) var _ IRouterData = (*RouterData)(nil) type IRouterData interface { - Set(id string, port int, hosts []string, method []string, path string, append []AppendRule, router router.IRouterHandler) IRouterData + Set(id string, port int, hosts []string, method []string, path string, append []AppendRule, router http_router.IRouterHandler) IRouterData Delete(id string) IRouterData - Parse() (router.IMatcher, error) + Parse() (http_router.IMatcher, error) } type RouterData struct { data map[string]*Router } -func (rs *RouterData) Parse() (router.IMatcher, error) { - root := router.NewRoot() +func (rs *RouterData) Parse() (http_router.IMatcher, error) { + root := http_router.NewRoot() for _, v := range rs.data { err := root.Add(v.Id, v.HttpHandler, v.Port, v.Hosts, v.Method, v.Path, v.Appends) if err != nil { @@ -28,7 +30,7 @@ func (rs *RouterData) set(r *Router) *RouterData { rs.data[r.Id] = r return rs } -func (rs *RouterData) Set(id string, port int, hosts []string, method []string, path string, append []AppendRule, router router.IRouterHandler) IRouterData { +func (rs *RouterData) Set(id string, port int, hosts []string, method []string, path string, append []AppendRule, router http_router.IRouterHandler) IRouterData { r := &Router{ Id: id, Port: port, diff --git a/v2/router-http-manager/endpoint.go b/drivers/router/http-router/manager/endpoint.go similarity index 55% rename from v2/router-http-manager/endpoint.go rename to drivers/router/http-router/manager/endpoint.go index 223fc68e..ee997b89 100644 --- a/v2/router-http-manager/endpoint.go +++ b/drivers/router/http-router/manager/endpoint.go @@ -1,6 +1,6 @@ -package router_http_manager +package manager -import "github.com/eolinker/apinto/v2/router" +import http_router "github.com/eolinker/apinto/router/http-router" type Router struct { Id string @@ -9,5 +9,5 @@ type Router struct { Method []string Path string Appends []AppendRule - HttpHandler router.IRouterHandler + HttpHandler http_router.IRouterHandler } diff --git a/v2/router-http-manager/init.go b/drivers/router/http-router/manager/init.go similarity index 95% rename from v2/router-http-manager/init.go rename to drivers/router/http-router/manager/init.go index f902dd3c..5f9a801c 100644 --- a/v2/router-http-manager/init.go +++ b/drivers/router/http-router/manager/init.go @@ -1,4 +1,4 @@ -package router_http_manager +package manager import ( "github.com/eolinker/apinto/plugin" diff --git a/v2/router-http-manager/manager.go b/drivers/router/http-router/manager/manager.go similarity index 92% rename from v2/router-http-manager/manager.go rename to drivers/router/http-router/manager/manager.go index f423cbd6..7095970c 100644 --- a/v2/router-http-manager/manager.go +++ b/drivers/router/http-router/manager/manager.go @@ -1,10 +1,10 @@ -package router_http_manager +package manager import ( "crypto/tls" "errors" http_context "github.com/eolinker/apinto/node/http-context" - "github.com/eolinker/apinto/v2/router" + http_router "github.com/eolinker/apinto/router/http-router" "github.com/eolinker/eosc/config" eoscContext "github.com/eolinker/eosc/eocontext" http_service "github.com/eolinker/eosc/eocontext/http-context" @@ -19,19 +19,19 @@ var _ IManger = (*Manager)(nil) var notFound = new(NotFoundHandler) type IManger interface { - Set(id string, port int, hosts []string, method []string, path string, append []AppendRule, router router.IRouterHandler) error + Set(id string, port int, hosts []string, method []string, path string, append []AppendRule, router http_router.IRouterHandler) error Delete(id string) } type Manager struct { lock sync.RWMutex - matcher router.IMatcher + matcher http_router.IMatcher routersData IRouterData globalFilters eoscContext.IChain } -func (m *Manager) Set(id string, port int, hosts []string, method []string, path string, append []AppendRule, router router.IRouterHandler) error { +func (m *Manager) Set(id string, port int, hosts []string, method []string, path string, append []AppendRule, router http_router.IRouterHandler) error { m.lock.Lock() defer m.lock.Unlock() routersData := m.routersData.Set(id, port, hosts, method, path, append, router) diff --git a/v2/router-http-driver/register.go b/drivers/router/http-router/register.go similarity index 100% rename from v2/router-http-driver/register.go rename to drivers/router/http-router/register.go diff --git a/v2/router-http-driver/router.go b/drivers/router/http-router/router.go similarity index 78% rename from v2/router-http-driver/router.go rename to drivers/router/http-router/router.go index 0c0d726b..23674faa 100644 --- a/v2/router-http-driver/router.go +++ b/drivers/router/http-router/router.go @@ -1,10 +1,12 @@ package http_router import ( + "github.com/eolinker/apinto/drivers/router/http-router/manager" "github.com/eolinker/apinto/plugin" - service "github.com/eolinker/apinto/v2" - "github.com/eolinker/apinto/v2/router" - router_http_manager "github.com/eolinker/apinto/v2/router-http-manager" + http_router "github.com/eolinker/apinto/router/http-router" + "github.com/eolinker/apinto/service" + "github.com/eolinker/apinto/template" + "github.com/eolinker/eosc" "github.com/eolinker/eosc/eocontext" "time" @@ -17,7 +19,7 @@ type HttpRouter struct { handler *Handler pluginManager plugin.IPluginManager - routerManager router_http_manager.IManger + routerManager manager.IManger } func (h *HttpRouter) Destroy() error { @@ -59,11 +61,11 @@ func (h *HttpRouter) reset(conf interface{}, workers map[eosc.RequireId]eosc.IWo var plugins eocontext.IChain if cfg.Template != "" { templateWorker, has := workers[cfg.Template] - if !has || !templateWorker.CheckSkill(service.TemplateSkill) { + if !has || !templateWorker.CheckSkill(template.TemplateSkill) { return eosc.ErrorNotGetSillForRequire } - template := templateWorker.(service.ITemplate) - plugins = template.Create(h.id, cfg.Plugins) + tp := templateWorker.(template.ITemplate) + plugins = tp.Create(h.id, cfg.Plugins) } else { plugins = h.pluginManager.CreateRequest(h.id, cfg.Plugins) } @@ -79,9 +81,9 @@ func (h *HttpRouter) reset(conf interface{}, workers map[eosc.RequireId]eosc.IWo service: serviceHandler, filters: plugins, } - appendRule := make([]router.AppendRule, 0, len(cfg.Rules)) + appendRule := make([]http_router.AppendRule, 0, len(cfg.Rules)) for _, r := range cfg.Rules { - appendRule = append(appendRule, router.AppendRule{ + appendRule = append(appendRule, http_router.AppendRule{ Type: r.Type, Name: r.Name, Pattern: r.Value, diff --git a/v2/service-http/config.go b/drivers/service/config.go similarity index 98% rename from v2/service-http/config.go rename to drivers/service/config.go index ba0f78d8..997cf457 100644 --- a/v2/service-http/config.go +++ b/drivers/service/config.go @@ -1,4 +1,4 @@ -package service_http +package service import ( "encoding/json" diff --git a/v2/service-http/driver.go b/drivers/service/driver.go similarity index 92% rename from v2/service-http/driver.go rename to drivers/service/driver.go index b518629d..5dc8826a 100644 --- a/v2/service-http/driver.go +++ b/drivers/service/driver.go @@ -1,4 +1,4 @@ -package service_http +package service import ( "github.com/eolinker/eosc/utils/schema" @@ -33,9 +33,9 @@ func (d *driver) Render() interface{} { func (d *driver) Create(id, name string, v interface{}, workers map[eosc.RequireId]eosc.IWorker) (eosc.IWorker, error) { w := &serviceWorker{ - id: id, - name: name, - driver: d.driver, + id: id, + name: name, + driver: d.driver, Service: Service{}, } diff --git a/v2/service-http/factory.go b/drivers/service/factory.go similarity index 98% rename from v2/service-http/factory.go rename to drivers/service/factory.go index 883181ef..8c80ec97 100644 --- a/v2/service-http/factory.go +++ b/drivers/service/factory.go @@ -1,4 +1,4 @@ -package service_http +package service import ( round_robin "github.com/eolinker/apinto/upstream/round-robin" diff --git a/v2/service-http/send_test.go b/drivers/service/send_test.go similarity index 95% rename from v2/service-http/send_test.go rename to drivers/service/send_test.go index a95cc046..2cd08bb8 100644 --- a/v2/service-http/send_test.go +++ b/drivers/service/send_test.go @@ -1,4 +1,4 @@ -package service_http +package service import ( "github.com/eolinker/apinto/upstream/balance" diff --git a/v2/service-http/service.go b/drivers/service/service.go similarity index 98% rename from v2/service-http/service.go rename to drivers/service/service.go index 2e94f387..e7fce610 100644 --- a/v2/service-http/service.go +++ b/drivers/service/service.go @@ -1,4 +1,4 @@ -package service_http +package service import ( "fmt" @@ -86,7 +86,7 @@ func (s *Service) Reset(conf interface{}, workers map[eosc.RequireId]eosc.IWorke s.timeout = time.Duration(data.Timeout) * time.Millisecond s.BalanceHandler = balanceHandler - + return nil } diff --git a/v2/service-http/worker.go b/drivers/service/worker.go similarity index 91% rename from v2/service-http/worker.go rename to drivers/service/worker.go index b0845fd4..0680602d 100644 --- a/v2/service-http/worker.go +++ b/drivers/service/worker.go @@ -1,8 +1,8 @@ -package service_http +package service import ( "errors" - "github.com/eolinker/apinto/v2" + "github.com/eolinker/apinto/service" ) var ( diff --git a/v2/template/config.go b/drivers/template/config.go similarity index 100% rename from v2/template/config.go rename to drivers/template/config.go diff --git a/v2/template/driver.go b/drivers/template/driver.go similarity index 100% rename from v2/template/driver.go rename to drivers/template/driver.go diff --git a/v2/template/factory.go b/drivers/template/factory.go similarity index 100% rename from v2/template/factory.go rename to drivers/template/factory.go diff --git a/v2/template/proxy.go b/drivers/template/proxy.go similarity index 100% rename from v2/template/proxy.go rename to drivers/template/proxy.go diff --git a/v2/template/template.go b/drivers/template/template.go similarity index 84% rename from v2/template/template.go rename to drivers/template/template.go index 05e506ea..c91cb5ba 100644 --- a/v2/template/template.go +++ b/drivers/template/template.go @@ -2,14 +2,12 @@ package template import ( "github.com/eolinker/apinto/plugin" - service "github.com/eolinker/apinto/v2" + "github.com/eolinker/apinto/template" + "github.com/eolinker/eosc" "github.com/eolinker/eosc/eocontext" - "github.com/eolinker/eosc/utils/config" ) -var it service.ITemplate = (*Template)(nil) - type Template struct { id string name string @@ -53,7 +51,7 @@ func (t *Template) Stop() error { } func (t *Template) CheckSkill(skill string) bool { - return skill == config.TypeNameOf(it) + return template.CheckSkill(skill) } func (t *Template) Create(id string, conf map[string]*plugin.Config) eocontext.IChain { diff --git a/plugin/plugin.go b/plugin/plugin.go index ce43d643..3587e82d 100644 --- a/plugin/plugin.go +++ b/plugin/plugin.go @@ -14,8 +14,6 @@ type Config struct { type IPluginManager interface { CreateRequest(id string, conf map[string]*Config) eocontext.IChain GetConfigType(name string) (reflect.Type, bool) - - //CreateUpstream(id string, conf map[string]*Config) IPlugin } func MergeConfig(high, low map[string]*Config) map[string]*Config { diff --git a/professions/professions.go b/professions/professions.go deleted file mode 100644 index cdbf0b69..00000000 --- a/professions/professions.go +++ /dev/null @@ -1,22 +0,0 @@ -package professions - -const ( - SpaceProfession = "professions" -) - -//type Professions struct { -// *professions.Professions -//} -// -//func NewProfessions() (*Professions, error) { -// -// p := &Professions{ -// Professions: professions.NewProfessions(), -// } -// p.Professions.Reset(ApintoProfession()) -// return p, nil -//} -// -//func (p *Professions) Reset([]*eosc.ProfessionConfig) { -// return -//} diff --git a/v2/router/append.go b/router/http-router/append.go similarity index 97% rename from v2/router/append.go rename to router/http-router/append.go index bbf1ee11..4e83a08b 100644 --- a/v2/router/append.go +++ b/router/http-router/append.go @@ -1,4 +1,4 @@ -package router +package http_router import ( "fmt" @@ -8,7 +8,7 @@ import ( "strings" ) -type RuleType string +type RuleType = string const ( HttpHeader RuleType = "header" @@ -33,17 +33,17 @@ func Parse(rules []AppendRule) MatcherChecker { ck, _ := checker.Parse(r.Pattern) switch strings.ToLower(r.Type) { - case "header": + case HttpHeader: rls = append(rls, &HeaderChecker{ name: r.Name, Checker: ck, }) - case "query": + case HttpQuery: rls = append(rls, &QueryChecker{ name: r.Name, Checker: ck, }) - case "cookie": + case HttpCookie: rls = append(rls, &CookieChecker{ name: r.Name, Checker: ck, diff --git a/v2/router/matcher.go b/router/http-router/matcher.go similarity index 99% rename from v2/router/matcher.go rename to router/http-router/matcher.go index 9f7f4921..930efe04 100644 --- a/v2/router/matcher.go +++ b/router/http-router/matcher.go @@ -1,4 +1,4 @@ -package router +package http_router import ( "github.com/eolinker/apinto/checker" diff --git a/v2/router/router.go b/router/http-router/router.go similarity index 93% rename from v2/router/router.go rename to router/http-router/router.go index 7eb8b9f4..982f9ddd 100644 --- a/v2/router/router.go +++ b/router/http-router/router.go @@ -1,4 +1,4 @@ -package router +package http_router import ( eoscContext "github.com/eolinker/eosc/eocontext" diff --git a/v2/router/rule.go b/router/http-router/rule.go similarity index 99% rename from v2/router/rule.go rename to router/http-router/rule.go index a654a183..b17e3871 100644 --- a/v2/router/rule.go +++ b/router/http-router/rule.go @@ -1,4 +1,4 @@ -package router +package http_router import ( "errors" diff --git a/v2/router/rule_test.go b/router/http-router/rule_test.go similarity index 98% rename from v2/router/rule_test.go rename to router/http-router/rule_test.go index 9f3495e3..cb0cf551 100644 --- a/v2/router/rule_test.go +++ b/router/http-router/rule_test.go @@ -1,4 +1,4 @@ -package router +package http_router import ( "testing" diff --git a/v2/service.go b/service/service.go similarity index 63% rename from v2/service.go rename to service/service.go index e2430b9e..f236290e 100644 --- a/v2/service.go +++ b/service/service.go @@ -1,22 +1,19 @@ package service import ( - "github.com/eolinker/apinto/plugin" "github.com/eolinker/eosc" eoscContext "github.com/eolinker/eosc/eocontext" "github.com/eolinker/eosc/utils/config" ) var ( - ServiceSkill string - TemplateSkill string + ServiceSkill string ) func init() { var s IService ServiceSkill = config.TypeNameOf(&s) - var t ITemplate - TemplateSkill = config.TypeNameOf(&t) + } type IService interface { @@ -25,11 +22,6 @@ type IService interface { eoscContext.BalanceHandler } -type ITemplate interface { - eosc.IWorker - Create(id string, conf map[string]*plugin.Config) eoscContext.IChain -} - //CheckSkill 检查目标技能是否符合 func CheckSkill(skill string) bool { return skill == ServiceSkill diff --git a/v2/router-http-manager/append.go b/v2/router-http-manager/append.go deleted file mode 100644 index 1b078756..00000000 --- a/v2/router-http-manager/append.go +++ /dev/null @@ -1,5 +0,0 @@ -package router_http_manager - -import "github.com/eolinker/apinto/v2/router" - -type AppendRule = router.AppendRule diff --git a/v2/router-http-manager/routers.go b/v2/router-http-manager/routers.go deleted file mode 100644 index 1ed0e5d2..00000000 --- a/v2/router-http-manager/routers.go +++ /dev/null @@ -1,14 +0,0 @@ -package router_http_manager - -import ( - "github.com/eolinker/apinto/v2/router" - http_service "github.com/eolinker/eosc/eocontext/http-context" -) - -type Routers struct { -} - -func (r *Routers) Match(port int, request http_service.IRequestReader) (router.IRouterHandler, bool) { - - return nil, false -}