From 56b778f19c5553de280436a1875ae2dae38d137f Mon Sep 17 00:00:00 2001 From: yusing Date: Tue, 15 Oct 2024 16:23:46 +0800 Subject: [PATCH] fixed json output for ls-routes and its API and homepage api --- internal/docker/idlewatcher/waker.go | 7 ++++++- internal/net/types/url.go | 7 +++++-- internal/proxy/entry.go | 2 +- internal/route/http.go | 2 +- internal/watcher/health/json.go | 17 ++++++++++------- 5 files changed, 23 insertions(+), 12 deletions(-) diff --git a/internal/docker/idlewatcher/waker.go b/internal/docker/idlewatcher/waker.go index fa0c4e4..c0430d0 100644 --- a/internal/docker/idlewatcher/waker.go +++ b/internal/docker/idlewatcher/waker.go @@ -8,6 +8,7 @@ import ( "github.com/sirupsen/logrus" gphttp "github.com/yusing/go-proxy/internal/net/http" + "github.com/yusing/go-proxy/internal/net/types" "github.com/yusing/go-proxy/internal/watcher/health" ) @@ -72,6 +73,10 @@ func (w *Waker) Uptime() time.Duration { } func (w *Waker) MarshalJSON() ([]byte, error) { + var url types.URL + if w.URL.String() != "http://:0" { + url = w.URL + } return (&health.JSONRepresentation{ Name: w.Name(), Status: w.Status(), @@ -79,7 +84,7 @@ func (w *Waker) MarshalJSON() ([]byte, error) { Interval: w.IdleTimeout, Timeout: w.WakeTimeout, }, - URL: w.URL, + URL: url, }).MarshalJSON() } diff --git a/internal/net/types/url.go b/internal/net/types/url.go index e0d09cb..2d51956 100644 --- a/internal/net/types/url.go +++ b/internal/net/types/url.go @@ -27,8 +27,11 @@ func (u URL) String() string { return u.URL.String() } -func (u URL) MarshalText() (text []byte, err error) { - return []byte(u.String()), nil +func (u URL) MarshalJSON() (text []byte, err error) { + if u.URL == nil { + return []byte("null"), nil + } + return []byte("\"" + u.URL.String() + "\""), nil } func (u URL) Equals(other *URL) bool { diff --git a/internal/proxy/entry.go b/internal/proxy/entry.go index 08979e0..6801c06 100644 --- a/internal/proxy/entry.go +++ b/internal/proxy/entry.go @@ -54,7 +54,7 @@ func (rp *ReverseProxyEntry) UseIdleWatcher() bool { } func (rp *ReverseProxyEntry) UseLoadBalance() bool { - return rp.LoadBalance.Link != "" + return rp.LoadBalance != nil && rp.LoadBalance.Link != "" } func (rp *ReverseProxyEntry) IsDocker() bool { diff --git a/internal/route/http.go b/internal/route/http.go index 79c6386..c361b11 100755 --- a/internal/route/http.go +++ b/internal/route/http.go @@ -25,7 +25,7 @@ import ( type ( HTTPRoute struct { - *P.ReverseProxyEntry `json:"entry"` + *P.ReverseProxyEntry HealthMon health.HealthMonitor `json:"health,omitempty"` diff --git a/internal/watcher/health/json.go b/internal/watcher/health/json.go index cefe4c9..6c27722 100644 --- a/internal/watcher/health/json.go +++ b/internal/watcher/health/json.go @@ -5,6 +5,7 @@ import ( "time" "github.com/yusing/go-proxy/internal/net/types" + U "github.com/yusing/go-proxy/internal/utils" ) type JSONRepresentation struct { @@ -19,12 +20,14 @@ type JSONRepresentation struct { func (jsonRepr *JSONRepresentation) MarshalJSON() ([]byte, error) { return json.Marshal(map[string]any{ - "name": jsonRepr.Name, - "config": jsonRepr.Config, - "started": jsonRepr.Started.Unix(), - "status": jsonRepr.Status.String(), - "uptime": jsonRepr.Uptime.Seconds(), - "url": jsonRepr.URL.String(), - "extra": jsonRepr.Extra, + "name": jsonRepr.Name, + "config": jsonRepr.Config, + "started": jsonRepr.Started.Unix(), + "startedStr": U.FormatTime(jsonRepr.Started), + "status": jsonRepr.Status.String(), + "uptime": jsonRepr.Uptime.Seconds(), + "uptimeStr": U.FormatDuration(jsonRepr.Uptime), + "url": jsonRepr.URL, + "extra": jsonRepr.Extra, }) }