use logger context in cloudwatch (#57842)
This commit is contained in:
@@ -8,13 +8,17 @@ import (
|
||||
"testing"
|
||||
|
||||
"github.com/grafana/grafana-plugin-sdk-go/backend"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"github.com/grafana/grafana/pkg/infra/log/logtest"
|
||||
"github.com/grafana/grafana/pkg/tsdb/cloudwatch/mocks"
|
||||
"github.com/grafana/grafana/pkg/tsdb/cloudwatch/models"
|
||||
"github.com/grafana/grafana/pkg/tsdb/cloudwatch/services"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
var logger = &logtest.Fake{}
|
||||
|
||||
func Test_DimensionKeys_Route(t *testing.T) {
|
||||
t.Run("calls FilterDimensionKeysRequest when a StandardDimensionKeysRequest is passed", func(t *testing.T) {
|
||||
mockListMetricsService := mocks.ListMetricsServiceMock{}
|
||||
@@ -24,7 +28,7 @@ func Test_DimensionKeys_Route(t *testing.T) {
|
||||
}
|
||||
rr := httptest.NewRecorder()
|
||||
req := httptest.NewRequest("GET", `/dimension-keys?region=us-east-2&namespace=AWS/EC2&metricName=CPUUtilization&dimensionFilters={"NodeID":["Shared"],"stage":["QueryCommit"]}`, nil)
|
||||
handler := http.HandlerFunc(ResourceRequestMiddleware(DimensionKeysHandler, nil))
|
||||
handler := http.HandlerFunc(ResourceRequestMiddleware(DimensionKeysHandler, logger, nil))
|
||||
handler.ServeHTTP(rr, req)
|
||||
mockListMetricsService.AssertNumberOfCalls(t, "GetDimensionKeysByDimensionFilter", 1)
|
||||
})
|
||||
@@ -37,7 +41,7 @@ func Test_DimensionKeys_Route(t *testing.T) {
|
||||
}
|
||||
rr := httptest.NewRecorder()
|
||||
req := httptest.NewRequest("GET", `/dimension-keys?region=us-east-2&namespace=custom&metricName=CPUUtilization`, nil)
|
||||
handler := http.HandlerFunc(ResourceRequestMiddleware(DimensionKeysHandler, nil))
|
||||
handler := http.HandlerFunc(ResourceRequestMiddleware(DimensionKeysHandler, logger, nil))
|
||||
handler.ServeHTTP(rr, req)
|
||||
mockListMetricsService.AssertNumberOfCalls(t, "GetDimensionKeysByNamespace", 1)
|
||||
})
|
||||
@@ -56,7 +60,7 @@ func Test_DimensionKeys_Route(t *testing.T) {
|
||||
}
|
||||
rr := httptest.NewRecorder()
|
||||
req := httptest.NewRequest("GET", "/dimension-keys?region=us-east-2&namespace=AWS/EC2&metricName=CPUUtilization", nil)
|
||||
handler := http.HandlerFunc(ResourceRequestMiddleware(DimensionKeysHandler, nil))
|
||||
handler := http.HandlerFunc(ResourceRequestMiddleware(DimensionKeysHandler, logger, nil))
|
||||
handler.ServeHTTP(rr, req)
|
||||
res := []models.Metric{}
|
||||
err := json.Unmarshal(rr.Body.Bytes(), &res)
|
||||
@@ -73,7 +77,7 @@ func Test_DimensionKeys_Route(t *testing.T) {
|
||||
}
|
||||
rr := httptest.NewRecorder()
|
||||
req := httptest.NewRequest("GET", `/dimension-keys?region=us-east-2&namespace=AWS/EC2&metricName=CPUUtilization&dimensionFilters={"NodeID":["Shared"],"stage":["QueryCommit"]}`, nil)
|
||||
handler := http.HandlerFunc(ResourceRequestMiddleware(DimensionKeysHandler, nil))
|
||||
handler := http.HandlerFunc(ResourceRequestMiddleware(DimensionKeysHandler, logger, nil))
|
||||
handler.ServeHTTP(rr, req)
|
||||
assert.Equal(t, http.StatusInternalServerError, rr.Code)
|
||||
assert.Equal(t, `{"Message":"error in DimensionKeyHandler: some error","Error":"some error","StatusCode":500}`, rr.Body.String())
|
||||
|
||||
@@ -7,9 +7,10 @@ import (
|
||||
"testing"
|
||||
|
||||
"github.com/grafana/grafana-plugin-sdk-go/backend"
|
||||
"github.com/stretchr/testify/assert"
|
||||
|
||||
"github.com/grafana/grafana/pkg/tsdb/cloudwatch/mocks"
|
||||
"github.com/grafana/grafana/pkg/tsdb/cloudwatch/models"
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func Test_DimensionValues_Route(t *testing.T) {
|
||||
@@ -21,7 +22,7 @@ func Test_DimensionValues_Route(t *testing.T) {
|
||||
}
|
||||
rr := httptest.NewRecorder()
|
||||
req := httptest.NewRequest("GET", `/dimension-values?region=us-east-2&dimensionKey=instanceId&namespace=AWS/EC2&metricName=CPUUtilization&dimensionFilters={"NodeID":["Shared"],"stage":["QueryCommit"]}`, nil)
|
||||
handler := http.HandlerFunc(ResourceRequestMiddleware(DimensionValuesHandler, nil))
|
||||
handler := http.HandlerFunc(ResourceRequestMiddleware(DimensionValuesHandler, logger, nil))
|
||||
handler.ServeHTTP(rr, req)
|
||||
})
|
||||
|
||||
@@ -33,7 +34,7 @@ func Test_DimensionValues_Route(t *testing.T) {
|
||||
}
|
||||
rr := httptest.NewRecorder()
|
||||
req := httptest.NewRequest("GET", `/dimension-values?region=us-east-2&dimensionKey=instanceId&namespace=AWS/EC2&metricName=CPUUtilization&dimensionFilters={"NodeID":["Shared"],"stage":["QueryCommit"]}`, nil)
|
||||
handler := http.HandlerFunc(ResourceRequestMiddleware(DimensionValuesHandler, nil))
|
||||
handler := http.HandlerFunc(ResourceRequestMiddleware(DimensionValuesHandler, logger, nil))
|
||||
handler.ServeHTTP(rr, req)
|
||||
assert.Equal(t, http.StatusInternalServerError, rr.Code)
|
||||
assert.Equal(t, `{"Message":"error in DimensionValuesHandler: some error","Error":"some error","StatusCode":500}`, rr.Body.String())
|
||||
|
||||
@@ -8,11 +8,12 @@ import (
|
||||
"testing"
|
||||
|
||||
"github.com/grafana/grafana-plugin-sdk-go/backend"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"github.com/grafana/grafana/pkg/tsdb/cloudwatch/mocks"
|
||||
"github.com/grafana/grafana/pkg/tsdb/cloudwatch/models"
|
||||
"github.com/grafana/grafana/pkg/tsdb/cloudwatch/services"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func Test_Metrics_Route(t *testing.T) {
|
||||
@@ -24,7 +25,7 @@ func Test_Metrics_Route(t *testing.T) {
|
||||
}
|
||||
rr := httptest.NewRecorder()
|
||||
req := httptest.NewRequest("GET", "/metrics?region=us-east-2&namespace=customNamespace", nil)
|
||||
handler := http.HandlerFunc(ResourceRequestMiddleware(MetricsHandler, nil))
|
||||
handler := http.HandlerFunc(ResourceRequestMiddleware(MetricsHandler, logger, nil))
|
||||
handler.ServeHTTP(rr, req)
|
||||
mockListMetricsService.AssertNumberOfCalls(t, "GetMetricsByNamespace", 1)
|
||||
})
|
||||
@@ -41,7 +42,7 @@ func Test_Metrics_Route(t *testing.T) {
|
||||
}
|
||||
rr := httptest.NewRecorder()
|
||||
req := httptest.NewRequest("GET", "/metrics?region=us-east-2", nil)
|
||||
handler := http.HandlerFunc(ResourceRequestMiddleware(MetricsHandler, nil))
|
||||
handler := http.HandlerFunc(ResourceRequestMiddleware(MetricsHandler, logger, nil))
|
||||
handler.ServeHTTP(rr, req)
|
||||
res := []models.Metric{}
|
||||
err := json.Unmarshal(rr.Body.Bytes(), &res)
|
||||
@@ -63,7 +64,7 @@ func Test_Metrics_Route(t *testing.T) {
|
||||
}
|
||||
rr := httptest.NewRecorder()
|
||||
req := httptest.NewRequest("GET", "/metrics?region=us-east-2&namespace=AWS/DMS", nil)
|
||||
handler := http.HandlerFunc(ResourceRequestMiddleware(MetricsHandler, nil))
|
||||
handler := http.HandlerFunc(ResourceRequestMiddleware(MetricsHandler, logger, nil))
|
||||
handler.ServeHTTP(rr, req)
|
||||
res := []models.Metric{}
|
||||
err := json.Unmarshal(rr.Body.Bytes(), &res)
|
||||
@@ -80,7 +81,7 @@ func Test_Metrics_Route(t *testing.T) {
|
||||
}
|
||||
rr := httptest.NewRecorder()
|
||||
req := httptest.NewRequest("GET", "/metrics?region=us-east-2&namespace=customNamespace", nil)
|
||||
handler := http.HandlerFunc(ResourceRequestMiddleware(MetricsHandler, nil))
|
||||
handler := http.HandlerFunc(ResourceRequestMiddleware(MetricsHandler, logger, nil))
|
||||
handler.ServeHTTP(rr, req)
|
||||
assert.Equal(t, http.StatusInternalServerError, rr.Code)
|
||||
assert.Equal(t, `{"Message":"error in MetricsHandler: some error","Error":"some error","StatusCode":500}`, rr.Body.String())
|
||||
|
||||
@@ -4,11 +4,12 @@ import (
|
||||
"net/http"
|
||||
|
||||
"github.com/grafana/grafana-plugin-sdk-go/backend/resource/httpadapter"
|
||||
"github.com/grafana/grafana/pkg/tsdb/cloudwatch/cwlog"
|
||||
|
||||
"github.com/grafana/grafana/pkg/infra/log"
|
||||
"github.com/grafana/grafana/pkg/tsdb/cloudwatch/models"
|
||||
)
|
||||
|
||||
func ResourceRequestMiddleware(handleFunc models.RouteHandlerFunc, reqCtxFactory models.RequestContextFactoryFunc) func(rw http.ResponseWriter, req *http.Request) {
|
||||
func ResourceRequestMiddleware(handleFunc models.RouteHandlerFunc, logger log.Logger, reqCtxFactory models.RequestContextFactoryFunc) func(rw http.ResponseWriter, req *http.Request) {
|
||||
return func(rw http.ResponseWriter, req *http.Request) {
|
||||
if req.Method != "GET" {
|
||||
respondWithError(rw, models.NewHttpError("Invalid method", http.StatusMethodNotAllowed, nil))
|
||||
@@ -19,7 +20,7 @@ func ResourceRequestMiddleware(handleFunc models.RouteHandlerFunc, reqCtxFactory
|
||||
pluginContext := httpadapter.PluginConfigFromContext(ctx)
|
||||
json, httpError := handleFunc(pluginContext, reqCtxFactory, req.URL.Query())
|
||||
if httpError != nil {
|
||||
cwlog.Error("error handling resource request", "error", httpError.Message)
|
||||
logger.Error("error handling resource request", "error", httpError.Message)
|
||||
respondWithError(rw, httpError)
|
||||
return
|
||||
}
|
||||
@@ -27,7 +28,7 @@ func ResourceRequestMiddleware(handleFunc models.RouteHandlerFunc, reqCtxFactory
|
||||
rw.Header().Set("Content-Type", "application/json")
|
||||
_, err := rw.Write(json)
|
||||
if err != nil {
|
||||
cwlog.Error("error handling resource request", "error", err)
|
||||
logger.Error("error handling resource request", "error", err)
|
||||
respondWithError(rw, models.NewHttpError("error writing response in resource request middleware", http.StatusInternalServerError, err))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,8 +8,9 @@ import (
|
||||
"testing"
|
||||
|
||||
"github.com/grafana/grafana-plugin-sdk-go/backend"
|
||||
"github.com/grafana/grafana/pkg/tsdb/cloudwatch/models"
|
||||
"github.com/stretchr/testify/assert"
|
||||
|
||||
"github.com/grafana/grafana/pkg/tsdb/cloudwatch/models"
|
||||
)
|
||||
|
||||
func Test_Middleware(t *testing.T) {
|
||||
@@ -18,7 +19,7 @@ func Test_Middleware(t *testing.T) {
|
||||
req := httptest.NewRequest("POST", "/dimension-keys?region=us-east-1", nil)
|
||||
handler := http.HandlerFunc(ResourceRequestMiddleware(func(pluginCtx backend.PluginContext, reqCtxFactory models.RequestContextFactoryFunc, parameters url.Values) ([]byte, *models.HttpError) {
|
||||
return []byte{}, nil
|
||||
}, nil))
|
||||
}, logger, nil))
|
||||
handler.ServeHTTP(rr, req)
|
||||
assert.Equal(t, http.StatusMethodNotAllowed, rr.Code)
|
||||
})
|
||||
@@ -30,7 +31,7 @@ func Test_Middleware(t *testing.T) {
|
||||
handler := http.HandlerFunc(ResourceRequestMiddleware(func(pluginCtx backend.PluginContext, reqCtxFactory models.RequestContextFactoryFunc, parameters url.Values) ([]byte, *models.HttpError) {
|
||||
testPluginContext = pluginCtx
|
||||
return []byte{}, nil
|
||||
}, nil))
|
||||
}, logger, nil))
|
||||
handler.ServeHTTP(rr, req)
|
||||
assert.NotNil(t, testPluginContext)
|
||||
})
|
||||
@@ -40,7 +41,7 @@ func Test_Middleware(t *testing.T) {
|
||||
req := httptest.NewRequest("GET", "/some-path", nil)
|
||||
handler := http.HandlerFunc(ResourceRequestMiddleware(func(pluginCtx backend.PluginContext, reqCtxFactory models.RequestContextFactoryFunc, parameters url.Values) ([]byte, *models.HttpError) {
|
||||
return []byte{}, models.NewHttpError("error", http.StatusBadRequest, fmt.Errorf("error from handler"))
|
||||
}, nil))
|
||||
}, logger, nil))
|
||||
handler.ServeHTTP(rr, req)
|
||||
assert.Equal(t, http.StatusBadRequest, rr.Code)
|
||||
assert.Equal(t, `{"Message":"error: error from handler","Error":"error from handler","StatusCode":400}`, rr.Body.String())
|
||||
|
||||
@@ -6,9 +6,10 @@ import (
|
||||
"testing"
|
||||
|
||||
"github.com/grafana/grafana-plugin-sdk-go/backend"
|
||||
"github.com/stretchr/testify/assert"
|
||||
|
||||
"github.com/grafana/grafana/pkg/tsdb/cloudwatch/models"
|
||||
"github.com/grafana/grafana/pkg/tsdb/cloudwatch/services"
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func Test_Namespaces_Route(t *testing.T) {
|
||||
@@ -33,7 +34,7 @@ func Test_Namespaces_Route(t *testing.T) {
|
||||
}
|
||||
rr := httptest.NewRecorder()
|
||||
req := httptest.NewRequest("GET", "/namespaces", nil)
|
||||
handler := http.HandlerFunc(ResourceRequestMiddleware(NamespacesHandler, factoryFunc))
|
||||
handler := http.HandlerFunc(ResourceRequestMiddleware(NamespacesHandler, logger, factoryFunc))
|
||||
handler.ServeHTTP(rr, req)
|
||||
assert.True(t, haveBeenCalled)
|
||||
})
|
||||
@@ -49,7 +50,7 @@ func Test_Namespaces_Route(t *testing.T) {
|
||||
rr := httptest.NewRecorder()
|
||||
req := httptest.NewRequest("GET", "/namespaces", nil)
|
||||
customNamespaces = "customNamespace1,customNamespace2"
|
||||
handler := http.HandlerFunc(ResourceRequestMiddleware(NamespacesHandler, factoryFunc))
|
||||
handler := http.HandlerFunc(ResourceRequestMiddleware(NamespacesHandler, logger, factoryFunc))
|
||||
handler.ServeHTTP(rr, req)
|
||||
assert.JSONEq(t, `["AWS/EC2", "AWS/ELB", "customNamespace1", "customNamespace2"]`, rr.Body.String())
|
||||
})
|
||||
@@ -65,7 +66,7 @@ func Test_Namespaces_Route(t *testing.T) {
|
||||
rr := httptest.NewRecorder()
|
||||
req := httptest.NewRequest("GET", "/namespaces", nil)
|
||||
customNamespaces = "DCustomNamespace1,ACustomNamespace2"
|
||||
handler := http.HandlerFunc(ResourceRequestMiddleware(NamespacesHandler, factoryFunc))
|
||||
handler := http.HandlerFunc(ResourceRequestMiddleware(NamespacesHandler, logger, factoryFunc))
|
||||
handler.ServeHTTP(rr, req)
|
||||
assert.JSONEq(t, `["ACustomNamespace2", "AWS/ELB", "AWS/XYZ", "DCustomNamespace1"]`, rr.Body.String())
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user