diff --git a/cmd/jaeger/internal/extension/jaegerquery/server.go b/cmd/jaeger/internal/extension/jaegerquery/server.go index c2221175d79..b75ea96b34f 100644 --- a/cmd/jaeger/internal/extension/jaegerquery/server.go +++ b/cmd/jaeger/internal/extension/jaegerquery/server.go @@ -69,7 +69,7 @@ func (s *server) Start(_ context.Context, host component.Host) error { } qs := querysvc.NewQueryService(spanReader, depReader, opts) - mqs, err := s.createMetricReader(host) + mqs, err := s.createMetricReader(&opts, host) if err != nil { return err } @@ -128,7 +128,7 @@ func (s *server) addArchiveStorage(opts *querysvc.QueryServiceOptions, host comp return nil } -func (s *server) createMetricReader(host component.Host) (metricsstore.Reader, error) { +func (s *server) createMetricReader(opts *querysvc.QueryServiceOptions, host component.Host) (metricsstore.Reader, error) { if s.config.MetricStorage == "" { s.telset.Logger.Info("Metric storage not configured") return disabled.NewMetricsReader() @@ -143,6 +143,7 @@ func (s *server) createMetricReader(host component.Host) (metricsstore.Reader, e if err != nil { return nil, fmt.Errorf("cannot create metrics reader %w", err) } + opts.MetricsReader = metricsReader return metricsReader, err } diff --git a/cmd/jaeger/internal/extension/jaegerquery/server_test.go b/cmd/jaeger/internal/extension/jaegerquery/server_test.go index e51f7c697b1..c3ab8a4b753 100644 --- a/cmd/jaeger/internal/extension/jaegerquery/server_test.go +++ b/cmd/jaeger/internal/extension/jaegerquery/server_test.go @@ -293,6 +293,7 @@ func TestServerAddMetricsStorage(t *testing.T) { tests := []struct { name string + qSvcOpts *querysvc.QueryServiceOptions config *Config extension component.Component expectedOutput string @@ -301,6 +302,7 @@ func TestServerAddMetricsStorage(t *testing.T) { { name: "Metrics storage unset", config: &Config{}, + qSvcOpts: &querysvc.QueryServiceOptions{}, expectedOutput: `{"level":"info","msg":"Metric storage not configured"}` + "\n", expectedErr: "", }, @@ -309,6 +311,7 @@ func TestServerAddMetricsStorage(t *testing.T) { config: &Config{ MetricStorage: "random-value", }, + qSvcOpts: &querysvc.QueryServiceOptions{}, expectedOutput: "", expectedErr: "cannot find metrics storage factory: cannot find extension", }, @@ -324,7 +327,7 @@ func TestServerAddMetricsStorage(t *testing.T) { if tt.extension != nil { host = storagetest.NewStorageHost().WithExtension(jaegerstorage.ID, tt.extension) } - _, err := server.createMetricReader(host) + _, err := server.createMetricReader(tt.qSvcOpts, host) if tt.expectedErr == "" { require.NoError(t, err) } else { diff --git a/cmd/query/app/querysvc/query_service.go b/cmd/query/app/querysvc/query_service.go index 06ec79d94a4..6fd4675e3be 100644 --- a/cmd/query/app/querysvc/query_service.go +++ b/cmd/query/app/querysvc/query_service.go @@ -25,6 +25,7 @@ import ( "github.com/jaegertracing/jaeger/model/adjuster" "github.com/jaegertracing/jaeger/storage" "github.com/jaegertracing/jaeger/storage/dependencystore" + "github.com/jaegertracing/jaeger/storage/metricsstore" "github.com/jaegertracing/jaeger/storage/spanstore" ) @@ -38,13 +39,14 @@ const ( type QueryServiceOptions struct { ArchiveSpanReader spanstore.Reader ArchiveSpanWriter spanstore.Writer + MetricsReader metricsstore.Reader Adjuster adjuster.Adjuster } // StorageCapabilities is a feature flag for query service type StorageCapabilities struct { ArchiveStorage bool `json:"archiveStorage"` - // TODO: Maybe add metrics Storage here + MetricStorage bool `json:"metricsStorage"` // SupportRegex bool // SupportTagFilter bool } @@ -134,6 +136,7 @@ func (qs QueryService) GetDependencies(ctx context.Context, endTs time.Time, loo func (qs QueryService) GetCapabilities() StorageCapabilities { return StorageCapabilities{ ArchiveStorage: qs.options.hasArchiveStorage(), + MetricStorage: qs.options.hasMetricStorage(), } } @@ -171,3 +174,9 @@ func (opts *QueryServiceOptions) InitArchiveStorage(storageFactory storage.Facto func (opts *QueryServiceOptions) hasArchiveStorage() bool { return opts.ArchiveSpanReader != nil && opts.ArchiveSpanWriter != nil } + +// hasMetricsStorage returns true if metric storage reader is initialized. +func (opts *QueryServiceOptions) hasMetricStorage() bool { + // TODO: NEED to pass the reader when the metricsreader is created + return opts.MetricsReader != nil +} diff --git a/cmd/query/app/static_handler_test.go b/cmd/query/app/static_handler_test.go index a7a2bb8b0b6..24a31eb691a 100644 --- a/cmd/query/app/static_handler_test.go +++ b/cmd/query/app/static_handler_test.go @@ -87,7 +87,7 @@ func TestRegisterStaticHandler(t *testing.T) { logAccess: true, UIConfigPath: "", expectedUIConfig: "JAEGER_CONFIG=DEFAULT_CONFIG;", - expectedStorageCapabilities: `JAEGER_STORAGE_CAPABILITIES = {"archiveStorage":false};`, + expectedStorageCapabilities: `JAEGER_STORAGE_CAPABILITIES = {"archiveStorage":false,"metricsStorage":false};`, }, { basePath: "/", @@ -96,7 +96,7 @@ func TestRegisterStaticHandler(t *testing.T) { expectedBaseHTML: `