mirror of
https://github.com/yusing/godoxy.git
synced 2025-05-20 20:52:33 +02:00
62 lines
1.4 KiB
Go
62 lines
1.4 KiB
Go
package entry
|
|
|
|
import (
|
|
E "github.com/yusing/go-proxy/internal/error"
|
|
route "github.com/yusing/go-proxy/internal/route/types"
|
|
)
|
|
|
|
type Entry = route.Entry
|
|
|
|
func ValidateEntry(m *route.RawEntry) (Entry, E.Error) {
|
|
scheme, err := route.NewScheme(m.Scheme)
|
|
if err != nil {
|
|
return nil, E.From(err)
|
|
}
|
|
|
|
var entry Entry
|
|
errs := E.NewBuilder("entry validation failed")
|
|
if scheme.IsStream() {
|
|
entry = validateStreamEntry(m, errs)
|
|
} else {
|
|
entry = validateRPEntry(m, scheme, errs)
|
|
}
|
|
if errs.HasError() {
|
|
return nil, errs.Error()
|
|
}
|
|
if !UseHealthCheck(entry) && (UseLoadBalance(entry) || UseIdleWatcher(entry)) {
|
|
return nil, E.New("healthCheck.disable cannot be true when loadbalancer or idlewatcher is enabled")
|
|
}
|
|
return entry, nil
|
|
}
|
|
|
|
func IsDocker(entry Entry) bool {
|
|
iw := entry.IdlewatcherConfig()
|
|
return iw != nil && iw.ContainerID != ""
|
|
}
|
|
|
|
func IsZeroPort(entry Entry) bool {
|
|
return entry.TargetURL().Port() == "0"
|
|
}
|
|
|
|
func ShouldNotServe(entry Entry) bool {
|
|
return IsZeroPort(entry) && !UseIdleWatcher(entry)
|
|
}
|
|
|
|
func UseLoadBalance(entry Entry) bool {
|
|
lb := entry.RawEntry().LoadBalance
|
|
return lb != nil && lb.Link != ""
|
|
}
|
|
|
|
func UseIdleWatcher(entry Entry) bool {
|
|
iw := entry.IdlewatcherConfig()
|
|
return iw != nil && iw.IdleTimeout > 0
|
|
}
|
|
|
|
func UseHealthCheck(entry Entry) bool {
|
|
hc := entry.RawEntry().HealthCheck
|
|
return hc != nil && !hc.Disable
|
|
}
|
|
|
|
func UseAccessLog(entry Entry) bool {
|
|
return entry.RawEntry().AccessLog != nil
|
|
}
|