chore: make callbacks return same struct as /api/rawdata
This commit is contained in:
parent
78c27a261b
commit
a428f37e02
2 changed files with 42 additions and 33 deletions
|
|
@ -50,6 +50,38 @@ type RunTimeRepresentation struct {
|
||||||
UDPServices map[string]*runtime.UDPServiceInfo `json:"udpServices,omitempty"`
|
UDPServices map[string]*runtime.UDPServiceInfo `json:"udpServices,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: think about this for longer
|
||||||
|
func GetRunTimeRepresentation(runtimeConfiguration *runtime.Configuration) *RunTimeRepresentation {
|
||||||
|
siRepr := make(map[string]*serviceInfoRepresentation, len(runtimeConfiguration.Services))
|
||||||
|
for k, v := range runtimeConfiguration.Services {
|
||||||
|
siRepr[k] = &serviceInfoRepresentation{
|
||||||
|
ServiceInfo: v,
|
||||||
|
ServerStatus: v.GetAllStatus(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tcpSIRepr := make(map[string]*tcpServiceInfoRepresentation, len(runtimeConfiguration.Services))
|
||||||
|
for k, v := range runtimeConfiguration.TCPServices {
|
||||||
|
tcpSIRepr[k] = &tcpServiceInfoRepresentation{
|
||||||
|
TCPServiceInfo: v,
|
||||||
|
ServerStatus: v.GetAllStatus(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
result := RunTimeRepresentation{
|
||||||
|
Routers: runtimeConfiguration.Routers,
|
||||||
|
Middlewares: runtimeConfiguration.Middlewares,
|
||||||
|
Services: siRepr,
|
||||||
|
TCPRouters: runtimeConfiguration.TCPRouters,
|
||||||
|
TCPMiddlewares: runtimeConfiguration.TCPMiddlewares,
|
||||||
|
TCPServices: tcpSIRepr,
|
||||||
|
UDPRouters: runtimeConfiguration.UDPRouters,
|
||||||
|
UDPServices: runtimeConfiguration.UDPServices,
|
||||||
|
}
|
||||||
|
|
||||||
|
return &result
|
||||||
|
}
|
||||||
|
|
||||||
// Handler serves the configuration and status of Traefik on API endpoints.
|
// Handler serves the configuration and status of Traefik on API endpoints.
|
||||||
type Handler struct {
|
type Handler struct {
|
||||||
staticConfig static.Configuration
|
staticConfig static.Configuration
|
||||||
|
|
@ -124,32 +156,7 @@ func (h Handler) createRouter() *mux.Router {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h Handler) getRuntimeConfiguration(rw http.ResponseWriter, request *http.Request) {
|
func (h Handler) getRuntimeConfiguration(rw http.ResponseWriter, request *http.Request) {
|
||||||
siRepr := make(map[string]*serviceInfoRepresentation, len(h.runtimeConfiguration.Services))
|
result := GetRunTimeRepresentation(h.runtimeConfiguration)
|
||||||
for k, v := range h.runtimeConfiguration.Services {
|
|
||||||
siRepr[k] = &serviceInfoRepresentation{
|
|
||||||
ServiceInfo: v,
|
|
||||||
ServerStatus: v.GetAllStatus(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
tcpSIRepr := make(map[string]*tcpServiceInfoRepresentation, len(h.runtimeConfiguration.Services))
|
|
||||||
for k, v := range h.runtimeConfiguration.TCPServices {
|
|
||||||
tcpSIRepr[k] = &tcpServiceInfoRepresentation{
|
|
||||||
TCPServiceInfo: v,
|
|
||||||
ServerStatus: v.GetAllStatus(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
result := RunTimeRepresentation{
|
|
||||||
Routers: h.runtimeConfiguration.Routers,
|
|
||||||
Middlewares: h.runtimeConfiguration.Middlewares,
|
|
||||||
Services: siRepr,
|
|
||||||
TCPRouters: h.runtimeConfiguration.TCPRouters,
|
|
||||||
TCPMiddlewares: h.runtimeConfiguration.TCPMiddlewares,
|
|
||||||
TCPServices: tcpSIRepr,
|
|
||||||
UDPRouters: h.runtimeConfiguration.UDPRouters,
|
|
||||||
UDPServices: h.runtimeConfiguration.UDPServices,
|
|
||||||
}
|
|
||||||
|
|
||||||
rw.Header().Set("Content-Type", "application/json")
|
rw.Header().Set("Content-Type", "application/json")
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,9 @@ import (
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"github.com/rs/zerolog/log"
|
"github.com/rs/zerolog/log"
|
||||||
|
"github.com/traefik/traefik/v3/pkg/api"
|
||||||
"github.com/traefik/traefik/v3/pkg/config/dynamic"
|
"github.com/traefik/traefik/v3/pkg/config/dynamic"
|
||||||
|
"github.com/traefik/traefik/v3/pkg/config/runtime"
|
||||||
"github.com/traefik/traefik/v3/pkg/config/static"
|
"github.com/traefik/traefik/v3/pkg/config/static"
|
||||||
"github.com/traefik/traefik/v3/pkg/safe"
|
"github.com/traefik/traefik/v3/pkg/safe"
|
||||||
)
|
)
|
||||||
|
|
@ -24,19 +26,19 @@ func New(config *static.Configuration) *Updater {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (u *Updater) HandleConfigUpdate(cfg dynamic.Configuration) {
|
func (u *Updater) HandleConfigUpdate(cfg dynamic.Configuration) {
|
||||||
body, err := json.Marshal(cfg)
|
runtimeConfig := runtime.NewConfig(cfg)
|
||||||
|
|
||||||
if err != nil {
|
body := bytes.NewBuffer([]byte{})
|
||||||
// should never happen?
|
result := api.GetRunTimeRepresentation(runtimeConfig)
|
||||||
|
|
||||||
|
if err := json.NewEncoder(body).Encode(result); err != nil {
|
||||||
log.Error().Err(err).Msg("Error while marshalling dynamic configuration data to json")
|
log.Error().Err(err).Msg("Error while marshalling dynamic configuration data to json")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
requestBody := bytes.NewBuffer(body)
|
|
||||||
|
|
||||||
for _, url := range u.callbackUrls {
|
for _, url := range u.callbackUrls {
|
||||||
safe.Go(func() {
|
safe.Go(func() {
|
||||||
resp, err := http.Post(url, "application/json", requestBody)
|
resp, err := http.Post(url, "application/json", body)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error().Err(err).Str("url", url).Msg("Error while sending configuration data to callback")
|
log.Error().Err(err).Str("url", url).Msg("Error while sending configuration data to callback")
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue