1
0
Fork 0

chore: make callbacks return same struct as /api/rawdata

This commit is contained in:
Arthur K. 2026-01-18 18:08:08 +03:00
parent 78c27a261b
commit a428f37e02
Signed by: wzray
GPG key ID: B97F30FDC4636357
2 changed files with 42 additions and 33 deletions

View file

@ -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")

View file

@ -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")