api: added some endpoints for dashboard filter to work

This commit is contained in:
yusing
2025-01-20 06:17:18 +08:00
parent bcc7faa8e5
commit 68771ce399
13 changed files with 82 additions and 34 deletions

View File

@@ -90,7 +90,7 @@ func (p *DockerProvider) loadRoutesImpl() (route.Routes, E.Error) {
})
}
routes, err = route.FromEntries(entries)
routes, err = route.FromEntries(p.ShortName(), entries)
errs.Add(err)
return routes, errs.Error()

View File

@@ -32,16 +32,16 @@ func FileProviderImpl(filename string) (ProviderImpl, error) {
return impl, nil
}
func validate(data []byte) (route.Routes, E.Error) {
func validate(provider string, data []byte) (route.Routes, E.Error) {
entries, err := utils.DeserializeYAMLMap[*route.RawEntry](data)
if err != nil {
return route.NewRoutes(), err
}
return route.FromEntries(entries)
return route.FromEntries(provider, entries)
}
func Validate(data []byte) (err E.Error) {
_, err = validate(data)
_, err = validate("", data)
return
}
@@ -69,7 +69,7 @@ func (p *FileProvider) loadRoutesImpl() (route.Routes, E.Error) {
return routes, E.From(err)
}
return validate(data)
return validate(p.ShortName(), data)
}
func (p *FileProvider) NewWatcher() W.Watcher {

View File

@@ -12,6 +12,6 @@ import (
var testAllFieldsYAML []byte
func TestFile(t *testing.T) {
_, err := validate(testAllFieldsYAML)
_, err := validate("", testAllFieldsYAML)
ExpectNoError(t, err)
}

View File

@@ -76,7 +76,7 @@ func NewRoute(raw *RawEntry) (*Route, E.Error) {
}, nil
}
func FromEntries(entries RawEntries) (Routes, E.Error) {
func FromEntries(provider string, entries RawEntries) (Routes, E.Error) {
b := E.NewBuilder("errors in routes")
routes := NewRoutes()
@@ -85,6 +85,7 @@ func FromEntries(entries RawEntries) (Routes, E.Error) {
en = new(RawEntry)
}
en.Alias = alias
en.Provider = provider
if strings.HasPrefix(alias, "x-") { // x properties
return
}

View File

@@ -1,4 +1,4 @@
package routes
package routequery
import (
"strings"
@@ -7,6 +7,7 @@ import (
"github.com/yusing/go-proxy/internal/homepage"
"github.com/yusing/go-proxy/internal/route/entry"
provider "github.com/yusing/go-proxy/internal/route/provider/types"
"github.com/yusing/go-proxy/internal/route/routes"
route "github.com/yusing/go-proxy/internal/route/types"
"github.com/yusing/go-proxy/internal/utils/strutils"
)
@@ -29,18 +30,36 @@ func getHealthInfo(r route.Route) map[string]string {
func HealthMap() map[string]map[string]string {
healthMap := make(map[string]map[string]string)
httpRoutes.RangeAll(func(alias string, r route.HTTPRoute) {
routes.GetHTTPRoutes().RangeAll(func(alias string, r route.HTTPRoute) {
healthMap[alias] = getHealthInfo(r)
})
streamRoutes.RangeAll(func(alias string, r route.StreamRoute) {
routes.GetStreamRoutes().RangeAll(func(alias string, r route.StreamRoute) {
healthMap[alias] = getHealthInfo(r)
})
return healthMap
}
func HomepageConfig(useDefaultCategories bool) homepage.Config {
func HomepageCategories() []string {
check := make(map[string]struct{})
categories := make([]string, 0)
routes.GetHTTPRoutes().RangeAll(func(alias string, r route.HTTPRoute) {
en := r.RawEntry()
if en.Homepage == nil || en.Homepage.Category == "" {
return
}
if _, ok := check[en.Homepage.Category]; ok {
return
}
check[en.Homepage.Category] = struct{}{}
categories = append(categories, en.Homepage.Category)
})
return categories
}
func HomepageConfig(useDefaultCategories bool, categoryFilter, providerFilter string) homepage.Config {
hpCfg := homepage.NewHomePageConfig()
GetHTTPRoutes().RangeAll(func(alias string, r route.HTTPRoute) {
routes.GetHTTPRoutes().RangeAll(func(alias string, r route.HTTPRoute) {
en := r.RawEntry()
item := en.Homepage
if item == nil {
@@ -57,6 +76,11 @@ func HomepageConfig(useDefaultCategories bool) homepage.Config {
}
item.Alias = alias
item.Provider = r.RawEntry().Provider
if providerFilter != "" && item.Provider != providerFilter {
return
}
if item.Name == "" {
item.Name = strutils.Title(
@@ -81,6 +105,10 @@ func HomepageConfig(useDefaultCategories bool) homepage.Config {
}
}
if categoryFilter != "" && item.Category != categoryFilter {
return
}
switch {
case entry.IsDocker(r):
if item.Category == "" {
@@ -113,11 +141,11 @@ func RoutesByAlias(typeFilter ...route.RouteType) map[string]route.Route {
for _, t := range typeFilter {
switch t {
case route.RouteTypeReverseProxy:
GetHTTPRoutes().RangeAll(func(alias string, r route.HTTPRoute) {
routes.GetHTTPRoutes().RangeAll(func(alias string, r route.HTTPRoute) {
rts[alias] = r
})
case route.RouteTypeStream:
GetStreamRoutes().RangeAll(func(alias string, r route.StreamRoute) {
routes.GetStreamRoutes().RangeAll(func(alias string, r route.StreamRoute) {
rts[alias] = r
})
}

View File

@@ -40,6 +40,7 @@ type (
/* Docker only */
Container *docker.Container `json:"container,omitempty"`
Provider string `json:"provider,omitempty"`
finalized bool
}