From ac2bbc7f0b9bc84f8c0a07df3335d45ac14bc6ac Mon Sep 17 00:00:00 2001 From: Sergey Smolnikov Date: Mon, 30 Sep 2024 09:42:48 +0200 Subject: [PATCH] Fixed tests --- .../applications_controller_test.go | 43 +++++---------- api/metrics/internal/prometheus_defaults | 0 api/metrics/internal/prometheus_defaults.go | 13 +++++ api/metrics/mock/prometheus_client_mock.go | 6 +-- api/metrics/prometheus_client.go | 7 +-- api/metrics/prometheus_client_mock.go | 52 ------------------- api/metrics/prometheus_handler.go | 52 ++++++++----------- api/metrics/prometheus_handler_mock.go | 52 ------------------- api/metrics/prometheus_handler_test.go | 22 ++++---- 9 files changed, 68 insertions(+), 179 deletions(-) create mode 100644 api/metrics/internal/prometheus_defaults create mode 100644 api/metrics/internal/prometheus_defaults.go delete mode 100644 api/metrics/prometheus_client_mock.go delete mode 100644 api/metrics/prometheus_handler_mock.go diff --git a/api/applications/applications_controller_test.go b/api/applications/applications_controller_test.go index 144163a8..b09a864d 100644 --- a/api/applications/applications_controller_test.go +++ b/api/applications/applications_controller_test.go @@ -17,7 +17,7 @@ import ( applicationModels "github.com/equinor/radix-api/api/applications/models" environmentModels "github.com/equinor/radix-api/api/environments/models" jobModels "github.com/equinor/radix-api/api/jobs/models" - "github.com/equinor/radix-api/api/metrics" + metricsMock "github.com/equinor/radix-api/api/metrics/mock" controllertest "github.com/equinor/radix-api/api/test" "github.com/equinor/radix-api/api/utils" "github.com/equinor/radix-api/models" @@ -35,6 +35,7 @@ import ( builders "github.com/equinor/radix-operator/pkg/apis/utils" radixfake "github.com/equinor/radix-operator/pkg/client/clientset/versioned/fake" "github.com/golang/mock/gomock" + "github.com/google/uuid" kedafake "github.com/kedacore/keda/v2/pkg/generated/clientset/versioned/fake" prometheusfake "github.com/prometheus-operator/prometheus-operator/pkg/client/versioned/fake" "github.com/stretchr/testify/assert" @@ -92,13 +93,13 @@ func setupTestWithFactory(t *testing.T, handlerFactory ApplicationHandlerFactory return &commonTestUtils, &controllerTestUtils, kubeclient, radixclient, kedaClient, prometheusclient, secretproviderclient, certClient } -func createPrometheusHandlerMock(t *testing.T, radixclient *radixfake.Clientset, mockHandler *func(handler *metrics.MockPrometheusHandler)) *metrics.MockPrometheusHandler { +func createPrometheusHandlerMock(t *testing.T, radixclient *radixfake.Clientset, mockHandler *func(handler *metricsMock.MockPrometheusHandler)) *metricsMock.MockPrometheusHandler { ctrl := gomock.NewController(t) - mockPrometheusHandler := metrics.NewMockPrometheusHandler(ctrl) + mockPrometheusHandler := metricsMock.NewMockPrometheusHandler(ctrl) if mockHandler != nil { (*mockHandler)(mockPrometheusHandler) } else { - mockPrometheusHandler.EXPECT().GetUsedResources(gomock.Any(), radixclient, gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).AnyTimes().Return(&applicationModels.UsedResources{}, nil) + mockPrometheusHandler.EXPECT().GetUsedResources(gomock.Any(), radixclient, gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).AnyTimes().Return(&applicationModels.UsedResources{}, nil) } return mockPrometheusHandler } @@ -1944,7 +1945,6 @@ func Test_GetUsedResources(t *testing.T) { component string duration string since string - ignoreZero bool } type scenario struct { @@ -1964,22 +1964,13 @@ func Test_GetUsedResources(t *testing.T) { }, { name: "Get used resources with arguments", - queryString: "?environment=prod&component=component1&duration=10d&since=2w&ignorezero=true", + queryString: "?environment=prod&component=component1&duration=10d&since=2w", expectedUsedResources: getTestUsedResources(), expectedArgs: expectedArgs{ environment: envName1, component: componentName1, duration: "10d", since: "2w", - ignoreZero: true, - }, - }, - { - name: "Invalid boolean query parameter falls back to false", - expectedUsedResources: getTestUsedResources(), - queryString: "?ignorezero=abc", - expectedArgs: expectedArgs{ - ignoreZero: false, }, }, { @@ -1996,9 +1987,9 @@ func Test_GetUsedResources(t *testing.T) { _, err := commonTestUtils.ApplyRegistration(builders.ARadixRegistration().WithName(appName1)) require.NoError(t, err) - mockHandlerModifier := func(handler *metrics.MockPrometheusHandler) { + mockHandlerModifier := func(handler *metricsMock.MockPrometheusHandler) { args := ts.expectedArgs - handler.EXPECT().GetUsedResources(gomock.Any(), radixClient, appName1, args.environment, args.component, args.duration, args.since, args.ignoreZero). + handler.EXPECT().GetUsedResources(gomock.Any(), radixClient, appName1, args.environment, args.component, args.duration, args.since). Times(1). Return(ts.expectedUsedResources, ts.expectedUsedResourcesError) } @@ -2032,20 +2023,14 @@ func getTestUsedResources() *applicationModels.UsedResources { From: radixutils.FormatTimestamp(time.Now().Add(time.Minute * -10)), To: radixutils.FormatTimestamp(time.Now()), CPU: &applicationModels.UsedResource{ - Min: "1m", - Max: "10m", - Average: "5m", - Min: pointers.Ptr(1.1), - Max: pointers.Ptr(10.12), - Avg: pointers.Ptr(5.56), + Min: pointers.Ptr(1.1), + Max: pointers.Ptr(10.12), + Avg: pointers.Ptr(5.56), }, Memory: &applicationModels.UsedResource{ - Min: "100M", - Max: "1000M", - Average: "500M", - Min: pointers.Ptr(100.1), - Max: pointers.Ptr(1000.12), - Avg: pointers.Ptr(500.56), + Min: pointers.Ptr(100.1), + Max: pointers.Ptr(1000.12), + Avg: pointers.Ptr(500.56), }, Warnings: []string{"warning1", "warning2"}, } diff --git a/api/metrics/internal/prometheus_defaults b/api/metrics/internal/prometheus_defaults new file mode 100644 index 00000000..e69de29b diff --git a/api/metrics/internal/prometheus_defaults.go b/api/metrics/internal/prometheus_defaults.go new file mode 100644 index 00000000..f284370b --- /dev/null +++ b/api/metrics/internal/prometheus_defaults.go @@ -0,0 +1,13 @@ +package internal + +// QueryName Prometheus query name +type QueryName string + +const ( + CpuMax QueryName = "CpuMax" + CpuMin QueryName = "CpuMin" + CpuAvg QueryName = "CpuAvg" + MemoryMax QueryName = "MemoryMax" + MemoryMin QueryName = "MemoryMin" + MemoryAvg QueryName = "MemoryAvg" +) diff --git a/api/metrics/mock/prometheus_client_mock.go b/api/metrics/mock/prometheus_client_mock.go index b8880f2c..c42ab46e 100644 --- a/api/metrics/mock/prometheus_client_mock.go +++ b/api/metrics/mock/prometheus_client_mock.go @@ -8,7 +8,7 @@ import ( context "context" reflect "reflect" - metrics "github.com/equinor/radix-api/api/metrics" + internal "github.com/equinor/radix-api/api/metrics/internal" gomock "github.com/golang/mock/gomock" model "github.com/prometheus/common/model" ) @@ -37,10 +37,10 @@ func (m *MockPrometheusClient) EXPECT() *MockPrometheusClientMockRecorder { } // GetMetrics mocks base method. -func (m *MockPrometheusClient) GetMetrics(ctx context.Context, appName, envName, componentName, duration, since string) (map[metrics.QueryName]model.Value, []string, error) { +func (m *MockPrometheusClient) GetMetrics(ctx context.Context, appName, envName, componentName, duration, since string) (map[internal.QueryName]model.Value, []string, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "GetMetrics", ctx, appName, envName, componentName, duration, since) - ret0, _ := ret[0].(map[metrics.QueryName]model.Value) + ret0, _ := ret[0].(map[internal.QueryName]model.Value) ret1, _ := ret[1].([]string) ret2, _ := ret[2].(error) return ret0, ret1, ret2 diff --git a/api/metrics/prometheus_client.go b/api/metrics/prometheus_client.go index ad8e07a8..1c40efb6 100644 --- a/api/metrics/prometheus_client.go +++ b/api/metrics/prometheus_client.go @@ -5,6 +5,7 @@ import ( "errors" "time" + "github.com/equinor/radix-api/api/metrics/internal" prometheusApi "github.com/prometheus/client_golang/api" prometheusV1 "github.com/prometheus/client_golang/api/prometheus/v1" "github.com/prometheus/common/model" @@ -15,7 +16,7 @@ import ( // PrometheusClient Interface for Prometheus client type PrometheusClient interface { // GetMetrics Get metrics for the application - GetMetrics(ctx context.Context, appName, envName, componentName, duration, since string) (map[QueryName]prometheusModel.Value, []string, error) + GetMetrics(ctx context.Context, appName, envName, componentName, duration, since string) (map[internal.QueryName]prometheusModel.Value, []string, error) } // NewPrometheusClient Constructor for Prometheus client @@ -35,8 +36,8 @@ type client struct { } // GetMetrics Get metrics for the application -func (c *client) GetMetrics(ctx context.Context, appName, envName, componentName, duration, since string) (map[QueryName]prometheusModel.Value, []string, error) { - results := make(map[QueryName]model.Value) +func (c *client) GetMetrics(ctx context.Context, appName, envName, componentName, duration, since string) (map[internal.QueryName]prometheusModel.Value, []string, error) { + results := make(map[internal.QueryName]model.Value) now := time.Now() var warnings []string for metricName, query := range getPrometheusQueries(appName, envName, componentName, duration, since) { diff --git a/api/metrics/prometheus_client_mock.go b/api/metrics/prometheus_client_mock.go deleted file mode 100644 index 843c384b..00000000 --- a/api/metrics/prometheus_client_mock.go +++ /dev/null @@ -1,52 +0,0 @@ -// Code generated by MockGen. DO NOT EDIT. -// Source: ./api/metrics/prometheus_client.go - -// Package mock is a generated GoMock package. -package metrics - -import ( - context "context" - reflect "reflect" - - gomock "github.com/golang/mock/gomock" - model "github.com/prometheus/common/model" -) - -// MockPrometheusClient is a mock of PrometheusClient interface. -type MockPrometheusClient struct { - ctrl *gomock.Controller - recorder *MockPrometheusClientMockRecorder -} - -// MockPrometheusClientMockRecorder is the mock recorder for MockPrometheusClient. -type MockPrometheusClientMockRecorder struct { - mock *MockPrometheusClient -} - -// NewMockPrometheusClient creates a new mock instance. -func NewMockPrometheusClient(ctrl *gomock.Controller) *MockPrometheusClient { - mock := &MockPrometheusClient{ctrl: ctrl} - mock.recorder = &MockPrometheusClientMockRecorder{mock} - return mock -} - -// EXPECT returns an object that allows the caller to indicate expected use. -func (m *MockPrometheusClient) EXPECT() *MockPrometheusClientMockRecorder { - return m.recorder -} - -// GetMetrics mocks base method. -func (m *MockPrometheusClient) GetMetrics(ctx context.Context, appName, envName, componentName, duration, since string) (map[QueryName]model.Value, []string, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetMetrics", ctx, appName, envName, componentName, duration, since) - ret0, _ := ret[0].(map[QueryName]model.Value) - ret1, _ := ret[1].([]string) - ret2, _ := ret[2].(error) - return ret0, ret1, ret2 -} - -// GetMetrics indicates an expected call of GetMetrics. -func (mr *MockPrometheusClientMockRecorder) GetMetrics(ctx, appName, envName, componentName, duration, since interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetMetrics", reflect.TypeOf((*MockPrometheusClient)(nil).GetMetrics), ctx, appName, envName, componentName, duration, since) -} diff --git a/api/metrics/prometheus_handler.go b/api/metrics/prometheus_handler.go index 59afbb09..53ff1a9c 100644 --- a/api/metrics/prometheus_handler.go +++ b/api/metrics/prometheus_handler.go @@ -7,6 +7,7 @@ import ( "time" applicationModels "github.com/equinor/radix-api/api/applications/models" + "github.com/equinor/radix-api/api/metrics/internal" radixutils "github.com/equinor/radix-common/utils" "github.com/equinor/radix-common/utils/pointers" "github.com/equinor/radix-operator/pkg/apis/utils" @@ -17,19 +18,10 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) -// QueryName Prometheus query name -type QueryName string - const ( - cpuMax QueryName = "cpuMax" - cpuMin QueryName = "cpuMin" - cpuAvg QueryName = "cpuAvg" - memoryMax QueryName = "memoryMax" - memoryMin QueryName = "memoryMin" - memoryAvg QueryName = "memoryAvg" - durationExpression = `^[0-9]{1,5}[mhdw]$` - defaultDuration = "30d" - defaultOffset = "" + durationExpression = `^[0-9]{1,5}[mhdw]$` + defaultDuration = "30d" + defaultOffset = "" ) // PrometheusHandler Interface for Prometheus handler @@ -76,15 +68,15 @@ func (pc *handler) GetUsedResources(ctx context.Context, radixClient radixclient return resources, nil } -func getUsedResourcesByMetrics(ctx context.Context, results map[QueryName]prometheusModel.Value, queryDuration time.Duration, querySince time.Duration) *applicationModels.UsedResources { +func getUsedResourcesByMetrics(ctx context.Context, results map[internal.QueryName]prometheusModel.Value, queryDuration time.Duration, querySince time.Duration) *applicationModels.UsedResources { usedCpuResource := applicationModels.UsedResource{} - usedCpuResource.Min = getCpuMetricValue(ctx, results, cpuMin) - usedCpuResource.Max = getCpuMetricValue(ctx, results, cpuMax) - usedCpuResource.Avg = getCpuMetricValue(ctx, results, cpuAvg) + usedCpuResource.Min = getCpuMetricValue(ctx, results, internal.CpuMin) + usedCpuResource.Max = getCpuMetricValue(ctx, results, internal.CpuMax) + usedCpuResource.Avg = getCpuMetricValue(ctx, results, internal.CpuAvg) usedMemoryResource := applicationModels.UsedResource{} - usedMemoryResource.Min = getMemoryMetricValue(ctx, results, memoryMin) - usedMemoryResource.Max = getMemoryMetricValue(ctx, results, memoryMax) - usedMemoryResource.Avg = getMemoryMetricValue(ctx, results, memoryAvg) + usedMemoryResource.Min = getMemoryMetricValue(ctx, results, internal.MemoryMin) + usedMemoryResource.Max = getMemoryMetricValue(ctx, results, internal.MemoryMax) + usedMemoryResource.Avg = getMemoryMetricValue(ctx, results, internal.MemoryAvg) now := time.Now() return &applicationModels.UsedResources{ From: radixutils.FormatTimestamp(now.Add(-queryDuration)), @@ -105,21 +97,21 @@ func parseQueryDuration(duration string, defaultValue string) (time.Duration, st return time.Duration(parsedDuration), duration, err } -func getCpuMetricValue(ctx context.Context, queryResults map[QueryName]prometheusModel.Value, queryName QueryName) *float64 { +func getCpuMetricValue(ctx context.Context, queryResults map[internal.QueryName]prometheusModel.Value, queryName internal.QueryName) *float64 { if value, ok := getMetricsValue(ctx, queryResults, queryName); ok { return pointers.Ptr(value) } return nil } -func getMemoryMetricValue(ctx context.Context, queryResults map[QueryName]prometheusModel.Value, queryName QueryName) *float64 { +func getMemoryMetricValue(ctx context.Context, queryResults map[internal.QueryName]prometheusModel.Value, queryName internal.QueryName) *float64 { if value, ok := getMetricsValue(ctx, queryResults, queryName); ok { return pointers.Ptr(value) } return nil } -func getMetricsValue(ctx context.Context, queryResults map[QueryName]prometheusModel.Value, queryName QueryName) (float64, bool) { +func getMetricsValue(ctx context.Context, queryResults map[internal.QueryName]prometheusModel.Value, queryName internal.QueryName) (float64, bool) { queryResult, ok := queryResults[queryName] if !ok { return 0.0, false @@ -136,7 +128,7 @@ func getMetricsValue(ctx context.Context, queryResults map[QueryName]prometheusM return sum, true } -func getPrometheusQueries(appName, envName, componentName, duration, since string) map[QueryName]string { +func getPrometheusQueries(appName, envName, componentName, duration, since string) map[internal.QueryName]string { environmentFilter := radixutils.TernaryString(envName == "", fmt.Sprintf(`,namespace=~"%s-.*"`, appName), fmt.Sprintf(`,namespace="%s"`, utils.GetEnvironmentNamespace(appName, envName))) @@ -144,13 +136,13 @@ func getPrometheusQueries(appName, envName, componentName, duration, since strin offsetFilter := radixutils.TernaryString(since == "", "", fmt.Sprintf(` offset %s `, since)) cpuUsageQuery := fmt.Sprintf(`sum by (namespace, container) (rate(container_cpu_usage_seconds_total{container!="", namespace!="%s-app" %s %s} [1h])) [%s:] %s`, appName, environmentFilter, componentFilter, duration, offsetFilter) memoryUsageQuery := fmt.Sprintf(`sum by (namespace, container) (container_memory_usage_bytes{container!="", namespace!="%s-app" %s %s} > 0) [%s:] %s`, appName, environmentFilter, componentFilter, duration, offsetFilter) - queries := map[QueryName]string{ - cpuMax: fmt.Sprintf("max_over_time(%s)", cpuUsageQuery), - cpuMin: fmt.Sprintf("min_over_time(%s)", cpuUsageQuery), - cpuAvg: fmt.Sprintf("avg_over_time(%s)", cpuUsageQuery), - memoryMax: fmt.Sprintf("max_over_time(%s)", memoryUsageQuery), - memoryMin: fmt.Sprintf("min_over_time(%s)", memoryUsageQuery), - memoryAvg: fmt.Sprintf("avg_over_time(%s)", memoryUsageQuery), + queries := map[internal.QueryName]string{ + internal.CpuMax: fmt.Sprintf("max_over_time(%s)", cpuUsageQuery), + internal.CpuMin: fmt.Sprintf("min_over_time(%s)", cpuUsageQuery), + internal.CpuAvg: fmt.Sprintf("avg_over_time(%s)", cpuUsageQuery), + internal.MemoryMax: fmt.Sprintf("max_over_time(%s)", memoryUsageQuery), + internal.MemoryMin: fmt.Sprintf("min_over_time(%s)", memoryUsageQuery), + internal.MemoryAvg: fmt.Sprintf("avg_over_time(%s)", memoryUsageQuery), } return queries } diff --git a/api/metrics/prometheus_handler_mock.go b/api/metrics/prometheus_handler_mock.go deleted file mode 100644 index 8abc102b..00000000 --- a/api/metrics/prometheus_handler_mock.go +++ /dev/null @@ -1,52 +0,0 @@ -// Code generated by MockGen. DO NOT EDIT. -// Source: ./api/metrics/prometheus_handler.go - -// Package mock is a generated GoMock package. -package metrics - -import ( - context "context" - reflect "reflect" - - models "github.com/equinor/radix-api/api/applications/models" - versioned "github.com/equinor/radix-operator/pkg/client/clientset/versioned" - gomock "github.com/golang/mock/gomock" -) - -// MockPrometheusHandler is a mock of PrometheusHandler interface. -type MockPrometheusHandler struct { - ctrl *gomock.Controller - recorder *MockPrometheusHandlerMockRecorder -} - -// MockPrometheusHandlerMockRecorder is the mock recorder for MockPrometheusHandler. -type MockPrometheusHandlerMockRecorder struct { - mock *MockPrometheusHandler -} - -// NewMockPrometheusHandler creates a new mock instance. -func NewMockPrometheusHandler(ctrl *gomock.Controller) *MockPrometheusHandler { - mock := &MockPrometheusHandler{ctrl: ctrl} - mock.recorder = &MockPrometheusHandlerMockRecorder{mock} - return mock -} - -// EXPECT returns an object that allows the caller to indicate expected use. -func (m *MockPrometheusHandler) EXPECT() *MockPrometheusHandlerMockRecorder { - return m.recorder -} - -// GetUsedResources mocks base method. -func (m *MockPrometheusHandler) GetUsedResources(ctx context.Context, radixClient versioned.Interface, appName, envName, componentName, duration, since string, ignoreZero bool) (*models.UsedResources, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetUsedResources", ctx, radixClient, appName, envName, componentName, duration, since, ignoreZero) - ret0, _ := ret[0].(*models.UsedResources) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// GetUsedResources indicates an expected call of GetUsedResources. -func (mr *MockPrometheusHandlerMockRecorder) GetUsedResources(ctx, radixClient, appName, envName, componentName, duration, since, ignoreZero interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetUsedResources", reflect.TypeOf((*MockPrometheusHandler)(nil).GetUsedResources), ctx, radixClient, appName, envName, componentName, duration, since, ignoreZero) -} diff --git a/api/metrics/prometheus_handler_test.go b/api/metrics/prometheus_handler_test.go index c3020efb..beb8abdd 100644 --- a/api/metrics/prometheus_handler_test.go +++ b/api/metrics/prometheus_handler_test.go @@ -6,6 +6,8 @@ import ( "testing" applicationModels "github.com/equinor/radix-api/api/applications/models" + "github.com/equinor/radix-api/api/metrics/internal" + "github.com/equinor/radix-api/api/metrics/mock" "github.com/equinor/radix-common/utils/pointers" commontest "github.com/equinor/radix-operator/pkg/apis/test" builders "github.com/equinor/radix-operator/pkg/apis/utils" @@ -27,7 +29,7 @@ type args struct { type scenario struct { name string args args - clientReturnsMetrics map[QueryName]model.Value + clientReturnsMetrics map[internal.QueryName]model.Value expectedUsedResources *applicationModels.UsedResources expectedWarnings []string expectedError error @@ -88,7 +90,7 @@ func Test_handler_GetUsedResources(t *testing.T) { _, err := commonTestUtils.ApplyRegistration(builders.ARadixRegistration().WithName(appName1)) require.NoError(t, err) ctrl := gomock.NewController(t) - mockPrometheusClient := NewMockPrometheusClient(ctrl) + mockPrometheusClient := mock.NewMockPrometheusClient(ctrl) mockPrometheusClient.EXPECT().GetMetrics(gomock.Any(), appName1, ts.args.envName, ts.args.componentName, ts.args.duration, ts.args.since). Return(ts.clientReturnsMetrics, ts.expectedWarnings, ts.expectedError) @@ -125,29 +127,29 @@ func assertExpected(t *testing.T, ts scenario, got *applicationModels.UsedResour assert.NotEmpty(t, got.To, "To") } -func getClientReturnsMetrics() map[QueryName]model.Value { - return map[QueryName]model.Value{ - cpuMax: model.Vector{ +func getClientReturnsMetrics() map[internal.QueryName]model.Value { + return map[internal.QueryName]model.Value{ + internal.CpuMax: model.Vector{ &model.Sample{Metric: map[model.LabelName]model.LabelValue{metricsKeyContainer: "server", metricsKeyNamespace: "app-dev"}, Value: 0.008123134}, &model.Sample{Metric: map[model.LabelName]model.LabelValue{metricsKeyContainer: "server", metricsKeyNamespace: "app-prod"}, Value: 0.126576764}, }, - cpuAvg: model.Vector{ + internal.CpuAvg: model.Vector{ &model.Sample{Metric: map[model.LabelName]model.LabelValue{metricsKeyContainer: "server", metricsKeyNamespace: "app-dev"}, Value: 0.0023213546}, &model.Sample{Metric: map[model.LabelName]model.LabelValue{metricsKeyContainer: "server", metricsKeyNamespace: "app-prod"}, Value: 0.047546577}, }, - cpuMin: model.Vector{ + internal.CpuMin: model.Vector{ &model.Sample{Metric: map[model.LabelName]model.LabelValue{metricsKeyContainer: "server", metricsKeyNamespace: "app-dev"}, Value: 0.0019874}, &model.Sample{Metric: map[model.LabelName]model.LabelValue{metricsKeyContainer: "server", metricsKeyNamespace: "app-prod"}, Value: 0.02321456}, }, - memoryMax: model.Vector{ + internal.MemoryMax: model.Vector{ &model.Sample{Metric: map[model.LabelName]model.LabelValue{metricsKeyContainer: "server", metricsKeyNamespace: "app-dev"}, Value: 123456.3475613}, &model.Sample{Metric: map[model.LabelName]model.LabelValue{metricsKeyContainer: "server", metricsKeyNamespace: "app-prod"}, Value: 234567.34575412}, }, - memoryAvg: model.Vector{ + internal.MemoryAvg: model.Vector{ &model.Sample{Metric: map[model.LabelName]model.LabelValue{metricsKeyContainer: "server", metricsKeyNamespace: "app-dev"}, Value: 90654.81}, &model.Sample{Metric: map[model.LabelName]model.LabelValue{metricsKeyContainer: "server", metricsKeyNamespace: "app-prod"}, Value: 150654.12398771}, }, - memoryMin: model.Vector{ + internal.MemoryMin: model.Vector{ &model.Sample{Metric: map[model.LabelName]model.LabelValue{metricsKeyContainer: "server", metricsKeyNamespace: "app-dev"}, Value: 56731.2324654}, &model.Sample{Metric: map[model.LabelName]model.LabelValue{metricsKeyContainer: "server", metricsKeyNamespace: "app-prod"}, Value: 112234.456789}, },