Azure Monitor: use NewLoggerWith func instead of backend.Logger (#81124)

using NewLoggerWith
pull/81019/head
Andrew Hackmann 1 year ago committed by GitHub
parent 0530021396
commit b411aa7266
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 6
      pkg/tsdb/azuremonitor/azuremonitor-resource-handler.go
  2. 3
      pkg/tsdb/azuremonitor/azuremonitor-resource-handler_test.go
  3. 37
      pkg/tsdb/azuremonitor/azuremonitor.go
  4. 3
      pkg/tsdb/azuremonitor/azuremonitor_test.go
  5. 10
      pkg/tsdb/azuremonitor/loganalytics/azure-log-analytics-datasource.go
  6. 8
      pkg/tsdb/azuremonitor/metrics/azuremonitor-datasource.go
  7. 8
      pkg/tsdb/azuremonitor/resourcegraph/azure-resource-graph-datasource.go
  8. 2
      pkg/tsdb/azuremonitor/types/types.go

@ -8,6 +8,7 @@ import (
"strings"
"github.com/grafana/grafana-plugin-sdk-go/backend"
"github.com/grafana/grafana-plugin-sdk-go/backend/log"
"github.com/grafana/grafana-plugin-sdk-go/backend/resource/httpadapter"
"github.com/grafana/grafana/pkg/tsdb/azuremonitor/types"
@ -24,6 +25,7 @@ func getTarget(original string) (target string, err error) {
}
type httpServiceProxy struct {
logger log.Logger
}
func (s *httpServiceProxy) Do(rw http.ResponseWriter, req *http.Request, cli *http.Client) (http.ResponseWriter, error) {
@ -38,7 +40,7 @@ func (s *httpServiceProxy) Do(rw http.ResponseWriter, req *http.Request, cli *ht
}
defer func() {
if err := res.Body.Close(); err != nil {
backend.Logger.Warn("Failed to close response body", "err", err)
s.logger.Warn("Failed to close response body", "err", err)
}
}()
@ -91,7 +93,7 @@ func writeResponse(rw http.ResponseWriter, code int, msg string) {
func (s *Service) handleResourceReq(subDataSource string) func(rw http.ResponseWriter, req *http.Request) {
return func(rw http.ResponseWriter, req *http.Request) {
backend.Logger.Debug("Received resource call", "url", req.URL.String(), "method", req.Method)
s.logger.Debug("Received resource call", "url", req.URL.String(), "method", req.Method)
newPath, err := getTarget(req.URL.Path)
if err != nil {

@ -7,6 +7,7 @@ import (
"testing"
"github.com/grafana/grafana-azure-sdk-go/azsettings"
"github.com/grafana/grafana-plugin-sdk-go/backend/log"
"github.com/grafana/grafana/pkg/tsdb/azuremonitor/metrics"
"github.com/grafana/grafana/pkg/tsdb/azuremonitor/types"
@ -106,6 +107,7 @@ func Test_handleResourceReq(t *testing.T) {
azureMonitor: {
URL: routes[azsettings.AzurePublic][azureMonitor].URL,
HTTPClient: &http.Client{},
Logger: log.DefaultLogger,
},
},
},
@ -114,6 +116,7 @@ func Test_handleResourceReq(t *testing.T) {
Proxy: proxy,
},
},
logger: log.DefaultLogger,
}
rw := httptest.NewRecorder()
req, err := http.NewRequest(http.MethodGet, "http://foo/azuremonitor/subscriptions/44693801", nil)

@ -16,6 +16,7 @@ import (
"github.com/grafana/grafana-plugin-sdk-go/backend/datasource"
"github.com/grafana/grafana-plugin-sdk-go/backend/httpclient"
"github.com/grafana/grafana-plugin-sdk-go/backend/instancemgmt"
"github.com/grafana/grafana-plugin-sdk-go/backend/log"
"github.com/grafana/grafana-plugin-sdk-go/backend/resource/httpadapter"
"github.com/grafana/grafana/pkg/tsdb/azuremonitor/azmoncredentials"
@ -26,19 +27,23 @@ import (
)
func ProvideService(httpClientProvider *httpclient.Provider) *Service {
proxy := &httpServiceProxy{}
logger := backend.NewLoggerWith("logger", "tsdb.azuremonitor")
proxy := &httpServiceProxy{
logger: logger,
}
executors := map[string]azDatasourceExecutor{
azureMonitor: &metrics.AzureMonitorDatasource{Proxy: proxy},
azureLogAnalytics: &loganalytics.AzureLogAnalyticsDatasource{Proxy: proxy},
azureResourceGraph: &resourcegraph.AzureResourceGraphDatasource{Proxy: proxy},
azureTraces: &loganalytics.AzureLogAnalyticsDatasource{Proxy: proxy},
azureMonitor: &metrics.AzureMonitorDatasource{Proxy: proxy, Logger: logger},
azureLogAnalytics: &loganalytics.AzureLogAnalyticsDatasource{Proxy: proxy, Logger: logger},
azureResourceGraph: &resourcegraph.AzureResourceGraphDatasource{Proxy: proxy, Logger: logger},
azureTraces: &loganalytics.AzureLogAnalyticsDatasource{Proxy: proxy, Logger: logger},
}
im := datasource.NewInstanceManager(NewInstanceSettings(httpClientProvider, executors))
im := datasource.NewInstanceManager(NewInstanceSettings(httpClientProvider, executors, logger))
s := &Service{
im: im,
executors: executors,
logger: logger,
}
s.queryMux = s.newQueryMux()
@ -61,9 +66,10 @@ type Service struct {
queryMux *datasource.QueryTypeMux
resourceHandler backend.CallResourceHandler
logger log.Logger
}
func getDatasourceService(ctx context.Context, settings *backend.DataSourceInstanceSettings, azureSettings *azsettings.AzureSettings, clientProvider *httpclient.Provider, dsInfo types.DatasourceInfo, routeName string) (types.DatasourceService, error) {
func getDatasourceService(ctx context.Context, settings *backend.DataSourceInstanceSettings, azureSettings *azsettings.AzureSettings, clientProvider *httpclient.Provider, dsInfo types.DatasourceInfo, routeName string, logger log.Logger) (types.DatasourceService, error) {
route := dsInfo.Routes[routeName]
client, err := newHTTPClient(ctx, route, dsInfo, settings, azureSettings, clientProvider)
if err != nil {
@ -72,10 +78,11 @@ func getDatasourceService(ctx context.Context, settings *backend.DataSourceInsta
return types.DatasourceService{
URL: dsInfo.Routes[routeName].URL,
HTTPClient: client,
Logger: logger,
}, nil
}
func NewInstanceSettings(clientProvider *httpclient.Provider, executors map[string]azDatasourceExecutor) datasource.InstanceFactoryFunc {
func NewInstanceSettings(clientProvider *httpclient.Provider, executors map[string]azDatasourceExecutor, logger log.Logger) datasource.InstanceFactoryFunc {
return func(ctx context.Context, settings backend.DataSourceInstanceSettings) (instancemgmt.Instance, error) {
jsonData := map[string]any{}
err := json.Unmarshal(settings.JSONData, &jsonData)
@ -91,7 +98,7 @@ func NewInstanceSettings(clientProvider *httpclient.Provider, executors map[stri
azureSettings, err := azsettings.ReadSettings(ctx)
if err != nil {
backend.Logger.Error("failed to read Azure settings from Grafana", "error", err.Error())
logger.Error("failed to read Azure settings from Grafana", "error", err.Error())
return nil, err
}
@ -124,7 +131,7 @@ func NewInstanceSettings(clientProvider *httpclient.Provider, executors map[stri
}
for routeName := range executors {
service, err := getDatasourceService(ctx, &settings, azureSettings, clientProvider, model, routeName)
service, err := getDatasourceService(ctx, &settings, azureSettings, clientProvider, model, routeName, logger)
if err != nil {
return nil, err
}
@ -300,7 +307,7 @@ func checkAzureMonitorResourceGraphHealth(dsInfo types.DatasourceInfo, subscript
return res, nil
}
func metricCheckHealth(dsInfo types.DatasourceInfo) (message string, defaultSubscription string, status backend.HealthStatus) {
func metricCheckHealth(dsInfo types.DatasourceInfo, logger log.Logger) (message string, defaultSubscription string, status backend.HealthStatus) {
defaultSubscription = dsInfo.Settings.SubscriptionId
metricsRes, err := queryMetricHealth(dsInfo)
if err != nil {
@ -323,7 +330,7 @@ func metricCheckHealth(dsInfo types.DatasourceInfo) (message string, defaultSubs
}
return fmt.Sprintf("Error connecting to Azure Monitor endpoint: %s", string(body)), defaultSubscription, backend.HealthStatusError
}
subscriptions, err := parseSubscriptions(metricsRes)
subscriptions, err := parseSubscriptions(metricsRes, logger)
if err != nil {
return err.Error(), defaultSubscription, backend.HealthStatusError
}
@ -387,7 +394,7 @@ func graphLogHealthCheck(dsInfo types.DatasourceInfo, defaultSubscription string
return "Successfully connected to Azure Resource Graph endpoint.", backend.HealthStatusOk
}
func parseSubscriptions(res *http.Response) ([]string, error) {
func parseSubscriptions(res *http.Response, logger log.Logger) ([]string, error) {
var target struct {
Value []struct {
SubscriptionId string `json:"subscriptionId"`
@ -399,7 +406,7 @@ func parseSubscriptions(res *http.Response) ([]string, error) {
}
defer func() {
if err := res.Body.Close(); err != nil {
backend.Logger.Warn("Failed to close response body", "err", err)
logger.Warn("Failed to close response body", "err", err)
}
}()
@ -422,7 +429,7 @@ func (s *Service) CheckHealth(ctx context.Context, req *backend.CheckHealthReque
status := backend.HealthStatusOk
metricsLog, defaultSubscription, metricsStatus := metricCheckHealth(dsInfo)
metricsLog, defaultSubscription, metricsStatus := metricCheckHealth(dsInfo, s.logger)
if metricsStatus != backend.HealthStatusOk {
status = metricsStatus
}

@ -16,6 +16,7 @@ import (
"github.com/grafana/grafana-plugin-sdk-go/backend"
"github.com/grafana/grafana-plugin-sdk-go/backend/httpclient"
"github.com/grafana/grafana-plugin-sdk-go/backend/instancemgmt"
"github.com/grafana/grafana-plugin-sdk-go/backend/log"
"github.com/grafana/grafana/pkg/tsdb/azuremonitor/types"
@ -87,7 +88,7 @@ func TestNewInstanceSettings(t *testing.T) {
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
factory := NewInstanceSettings(&httpclient.Provider{}, map[string]azDatasourceExecutor{})
factory := NewInstanceSettings(&httpclient.Provider{}, map[string]azDatasourceExecutor{}, log.DefaultLogger)
instance, err := factory(context.Background(), tt.settings)
tt.Err(t, err)
if !cmp.Equal(instance, tt.expectedModel) {

@ -17,6 +17,7 @@ import (
"time"
"github.com/grafana/grafana-plugin-sdk-go/backend"
"github.com/grafana/grafana-plugin-sdk-go/backend/log"
"github.com/grafana/grafana-plugin-sdk-go/backend/tracing"
"github.com/grafana/grafana-plugin-sdk-go/data"
"go.opentelemetry.io/otel/attribute"
@ -30,7 +31,8 @@ import (
// AzureLogAnalyticsDatasource calls the Azure Log Analytics API's
type AzureLogAnalyticsDatasource struct {
Proxy types.ServiceProxy
Proxy types.ServiceProxy
Logger log.Logger
}
// AzureLogAnalyticsQuery is the query request that is built from the saved values for
@ -300,7 +302,7 @@ func (e *AzureLogAnalyticsDatasource) executeQuery(ctx context.Context, query *A
defer func() {
if err := res.Body.Close(); err != nil {
backend.Logger.Warn("Failed to close response body", "err", err)
e.Logger.Warn("Failed to close response body", "err", err)
}
}()
@ -610,7 +612,7 @@ func getCorrelationWorkspaces(ctx context.Context, baseResource string, resource
defer func() {
if err := res.Body.Close(); err != nil {
backend.Logger.Warn("Failed to close response body", "err", err)
azMonService.Logger.Warn("Failed to close response body", "err", err)
}
}()
@ -714,7 +716,7 @@ func (e *AzureLogAnalyticsDatasource) unmarshalResponse(res *http.Response) (Azu
}
defer func() {
if err := res.Body.Close(); err != nil {
backend.Logger.Warn("Failed to close response body", "err", err)
e.Logger.Warn("Failed to close response body", "err", err)
}
}()

@ -14,6 +14,7 @@ import (
"time"
"github.com/grafana/grafana-plugin-sdk-go/backend"
"github.com/grafana/grafana-plugin-sdk-go/backend/log"
"github.com/grafana/grafana-plugin-sdk-go/backend/tracing"
"github.com/grafana/grafana-plugin-sdk-go/data"
"go.opentelemetry.io/otel/attribute"
@ -27,7 +28,8 @@ import (
// AzureMonitorDatasource calls the Azure Monitor API - one of the four API's supported
type AzureMonitorDatasource struct {
Proxy types.ServiceProxy
Proxy types.ServiceProxy
Logger log.Logger
}
var (
@ -276,7 +278,7 @@ func (e *AzureMonitorDatasource) retrieveSubscriptionDetails(cli *http.Client, c
defer func() {
if err := res.Body.Close(); err != nil {
backend.Logger.Warn("Failed to close response body", "err", err)
e.Logger.Warn("Failed to close response body", "err", err)
}
}()
@ -328,7 +330,7 @@ func (e *AzureMonitorDatasource) executeQuery(ctx context.Context, query *types.
defer func() {
if err := res.Body.Close(); err != nil {
backend.Logger.Warn("Failed to close response body", "err", err)
e.Logger.Warn("Failed to close response body", "err", err)
}
}()

@ -12,6 +12,7 @@ import (
"time"
"github.com/grafana/grafana-plugin-sdk-go/backend"
"github.com/grafana/grafana-plugin-sdk-go/backend/log"
"github.com/grafana/grafana-plugin-sdk-go/backend/tracing"
"github.com/grafana/grafana-plugin-sdk-go/data"
"go.opentelemetry.io/otel/attribute"
@ -30,7 +31,8 @@ type AzureResourceGraphResponse struct {
// AzureResourceGraphDatasource calls the Azure Resource Graph API's
type AzureResourceGraphDatasource struct {
Proxy types.ServiceProxy
Proxy types.ServiceProxy
Logger log.Logger
}
// AzureResourceGraphQuery is the query request that is built from the saved values for
@ -160,7 +162,7 @@ func (e *AzureResourceGraphDatasource) executeQuery(ctx context.Context, query *
)
defer span.End()
backend.Logger.Debug("azure resource graph query", "traceID", trace.SpanContextFromContext(ctx).TraceID())
e.Logger.Debug("azure resource graph query", "traceID", trace.SpanContextFromContext(ctx).TraceID())
res, err := client.Do(req)
if err != nil {
@ -224,7 +226,7 @@ func (e *AzureResourceGraphDatasource) unmarshalResponse(res *http.Response) (Az
defer func() {
if err := res.Body.Close(); err != nil {
backend.Logger.Warn("Failed to close response body", "err", err)
e.Logger.Warn("Failed to close response body", "err", err)
}
}()

@ -11,6 +11,7 @@ import (
"github.com/grafana/grafana-azure-sdk-go/azcredentials"
"github.com/grafana/grafana-plugin-sdk-go/backend"
"github.com/grafana/grafana-plugin-sdk-go/backend/log"
"github.com/grafana/grafana/pkg/tsdb/azuremonitor/kinds/dataquery"
)
@ -44,6 +45,7 @@ type AzureMonitorCustomizedCloudSettings struct {
type DatasourceService struct {
URL string
HTTPClient *http.Client
Logger log.Logger
}
type DatasourceInfo struct {

Loading…
Cancel
Save