grafana/pkg/infra/httpclient/httpclientprovider/http_logger_middleware.go
2022-07-21 09:46:47 -04:00

54 lines
1.3 KiB
Go

package httpclientprovider
import (
"net/http"
sdkhttpclient "github.com/grafana/grafana-plugin-sdk-go/backend/httpclient"
httplogger "github.com/grafana/grafana-plugin-sdk-go/experimental/http_logger"
"github.com/grafana/grafana/pkg/setting"
)
const HTTPLoggerMiddlewareName = "http-logger"
func HTTPLoggerMiddleware(cfg setting.PluginSettings) sdkhttpclient.Middleware {
return sdkhttpclient.NamedMiddlewareFunc(HTTPLoggerMiddlewareName, func(opts sdkhttpclient.Options, next http.RoundTripper) http.RoundTripper {
datasourceType, exists := opts.Labels["datasource_type"]
if !exists {
return next
}
enabled, path := getLoggerSettings(datasourceType, cfg)
if !enabled {
return next
}
return httplogger.NewHTTPLogger(datasourceType, next, httplogger.Options{
Path: path,
EnabledFn: func() bool { return true },
})
})
}
func httpLoggingEnabled(cfg setting.PluginSettings) bool {
for _, settings := range cfg {
if enabled := settings["har_log_enabled"]; enabled == "true" {
return true
}
}
return false
}
func getLoggerSettings(datasourceType string, cfg setting.PluginSettings) (enabled bool, path string) {
settings, ok := cfg[datasourceType]
if !ok {
return
}
if e, ok := settings["har_log_enabled"]; ok {
enabled = e == "true"
}
if p, ok := settings["har_log_path"]; ok {
path = p
}
return
}