1
0
Fork 0
traefik/pkg/updater/provider.go

51 lines
1.2 KiB
Go

package updater
import (
"bytes"
"encoding/json"
"net/http"
"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/runtime"
"github.com/traefik/traefik/v3/pkg/config/static"
"github.com/traefik/traefik/v3/pkg/safe"
)
type Updater struct {
callbackUrls []string
}
func New(config *static.Configuration) *Updater {
updater := &Updater{
callbackUrls: config.Global.UpdaterCallbacks,
}
return updater
}
func (u *Updater) HandleConfigUpdate(cfg dynamic.Configuration) {
runtimeConfig := runtime.NewConfig(cfg)
body := bytes.NewBuffer([]byte{})
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")
return
}
for _, url := range u.callbackUrls {
safe.Go(func() {
resp, err := http.Post(url, "application/json", body)
if err != nil {
log.Error().Err(err).Str("url", url).Msg("Error while sending configuration data to callback")
} else {
log.Debug().Str("url", url).Msg("Configuration data sent")
resp.Body.Close()
}
})
}
}