Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Enable SPM in Jaeger v2 #5681

Merged
merged 71 commits into from
Jul 24, 2024
Merged
Changes from 1 commit
Commits
Show all changes
71 commits
Select commit Hold shift + click to select a range
6ed4f23
Create setup for enabling SPM in v2
FlamingSaint Jun 26, 2024
dc85461
Add connector to the config and add suggested changes to the Makefile
FlamingSaint Jun 27, 2024
e5d9850
Add integration test for SPM v2
FlamingSaint Jun 27, 2024
1bf0ece
fix
FlamingSaint Jun 27, 2024
8ba9818
Add suggested changes
FlamingSaint Jun 28, 2024
6f61680
Add suggested changes
FlamingSaint Jun 28, 2024
ff42224
fix CI
FlamingSaint Jun 28, 2024
0dbda14
Add changes
FlamingSaint Jun 28, 2024
591fda9
fix
FlamingSaint Jun 28, 2024
31ffea5
Add quotes
FlamingSaint Jun 28, 2024
ea0d5ec
Fix CI
FlamingSaint Jun 28, 2024
fb4b0ce
Add prometheusexporter to components.go
FlamingSaint Jun 28, 2024
231e397
Merge branch 'main' into spm
FlamingSaint Jul 3, 2024
6f42591
fix conflicts
FlamingSaint Jul 3, 2024
0cb5f7a
Use microsim v0.4.1 in docker-compose-v2.yml
FlamingSaint Jul 3, 2024
91987df
Added suggested changes and ran go mod tidy
FlamingSaint Jul 3, 2024
c49e322
Merge branch 'main' into spm
FlamingSaint Jul 3, 2024
43b2e72
Add back the endpoint
FlamingSaint Jul 3, 2024
5e9d0e4
Merge branch 'main' into spm
FlamingSaint Jul 3, 2024
977c9d1
Merge branch 'main' into spm
FlamingSaint Jul 3, 2024
e926e8a
Merge branch 'jaegertracing:main' into spm
FlamingSaint Jul 6, 2024
4ba0ad0
Add config for metrics_storage
FlamingSaint Jul 6, 2024
5675055
Separate TracesBackend and MetricsBackend
FlamingSaint Jul 6, 2024
6479836
Add suggested change
FlamingSaint Jul 6, 2024
14b94fe
Initialize the metrics storage in extensions.go
FlamingSaint Jul 7, 2024
c986181
Use singular naming
FlamingSaint Jul 8, 2024
5c5d701
fix naming
FlamingSaint Jul 8, 2024
21ea847
Add config options for prometheus
FlamingSaint Jul 8, 2024
1b6c9ca
Merge branch 'main' into spm
FlamingSaint Jul 8, 2024
118c8fb
Merge branch 'main' into spm
FlamingSaint Jul 8, 2024
44f2627
Resolve conflicts
FlamingSaint Jul 8, 2024
be42117
initialize metrics storage in extension.go
FlamingSaint Jul 8, 2024
c872291
Add changes
FlamingSaint Jul 8, 2024
85442e8
fix
FlamingSaint Jul 8, 2024
865d2ee
Add changes
FlamingSaint Jul 9, 2024
c6abf8b
WIP: Passed metric storage to the query service
FlamingSaint Jul 14, 2024
21f66f9
Merge branch 'main' into spm
FlamingSaint Jul 14, 2024
fa04c99
Use telset.logger instead of logger
FlamingSaint Jul 14, 2024
636191b
fix: generate mocks
FlamingSaint Jul 14, 2024
c39f8ec
Use Initialize instead of InitializeMetricsFactory
FlamingSaint Jul 14, 2024
f871540
Remove comments
FlamingSaint Jul 14, 2024
78ca11f
fix
FlamingSaint Jul 14, 2024
ed90e30
add changes
FlamingSaint Jul 14, 2024
7d4ee8e
resolve conflicts
FlamingSaint Jul 20, 2024
bae9e39
Merge branch 'main' into spm
FlamingSaint Jul 20, 2024
90176e2
Simplify
yurishkuro Jul 20, 2024
3a937b3
Simplify
yurishkuro Jul 20, 2024
f9bf6ba
Clean-up
yurishkuro Jul 20, 2024
176c332
fix
yurishkuro Jul 20, 2024
50e312c
Clean-up
yurishkuro Jul 20, 2024
f105bc9
fix
yurishkuro Jul 20, 2024
0cdb5ca
Fixes
yurishkuro Jul 20, 2024
db32afe
missed the file
yurishkuro Jul 20, 2024
2034502
Catch-all via wildcard
yurishkuro Jul 20, 2024
9d2f9b2
DRY code, rename public methods to be more consistent
yurishkuro Jul 20, 2024
4f87e23
Add changes
FlamingSaint Jul 21, 2024
7da08f3
Merge branch 'main' into spm
FlamingSaint Jul 22, 2024
0aefd7b
Increase code coverage
FlamingSaint Jul 22, 2024
81bc142
fix lint
FlamingSaint Jul 22, 2024
2e36abe
fix
FlamingSaint Jul 22, 2024
060740b
Increase coverage
FlamingSaint Jul 22, 2024
8f0ee2b
Increase coverage
FlamingSaint Jul 22, 2024
b17125a
Add changes
FlamingSaint Jul 23, 2024
f7a749e
fix
FlamingSaint Jul 23, 2024
64afe89
Merge branch 'main' into spm
FlamingSaint Jul 23, 2024
0301e64
fix
FlamingSaint Jul 24, 2024
4c51ab2
Remove extra spaces
FlamingSaint Jul 24, 2024
96649c9
Increase code coverage
FlamingSaint Jul 24, 2024
032a860
Increase code cov
FlamingSaint Jul 24, 2024
3ec5360
Increase code cov
FlamingSaint Jul 24, 2024
d641e36
Add changes
FlamingSaint Jul 24, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
DRY code, rename public methods to be more consistent
Signed-off-by: Yuri Shkuro <[email protected]>
yurishkuro committed Jul 20, 2024
commit 9d2f9b21b8b374f74135ba1bc424e17dca745cff
Original file line number Diff line number Diff line change
@@ -44,6 +44,8 @@ type mockStorageExt struct {
metricsFactory *factoryMocks.MetricsFactory
}

var _ jaegerstorage.Extension = (*mockStorageExt)(nil)

func (*mockStorageExt) Start(context.Context, component.Host) error {
panic("not implemented")
}
@@ -52,14 +54,14 @@ func (*mockStorageExt) Shutdown(context.Context) error {
panic("not implemented")
}

func (m *mockStorageExt) Factory(name string) (storage.Factory, bool) {
func (m *mockStorageExt) TraceStorageFactory(name string) (storage.Factory, bool) {
if m.name == name {
return m.factory, true
}
return nil, false
}

func (m *mockStorageExt) MetricsFactory(name string) (storage.MetricsFactory, bool) {
func (m *mockStorageExt) MetricStorageFactory(name string) (storage.MetricsFactory, bool) {
if m.name == name {
return m.metricsFactory, true
}
4 changes: 2 additions & 2 deletions cmd/jaeger/internal/extension/jaegerquery/server_test.go
Original file line number Diff line number Diff line change
@@ -87,14 +87,14 @@ type fakeStorageExt struct{}

var _ jaegerstorage.Extension = (*fakeStorageExt)(nil)

func (fakeStorageExt) Factory(name string) (storage.Factory, bool) {
func (fakeStorageExt) TraceStorageFactory(name string) (storage.Factory, bool) {
if name == "need-factory-error" {
return nil, false
}
return fakeFactory{name: name}, true
}

func (fakeStorageExt) MetricsFactory(name string) (storage.MetricsFactory, bool) {
func (fakeStorageExt) MetricStorageFactory(name string) (storage.MetricsFactory, bool) {
if name == "need-factory-error" {
return nil, false
}
64 changes: 34 additions & 30 deletions cmd/jaeger/internal/extension/jaegerstorage/extension.go
Original file line number Diff line number Diff line change
@@ -28,8 +28,8 @@

type Extension interface {
extension.Extension
Factory(name string) (storage.Factory, bool)
MetricsFactory(name string) (storage.MetricsFactory, bool)
TraceStorageFactory(name string) (storage.Factory, bool)
MetricStorageFactory(name string) (storage.MetricsFactory, bool)
}

type storageExt struct {
@@ -41,20 +41,11 @@

// GetStorageFactory locates the extension in Host and retrieves a storage factory from it with the given name.
func GetStorageFactory(name string, host component.Host) (storage.Factory, error) {
var comp component.Component
for id, ext := range host.GetExtensions() {
if id.Type() == componentType {
comp = ext
break
}
}
if comp == nil {
return nil, fmt.Errorf(
"cannot find extension '%s' (make sure it's defined earlier in the config)",
componentType,
)
ext, err := findExtension(host)
if err != nil {
return nil, err
}
f, ok := comp.(Extension).Factory(name)
f, ok := ext.TraceStorageFactory(name)
if !ok {
return nil, fmt.Errorf(
"cannot find definition of storage '%s' in the configuration for extension '%s'",
@@ -65,28 +56,19 @@
}

// GetMetricsFactory locates the extension in Host and retrieves a metrics factory from it with the given name.
func GetMetricsFactory(name string, host component.Host) (storage.MetricsFactory, error) {
var comp component.Component
for id, ext := range host.GetExtensions() {
if id.Type() == componentType {
comp = ext
break
}
}
if comp == nil {
return nil, fmt.Errorf(
"cannot find extension '%s' (make sure it's defined earlier in the config)",
componentType,
)
ext, err := findExtension(host)
if err != nil {
return nil, err

Check warning on line 62 in cmd/jaeger/internal/extension/jaegerstorage/extension.go

Codecov / codecov/patch

cmd/jaeger/internal/extension/jaegerstorage/extension.go#L59-L62

Added lines #L59 - L62 were not covered by tests
}
mf, ok := comp.(Extension).MetricsFactory(name)
mf, ok := ext.MetricStorageFactory(name)

Check warning on line 64 in cmd/jaeger/internal/extension/jaegerstorage/extension.go

Codecov / codecov/patch

cmd/jaeger/internal/extension/jaegerstorage/extension.go#L64

Added line #L64 was not covered by tests
if !ok {
return nil, fmt.Errorf(
"cannot find metric storage '%s' declared by '%s' extension",

Check warning on line 67 in cmd/jaeger/internal/extension/jaegerstorage/extension.go

Codecov / codecov/patch

cmd/jaeger/internal/extension/jaegerstorage/extension.go#L67

Added line #L67 was not covered by tests
name, componentType,
)
}
return mf, nil

Check warning on line 71 in cmd/jaeger/internal/extension/jaegerstorage/extension.go

Codecov / codecov/patch

cmd/jaeger/internal/extension/jaegerstorage/extension.go#L71

Added line #L71 was not covered by tests
}

func GetStorageFactoryV2(name string, host component.Host) (spanstore.Factory, error) {
@@ -98,6 +80,28 @@
return factoryadapter.NewFactory(f), nil
}

func findExtension(host component.Host) (Extension, error) {
var id component.ID
var comp component.Component
for i, ext := range host.GetExtensions() {
if i.Type() == componentType {
id, comp = i, ext
break
}
}
if comp == nil {
return nil, fmt.Errorf(
"cannot find extension '%s' (make sure it's defined earlier in the config)",
componentType,
)
}
ext, ok := comp.(Extension)
if !ok {
return nil, fmt.Errorf("extension '%s' is not of expected type '%s'", id, componentType)

Check warning on line 100 in cmd/jaeger/internal/extension/jaegerstorage/extension.go

Codecov / codecov/patch

cmd/jaeger/internal/extension/jaegerstorage/extension.go#L100

Added line #L100 was not covered by tests
}
return ext, nil
}

func newStorageExt(config *Config, telset component.TelemetrySettings) *storageExt {
return &storageExt{
config: config,
@@ -135,16 +139,16 @@
}

for metricStorageName, cfg := range s.config.MetricBackends {
s.telset.Logger.Sugar().Infof("Initializing metrics storage '%s'", metricStorageName)
var metricsFactory storage.MetricsFactory
var err error
if cfg.Prometheus != nil {
metricsFactory, err = prometheus.NewFactoryWithConfig(*cfg.Prometheus, s.telset.Logger)

Check warning on line 146 in cmd/jaeger/internal/extension/jaegerstorage/extension.go

Codecov / codecov/patch

cmd/jaeger/internal/extension/jaegerstorage/extension.go#L142-L146

Added lines #L142 - L146 were not covered by tests
}
if err != nil {
return fmt.Errorf("failed to initialize metrics storage '%s': %w", metricStorageName, err)

Check warning on line 149 in cmd/jaeger/internal/extension/jaegerstorage/extension.go

Codecov / codecov/patch

cmd/jaeger/internal/extension/jaegerstorage/extension.go#L148-L149

Added lines #L148 - L149 were not covered by tests
}
s.metricsFactories[metricStorageName] = metricsFactory

Check warning on line 151 in cmd/jaeger/internal/extension/jaegerstorage/extension.go

Codecov / codecov/patch

cmd/jaeger/internal/extension/jaegerstorage/extension.go#L151

Added line #L151 was not covered by tests
}

return nil
@@ -163,12 +167,12 @@
return errors.Join(errs...)
}

func (s *storageExt) Factory(name string) (storage.Factory, bool) {
func (s *storageExt) TraceStorageFactory(name string) (storage.Factory, bool) {
f, ok := s.factories[name]
return f, ok
}

func (s *storageExt) MetricsFactory(name string) (storage.MetricsFactory, bool) {
func (s *storageExt) MetricStorageFactory(name string) (storage.MetricsFactory, bool) {
mf, ok := s.metricsFactories[name]
return mf, ok

Check warning on line 177 in cmd/jaeger/internal/extension/jaegerstorage/extension.go

Codecov / codecov/patch

cmd/jaeger/internal/extension/jaegerstorage/extension.go#L175-L177

Added lines #L175 - L177 were not covered by tests
}
Original file line number Diff line number Diff line change
@@ -50,14 +50,14 @@ func (*mockStorageExt) Shutdown(context.Context) error {
panic("not implemented")
}

func (m *mockStorageExt) Factory(name string) (storage.Factory, bool) {
func (m *mockStorageExt) TraceStorageFactory(name string) (storage.Factory, bool) {
if m.name == name {
return m.factory, true
}
return nil, false
}

func (m *mockStorageExt) MetricsFactory(name string) (storage.MetricsFactory, bool) {
func (m *mockStorageExt) MetricStorageFactory(name string) (storage.MetricsFactory, bool) {
if m.name == name {
return m.metricsFactory, true
}

Unchanged files with check annotations Beta

mqs, err := s.createMetricStorage(host)
if err != nil {
return err

Check warning on line 76 in cmd/jaeger/internal/extension/jaegerquery/server.go

Codecov / codecov/patch

cmd/jaeger/internal/extension/jaegerquery/server.go#L76

Added line #L76 was not covered by tests
}
tm := tenancy.NewManager(&s.config.Tenancy)
return disabled.NewMetricsReader()
}
mf, err := jaegerstorage.GetMetricsFactory(s.config.MetricStorage, host)
if err != nil {
return nil, fmt.Errorf("cannot find metrics storage factory: %w", err)

Check warning on line 141 in cmd/jaeger/internal/extension/jaegerquery/server.go

Codecov / codecov/patch

cmd/jaeger/internal/extension/jaegerquery/server.go#L139-L141

Added lines #L139 - L141 were not covered by tests
}
metricsReader, err := mf.CreateMetricsReader()
if errors.Is(err, storage.ErrMetricStorageNotConfigured) || errors.Is(err, storage.ErrMetricStorageNotSupported) {
s.telset.Logger.Info("Metric storage not created", zap.Error(err))
return disabled.NewMetricsReader()

Check warning on line 147 in cmd/jaeger/internal/extension/jaegerquery/server.go

Codecov / codecov/patch

cmd/jaeger/internal/extension/jaegerquery/server.go#L144-L147

Added lines #L144 - L147 were not covered by tests
}
return metricsReader, err

Check warning on line 149 in cmd/jaeger/internal/extension/jaegerquery/server.go

Codecov / codecov/patch

cmd/jaeger/internal/extension/jaegerquery/server.go#L149

Added line #L149 was not covered by tests
}
func (s *server) makeQueryOptions() *queryApp.QueryOptions {
return nil
}
func (cfg *MetricBackends) Unmarshal(conf *confmap.Conf) error {

Check warning on line 110 in cmd/jaeger/internal/extension/jaegerstorage/config.go

Codecov / codecov/patch

cmd/jaeger/internal/extension/jaegerstorage/config.go#L110

Added line #L110 was not covered by tests
// apply defaults
if conf.IsSet("prometheus") {
v := prometheus.DefaultConfig()
cfg.Prometheus = &v

Check warning on line 114 in cmd/jaeger/internal/extension/jaegerstorage/config.go

Codecov / codecov/patch

cmd/jaeger/internal/extension/jaegerstorage/config.go#L112-L114

Added lines #L112 - L114 were not covered by tests
}
return conf.Unmarshal(cfg)

Check warning on line 116 in cmd/jaeger/internal/extension/jaegerstorage/config.go

Codecov / codecov/patch

cmd/jaeger/internal/extension/jaegerstorage/config.go#L116

Added line #L116 was not covered by tests
}
NormalizeDuration bool `mapstructure:"normalize_duration"`
}
func (c *Configuration) Validate() error {
_, err := govalidator.ValidateStruct(c)
return err

Check warning on line 42 in pkg/prometheus/config/config.go

Codecov / codecov/patch

pkg/prometheus/config/config.go#L40-L42

Added lines #L40 - L42 were not covered by tests
}
func NewFactoryWithConfig(
cfg config.Configuration,
logger *zap.Logger,
) (*Factory, error) {
if err := cfg.Validate(); err != nil {
return nil, err

Check warning on line 76 in plugin/metrics/prometheus/factory.go

Codecov / codecov/patch

plugin/metrics/prometheus/factory.go#L74-L76

Added lines #L74 - L76 were not covered by tests
}
f := NewFactory()
f.options = &Options{
Configuration: cfg,

Check warning on line 81 in plugin/metrics/prometheus/factory.go

Codecov / codecov/patch

plugin/metrics/prometheus/factory.go#L79-L81

Added lines #L79 - L81 were not covered by tests
}
err := f.Initialize(logger)
if err != nil {
return nil, err

Check warning on line 85 in plugin/metrics/prometheus/factory.go

Codecov / codecov/patch

plugin/metrics/prometheus/factory.go#L83-L85

Added lines #L83 - L85 were not covered by tests
}
return f, nil

Check warning on line 87 in plugin/metrics/prometheus/factory.go

Codecov / codecov/patch

plugin/metrics/prometheus/factory.go#L87

Added line #L87 was not covered by tests
}