mirror of
https://github.com/yusing/godoxy.git
synced 2026-04-23 09:18:51 +02:00
refactor(routes): centralize route existence checking
- Removed All routes pool
This commit is contained in:
@@ -97,10 +97,6 @@ func (s *FileServer) Start(parent task.Parent) gperr.Error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := checkExists(s); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
routes.HTTP.Add(s)
|
routes.HTTP.Add(s)
|
||||||
s.task.OnFinished("remove_route_from_http", func() {
|
s.task.OnFinished("remove_route_from_http", func() {
|
||||||
routes.HTTP.Del(s)
|
routes.HTTP.Del(s)
|
||||||
|
|||||||
@@ -136,10 +136,6 @@ func (r *ReveseProxyRoute) Start(parent task.Parent) gperr.Error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := checkExists(r); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
if r.UseLoadBalance() {
|
if r.UseLoadBalance() {
|
||||||
r.addToLoadBalancer(parent)
|
r.addToLoadBalancer(parent)
|
||||||
} else {
|
} else {
|
||||||
@@ -171,7 +167,7 @@ func (r *ReveseProxyRoute) addToLoadBalancer(parent task.Parent) {
|
|||||||
linked = l.(*ReveseProxyRoute)
|
linked = l.(*ReveseProxyRoute)
|
||||||
lb = linked.loadBalancer
|
lb = linked.loadBalancer
|
||||||
lb.UpdateConfigIfNeeded(cfg)
|
lb.UpdateConfigIfNeeded(cfg)
|
||||||
if linked.Homepage == nil {
|
if linked.Homepage.Name == "" {
|
||||||
linked.Homepage = r.Homepage
|
linked.Homepage = r.Homepage
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -187,10 +183,8 @@ func (r *ReveseProxyRoute) addToLoadBalancer(parent task.Parent) {
|
|||||||
}
|
}
|
||||||
linked.SetHealthMonitor(lb)
|
linked.SetHealthMonitor(lb)
|
||||||
routes.HTTP.AddKey(cfg.Link, linked)
|
routes.HTTP.AddKey(cfg.Link, linked)
|
||||||
routes.All.AddKey(cfg.Link, linked)
|
|
||||||
r.task.OnFinished("remove_loadbalancer_route", func() {
|
r.task.OnFinished("remove_loadbalancer_route", func() {
|
||||||
routes.HTTP.DelKey(cfg.Link)
|
routes.HTTP.DelKey(cfg.Link)
|
||||||
routes.All.DelKey(cfg.Link)
|
|
||||||
})
|
})
|
||||||
lbLock.Unlock()
|
lbLock.Unlock()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -291,6 +291,13 @@ func (r *Route) start(parent task.Parent) gperr.Error {
|
|||||||
}
|
}
|
||||||
defer close(r.started)
|
defer close(r.started)
|
||||||
|
|
||||||
|
// skip checking for excluded routes
|
||||||
|
if !r.ShouldExclude() {
|
||||||
|
if err := checkExists(r); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if err := r.impl.Start(parent); err != nil {
|
if err := r.impl.Start(parent); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,16 +8,15 @@ import (
|
|||||||
var (
|
var (
|
||||||
HTTP = pool.New[types.HTTPRoute]("http_routes")
|
HTTP = pool.New[types.HTTPRoute]("http_routes")
|
||||||
Stream = pool.New[types.StreamRoute]("stream_routes")
|
Stream = pool.New[types.StreamRoute]("stream_routes")
|
||||||
// All is a pool of all routes, including HTTP, Stream routes and also excluded routes.
|
|
||||||
All = pool.New[types.Route]("all_routes")
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
|
||||||
All.DisableLog()
|
|
||||||
}
|
|
||||||
|
|
||||||
func Iter(yield func(r types.Route) bool) {
|
func Iter(yield func(r types.Route) bool) {
|
||||||
for _, r := range All.Iter {
|
for _, r := range HTTP.Iter {
|
||||||
|
if !yield(r) {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for _, r := range Stream.Iter {
|
||||||
if !yield(r) {
|
if !yield(r) {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
@@ -25,7 +24,12 @@ func Iter(yield func(r types.Route) bool) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func IterKV(yield func(alias string, r types.Route) bool) {
|
func IterKV(yield func(alias string, r types.Route) bool) {
|
||||||
for k, r := range All.Iter {
|
for k, r := range HTTP.Iter {
|
||||||
|
if !yield(k, r) {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for k, r := range Stream.Iter {
|
||||||
if !yield(k, r) {
|
if !yield(k, r) {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
@@ -33,13 +37,12 @@ func IterKV(yield func(alias string, r types.Route) bool) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func NumRoutes() int {
|
func NumRoutes() int {
|
||||||
return All.Size()
|
return HTTP.Size() + Stream.Size()
|
||||||
}
|
}
|
||||||
|
|
||||||
func Clear() {
|
func Clear() {
|
||||||
HTTP.Clear()
|
HTTP.Clear()
|
||||||
Stream.Clear()
|
Stream.Clear()
|
||||||
All.Clear()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetHTTPRouteOrExact(alias, host string) (types.HTTPRoute, bool) {
|
func GetHTTPRouteOrExact(alias, host string) (types.HTTPRoute, bool) {
|
||||||
@@ -52,5 +55,11 @@ func GetHTTPRouteOrExact(alias, host string) (types.HTTPRoute, bool) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func Get(alias string) (types.Route, bool) {
|
func Get(alias string) (types.Route, bool) {
|
||||||
return All.Get(alias)
|
if r, ok := HTTP.Get(alias); ok {
|
||||||
|
return r, true
|
||||||
|
}
|
||||||
|
if r, ok := Stream.Get(alias); ok {
|
||||||
|
return r, true
|
||||||
|
}
|
||||||
|
return nil, false
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -73,10 +73,6 @@ func (r *StreamRoute) Start(parent task.Parent) gperr.Error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := checkExists(r); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
r.ListenAndServe(r.task.Context(), nil, nil)
|
r.ListenAndServe(r.task.Context(), nil, nil)
|
||||||
r.l = r.l.With().Stringer("rurl", r.ProxyURL).Stringer("laddr", r.LocalAddr()).Logger()
|
r.l = r.l.With().Stringer("rurl", r.ProxyURL).Stringer("laddr", r.LocalAddr()).Logger()
|
||||||
r.l.Info().Msg("stream started")
|
r.l.Info().Msg("stream started")
|
||||||
|
|||||||
Reference in New Issue
Block a user