diff --git a/pkg/gofr/container/datasources.go b/pkg/gofr/container/datasources.go index aabdb5c42..ab74b548d 100644 --- a/pkg/gofr/container/datasources.go +++ b/pkg/gofr/container/datasources.go @@ -244,6 +244,9 @@ type provider interface { // UseMetrics sets the metrics for the Cassandra client. UseMetrics(metrics any) + // UseTracer sets the tracer for the Cassandra client. + UseTracer(tracer any) + // Connect establishes a connection to Cassandra and registers metrics using the provided configuration when the client was Created. Connect() } diff --git a/pkg/gofr/container/mock_datasources.go b/pkg/gofr/container/mock_datasources.go index b933a86a6..468717651 100644 --- a/pkg/gofr/container/mock_datasources.go +++ b/pkg/gofr/container/mock_datasources.go @@ -10,16 +10,248 @@ package container import ( + bytes "bytes" context "context" + sql "database/sql" reflect "reflect" time "time" redis "github.com/redis/go-redis/v9" gomock "go.uber.org/mock/gomock" - datasource "gofr.dev/pkg/gofr/datasource" + sql0 "gofr.dev/pkg/gofr/datasource/sql" ) +// MockDB is a mock of DB interface. +type MockDB struct { + ctrl *gomock.Controller + recorder *MockDBMockRecorder +} + +// MockDBMockRecorder is the mock recorder for MockDB. +type MockDBMockRecorder struct { + mock *MockDB +} + +// NewMockDB creates a new mock instance. +func NewMockDB(ctrl *gomock.Controller) *MockDB { + mock := &MockDB{ctrl: ctrl} + mock.recorder = &MockDBMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockDB) EXPECT() *MockDBMockRecorder { + return m.recorder +} + +// Begin mocks base method. +func (m *MockDB) Begin() (*sql0.Tx, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Begin") + ret0, _ := ret[0].(*sql0.Tx) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Begin indicates an expected call of Begin. +func (mr *MockDBMockRecorder) Begin() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Begin", reflect.TypeOf((*MockDB)(nil).Begin)) +} + +// Close mocks base method. +func (m *MockDB) Close() error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Close") + ret0, _ := ret[0].(error) + return ret0 +} + +// Close indicates an expected call of Close. +func (mr *MockDBMockRecorder) Close() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Close", reflect.TypeOf((*MockDB)(nil).Close)) +} + +// Dialect mocks base method. +func (m *MockDB) Dialect() string { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Dialect") + ret0, _ := ret[0].(string) + return ret0 +} + +// Dialect indicates an expected call of Dialect. +func (mr *MockDBMockRecorder) Dialect() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Dialect", reflect.TypeOf((*MockDB)(nil).Dialect)) +} + +// Exec mocks base method. +func (m *MockDB) Exec(query string, args ...any) (sql.Result, error) { + m.ctrl.T.Helper() + varargs := []any{query} + for _, a := range args { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "Exec", varargs...) + ret0, _ := ret[0].(sql.Result) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Exec indicates an expected call of Exec. +func (mr *MockDBMockRecorder) Exec(query any, args ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{query}, args...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Exec", reflect.TypeOf((*MockDB)(nil).Exec), varargs...) +} + +// ExecContext mocks base method. +func (m *MockDB) ExecContext(ctx context.Context, query string, args ...any) (sql.Result, error) { + m.ctrl.T.Helper() + varargs := []any{ctx, query} + for _, a := range args { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "ExecContext", varargs...) + ret0, _ := ret[0].(sql.Result) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ExecContext indicates an expected call of ExecContext. +func (mr *MockDBMockRecorder) ExecContext(ctx, query any, args ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{ctx, query}, args...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ExecContext", reflect.TypeOf((*MockDB)(nil).ExecContext), varargs...) +} + +// HealthCheck mocks base method. +func (m *MockDB) HealthCheck() *datasource.Health { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "HealthCheck") + ret0, _ := ret[0].(*datasource.Health) + return ret0 +} + +// HealthCheck indicates an expected call of HealthCheck. +func (mr *MockDBMockRecorder) HealthCheck() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "HealthCheck", reflect.TypeOf((*MockDB)(nil).HealthCheck)) +} + +// Prepare mocks base method. +func (m *MockDB) Prepare(query string) (*sql.Stmt, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Prepare", query) + ret0, _ := ret[0].(*sql.Stmt) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Prepare indicates an expected call of Prepare. +func (mr *MockDBMockRecorder) Prepare(query any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Prepare", reflect.TypeOf((*MockDB)(nil).Prepare), query) +} + +// Query mocks base method. +func (m *MockDB) Query(query string, args ...any) (*sql.Rows, error) { + m.ctrl.T.Helper() + varargs := []any{query} + for _, a := range args { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "Query", varargs...) + ret0, _ := ret[0].(*sql.Rows) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Query indicates an expected call of Query. +func (mr *MockDBMockRecorder) Query(query any, args ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{query}, args...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Query", reflect.TypeOf((*MockDB)(nil).Query), varargs...) +} + +// QueryContext mocks base method. +func (m *MockDB) QueryContext(ctx context.Context, query string, args ...any) (*sql.Rows, error) { + m.ctrl.T.Helper() + varargs := []any{ctx, query} + for _, a := range args { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "QueryContext", varargs...) + ret0, _ := ret[0].(*sql.Rows) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// QueryContext indicates an expected call of QueryContext. +func (mr *MockDBMockRecorder) QueryContext(ctx, query any, args ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{ctx, query}, args...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "QueryContext", reflect.TypeOf((*MockDB)(nil).QueryContext), varargs...) +} + +// QueryRow mocks base method. +func (m *MockDB) QueryRow(query string, args ...any) *sql.Row { + m.ctrl.T.Helper() + varargs := []any{query} + for _, a := range args { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "QueryRow", varargs...) + ret0, _ := ret[0].(*sql.Row) + return ret0 +} + +// QueryRow indicates an expected call of QueryRow. +func (mr *MockDBMockRecorder) QueryRow(query any, args ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{query}, args...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "QueryRow", reflect.TypeOf((*MockDB)(nil).QueryRow), varargs...) +} + +// QueryRowContext mocks base method. +func (m *MockDB) QueryRowContext(ctx context.Context, query string, args ...any) *sql.Row { + m.ctrl.T.Helper() + varargs := []any{ctx, query} + for _, a := range args { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "QueryRowContext", varargs...) + ret0, _ := ret[0].(*sql.Row) + return ret0 +} + +// QueryRowContext indicates an expected call of QueryRowContext. +func (mr *MockDBMockRecorder) QueryRowContext(ctx, query any, args ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{ctx, query}, args...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "QueryRowContext", reflect.TypeOf((*MockDB)(nil).QueryRowContext), varargs...) +} + +// Select mocks base method. +func (m *MockDB) Select(ctx context.Context, data any, query string, args ...any) { + m.ctrl.T.Helper() + varargs := []any{ctx, data, query} + for _, a := range args { + varargs = append(varargs, a) + } + m.ctrl.Call(m, "Select", varargs...) +} + +// Select indicates an expected call of Select. +func (mr *MockDBMockRecorder) Select(ctx, data, query any, args ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{ctx, data, query}, args...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Select", reflect.TypeOf((*MockDB)(nil).Select), varargs...) +} + // MockRedis is a mock of Redis interface. type MockRedis struct { ctrl *gomock.Controller @@ -7780,6 +8012,18 @@ func (mr *MockCassandraProviderMockRecorder) UseMetrics(metrics any) *gomock.Cal return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UseMetrics", reflect.TypeOf((*MockCassandraProvider)(nil).UseMetrics), metrics) } +// UseTracer mocks base method. +func (m *MockCassandraProvider) UseTracer(tracer any) { + m.ctrl.T.Helper() + m.ctrl.Call(m, "UseTracer", tracer) +} + +// UseTracer indicates an expected call of UseTracer. +func (mr *MockCassandraProviderMockRecorder) UseTracer(tracer any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UseTracer", reflect.TypeOf((*MockCassandraProvider)(nil).UseTracer), tracer) +} + // MockClickhouse is a mock of Clickhouse interface. type MockClickhouse struct { ctrl *gomock.Controller @@ -8006,6 +8250,18 @@ func (mr *MockClickhouseProviderMockRecorder) UseMetrics(metrics any) *gomock.Ca return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UseMetrics", reflect.TypeOf((*MockClickhouseProvider)(nil).UseMetrics), metrics) } +// UseTracer mocks base method. +func (m *MockClickhouseProvider) UseTracer(tracer any) { + m.ctrl.T.Helper() + m.ctrl.Call(m, "UseTracer", tracer) +} + +// UseTracer indicates an expected call of UseTracer. +func (mr *MockClickhouseProviderMockRecorder) UseTracer(tracer any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UseTracer", reflect.TypeOf((*MockClickhouseProvider)(nil).UseTracer), tracer) +} + // MockMongo is a mock of Mongo interface. type MockMongo struct { ctrl *gomock.Controller @@ -8575,6 +8831,18 @@ func (mr *MockMongoProviderMockRecorder) UseMetrics(metrics any) *gomock.Call { return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UseMetrics", reflect.TypeOf((*MockMongoProvider)(nil).UseMetrics), metrics) } +// UseTracer mocks base method. +func (m *MockMongoProvider) UseTracer(tracer any) { + m.ctrl.T.Helper() + m.ctrl.Call(m, "UseTracer", tracer) +} + +// UseTracer indicates an expected call of UseTracer. +func (mr *MockMongoProviderMockRecorder) UseTracer(tracer any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UseTracer", reflect.TypeOf((*MockMongoProvider)(nil).UseTracer), tracer) +} + // Mockprovider is a mock of provider interface. type Mockprovider struct { ctrl *gomock.Controller @@ -8634,6 +8902,18 @@ func (mr *MockproviderMockRecorder) UseMetrics(metrics any) *gomock.Call { return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UseMetrics", reflect.TypeOf((*Mockprovider)(nil).UseMetrics), metrics) } +// UseTracer mocks base method. +func (m *Mockprovider) UseTracer(tracer any) { + m.ctrl.T.Helper() + m.ctrl.Call(m, "UseTracer", tracer) +} + +// UseTracer indicates an expected call of UseTracer. +func (mr *MockproviderMockRecorder) UseTracer(tracer any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UseTracer", reflect.TypeOf((*Mockprovider)(nil).UseTracer), tracer) +} + // MockHealthChecker is a mock of HealthChecker interface. type MockHealthChecker struct { ctrl *gomock.Controller @@ -8870,6 +9150,412 @@ func (mr *MockKVStoreProviderMockRecorder) UseMetrics(metrics any) *gomock.Call return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UseMetrics", reflect.TypeOf((*MockKVStoreProvider)(nil).UseMetrics), metrics) } +// UseTracer mocks base method. +func (m *MockKVStoreProvider) UseTracer(tracer any) { + m.ctrl.T.Helper() + m.ctrl.Call(m, "UseTracer", tracer) +} + +// UseTracer indicates an expected call of UseTracer. +func (mr *MockKVStoreProviderMockRecorder) UseTracer(tracer any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UseTracer", reflect.TypeOf((*MockKVStoreProvider)(nil).UseTracer), tracer) +} + +// MockSolr is a mock of Solr interface. +type MockSolr struct { + ctrl *gomock.Controller + recorder *MockSolrMockRecorder +} + +// MockSolrMockRecorder is the mock recorder for MockSolr. +type MockSolrMockRecorder struct { + mock *MockSolr +} + +// NewMockSolr creates a new mock instance. +func NewMockSolr(ctrl *gomock.Controller) *MockSolr { + mock := &MockSolr{ctrl: ctrl} + mock.recorder = &MockSolrMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockSolr) EXPECT() *MockSolrMockRecorder { + return m.recorder +} + +// AddField mocks base method. +func (m *MockSolr) AddField(ctx context.Context, collection string, document *bytes.Buffer) (any, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "AddField", ctx, collection, document) + ret0, _ := ret[0].(any) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// AddField indicates an expected call of AddField. +func (mr *MockSolrMockRecorder) AddField(ctx, collection, document any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AddField", reflect.TypeOf((*MockSolr)(nil).AddField), ctx, collection, document) +} + +// Create mocks base method. +func (m *MockSolr) Create(ctx context.Context, collection string, document *bytes.Buffer, params map[string]any) (any, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Create", ctx, collection, document, params) + ret0, _ := ret[0].(any) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Create indicates an expected call of Create. +func (mr *MockSolrMockRecorder) Create(ctx, collection, document, params any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Create", reflect.TypeOf((*MockSolr)(nil).Create), ctx, collection, document, params) +} + +// Delete mocks base method. +func (m *MockSolr) Delete(ctx context.Context, collection string, document *bytes.Buffer, params map[string]any) (any, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Delete", ctx, collection, document, params) + ret0, _ := ret[0].(any) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Delete indicates an expected call of Delete. +func (mr *MockSolrMockRecorder) Delete(ctx, collection, document, params any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Delete", reflect.TypeOf((*MockSolr)(nil).Delete), ctx, collection, document, params) +} + +// DeleteField mocks base method. +func (m *MockSolr) DeleteField(ctx context.Context, collection string, document *bytes.Buffer) (any, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DeleteField", ctx, collection, document) + ret0, _ := ret[0].(any) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// DeleteField indicates an expected call of DeleteField. +func (mr *MockSolrMockRecorder) DeleteField(ctx, collection, document any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteField", reflect.TypeOf((*MockSolr)(nil).DeleteField), ctx, collection, document) +} + +// HealthCheck mocks base method. +func (m *MockSolr) HealthCheck(arg0 context.Context) (any, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "HealthCheck", arg0) + ret0, _ := ret[0].(any) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// HealthCheck indicates an expected call of HealthCheck. +func (mr *MockSolrMockRecorder) HealthCheck(arg0 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "HealthCheck", reflect.TypeOf((*MockSolr)(nil).HealthCheck), arg0) +} + +// ListFields mocks base method. +func (m *MockSolr) ListFields(ctx context.Context, collection string, params map[string]any) (any, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ListFields", ctx, collection, params) + ret0, _ := ret[0].(any) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ListFields indicates an expected call of ListFields. +func (mr *MockSolrMockRecorder) ListFields(ctx, collection, params any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListFields", reflect.TypeOf((*MockSolr)(nil).ListFields), ctx, collection, params) +} + +// Retrieve mocks base method. +func (m *MockSolr) Retrieve(ctx context.Context, collection string, params map[string]any) (any, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Retrieve", ctx, collection, params) + ret0, _ := ret[0].(any) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Retrieve indicates an expected call of Retrieve. +func (mr *MockSolrMockRecorder) Retrieve(ctx, collection, params any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Retrieve", reflect.TypeOf((*MockSolr)(nil).Retrieve), ctx, collection, params) +} + +// Search mocks base method. +func (m *MockSolr) Search(ctx context.Context, collection string, params map[string]any) (any, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Search", ctx, collection, params) + ret0, _ := ret[0].(any) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Search indicates an expected call of Search. +func (mr *MockSolrMockRecorder) Search(ctx, collection, params any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Search", reflect.TypeOf((*MockSolr)(nil).Search), ctx, collection, params) +} + +// Update mocks base method. +func (m *MockSolr) Update(ctx context.Context, collection string, document *bytes.Buffer, params map[string]any) (any, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Update", ctx, collection, document, params) + ret0, _ := ret[0].(any) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Update indicates an expected call of Update. +func (mr *MockSolrMockRecorder) Update(ctx, collection, document, params any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Update", reflect.TypeOf((*MockSolr)(nil).Update), ctx, collection, document, params) +} + +// UpdateField mocks base method. +func (m *MockSolr) UpdateField(ctx context.Context, collection string, document *bytes.Buffer) (any, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UpdateField", ctx, collection, document) + ret0, _ := ret[0].(any) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// UpdateField indicates an expected call of UpdateField. +func (mr *MockSolrMockRecorder) UpdateField(ctx, collection, document any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateField", reflect.TypeOf((*MockSolr)(nil).UpdateField), ctx, collection, document) +} + +// MockSolrProvider is a mock of SolrProvider interface. +type MockSolrProvider struct { + ctrl *gomock.Controller + recorder *MockSolrProviderMockRecorder +} + +// MockSolrProviderMockRecorder is the mock recorder for MockSolrProvider. +type MockSolrProviderMockRecorder struct { + mock *MockSolrProvider +} + +// NewMockSolrProvider creates a new mock instance. +func NewMockSolrProvider(ctrl *gomock.Controller) *MockSolrProvider { + mock := &MockSolrProvider{ctrl: ctrl} + mock.recorder = &MockSolrProviderMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockSolrProvider) EXPECT() *MockSolrProviderMockRecorder { + return m.recorder +} + +// AddField mocks base method. +func (m *MockSolrProvider) AddField(ctx context.Context, collection string, document *bytes.Buffer) (any, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "AddField", ctx, collection, document) + ret0, _ := ret[0].(any) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// AddField indicates an expected call of AddField. +func (mr *MockSolrProviderMockRecorder) AddField(ctx, collection, document any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AddField", reflect.TypeOf((*MockSolrProvider)(nil).AddField), ctx, collection, document) +} + +// Connect mocks base method. +func (m *MockSolrProvider) Connect() { + m.ctrl.T.Helper() + m.ctrl.Call(m, "Connect") +} + +// Connect indicates an expected call of Connect. +func (mr *MockSolrProviderMockRecorder) Connect() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Connect", reflect.TypeOf((*MockSolrProvider)(nil).Connect)) +} + +// Create mocks base method. +func (m *MockSolrProvider) Create(ctx context.Context, collection string, document *bytes.Buffer, params map[string]any) (any, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Create", ctx, collection, document, params) + ret0, _ := ret[0].(any) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Create indicates an expected call of Create. +func (mr *MockSolrProviderMockRecorder) Create(ctx, collection, document, params any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Create", reflect.TypeOf((*MockSolrProvider)(nil).Create), ctx, collection, document, params) +} + +// Delete mocks base method. +func (m *MockSolrProvider) Delete(ctx context.Context, collection string, document *bytes.Buffer, params map[string]any) (any, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Delete", ctx, collection, document, params) + ret0, _ := ret[0].(any) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Delete indicates an expected call of Delete. +func (mr *MockSolrProviderMockRecorder) Delete(ctx, collection, document, params any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Delete", reflect.TypeOf((*MockSolrProvider)(nil).Delete), ctx, collection, document, params) +} + +// DeleteField mocks base method. +func (m *MockSolrProvider) DeleteField(ctx context.Context, collection string, document *bytes.Buffer) (any, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DeleteField", ctx, collection, document) + ret0, _ := ret[0].(any) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// DeleteField indicates an expected call of DeleteField. +func (mr *MockSolrProviderMockRecorder) DeleteField(ctx, collection, document any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteField", reflect.TypeOf((*MockSolrProvider)(nil).DeleteField), ctx, collection, document) +} + +// HealthCheck mocks base method. +func (m *MockSolrProvider) HealthCheck(arg0 context.Context) (any, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "HealthCheck", arg0) + ret0, _ := ret[0].(any) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// HealthCheck indicates an expected call of HealthCheck. +func (mr *MockSolrProviderMockRecorder) HealthCheck(arg0 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "HealthCheck", reflect.TypeOf((*MockSolrProvider)(nil).HealthCheck), arg0) +} + +// ListFields mocks base method. +func (m *MockSolrProvider) ListFields(ctx context.Context, collection string, params map[string]any) (any, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ListFields", ctx, collection, params) + ret0, _ := ret[0].(any) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ListFields indicates an expected call of ListFields. +func (mr *MockSolrProviderMockRecorder) ListFields(ctx, collection, params any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListFields", reflect.TypeOf((*MockSolrProvider)(nil).ListFields), ctx, collection, params) +} + +// Retrieve mocks base method. +func (m *MockSolrProvider) Retrieve(ctx context.Context, collection string, params map[string]any) (any, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Retrieve", ctx, collection, params) + ret0, _ := ret[0].(any) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Retrieve indicates an expected call of Retrieve. +func (mr *MockSolrProviderMockRecorder) Retrieve(ctx, collection, params any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Retrieve", reflect.TypeOf((*MockSolrProvider)(nil).Retrieve), ctx, collection, params) +} + +// Search mocks base method. +func (m *MockSolrProvider) Search(ctx context.Context, collection string, params map[string]any) (any, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Search", ctx, collection, params) + ret0, _ := ret[0].(any) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Search indicates an expected call of Search. +func (mr *MockSolrProviderMockRecorder) Search(ctx, collection, params any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Search", reflect.TypeOf((*MockSolrProvider)(nil).Search), ctx, collection, params) +} + +// Update mocks base method. +func (m *MockSolrProvider) Update(ctx context.Context, collection string, document *bytes.Buffer, params map[string]any) (any, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Update", ctx, collection, document, params) + ret0, _ := ret[0].(any) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Update indicates an expected call of Update. +func (mr *MockSolrProviderMockRecorder) Update(ctx, collection, document, params any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Update", reflect.TypeOf((*MockSolrProvider)(nil).Update), ctx, collection, document, params) +} + +// UpdateField mocks base method. +func (m *MockSolrProvider) UpdateField(ctx context.Context, collection string, document *bytes.Buffer) (any, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UpdateField", ctx, collection, document) + ret0, _ := ret[0].(any) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// UpdateField indicates an expected call of UpdateField. +func (mr *MockSolrProviderMockRecorder) UpdateField(ctx, collection, document any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateField", reflect.TypeOf((*MockSolrProvider)(nil).UpdateField), ctx, collection, document) +} + +// UseLogger mocks base method. +func (m *MockSolrProvider) UseLogger(logger any) { + m.ctrl.T.Helper() + m.ctrl.Call(m, "UseLogger", logger) +} + +// UseLogger indicates an expected call of UseLogger. +func (mr *MockSolrProviderMockRecorder) UseLogger(logger any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UseLogger", reflect.TypeOf((*MockSolrProvider)(nil).UseLogger), logger) +} + +// UseMetrics mocks base method. +func (m *MockSolrProvider) UseMetrics(metrics any) { + m.ctrl.T.Helper() + m.ctrl.Call(m, "UseMetrics", metrics) +} + +// UseMetrics indicates an expected call of UseMetrics. +func (mr *MockSolrProviderMockRecorder) UseMetrics(metrics any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UseMetrics", reflect.TypeOf((*MockSolrProvider)(nil).UseMetrics), metrics) +} + +// UseTracer mocks base method. +func (m *MockSolrProvider) UseTracer(tracer any) { + m.ctrl.T.Helper() + m.ctrl.Call(m, "UseTracer", tracer) +} + +// UseTracer indicates an expected call of UseTracer. +func (mr *MockSolrProviderMockRecorder) UseTracer(tracer any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UseTracer", reflect.TypeOf((*MockSolrProvider)(nil).UseTracer), tracer) +} + // MockDgraph is a mock of Dgraph interface. type MockDgraph struct { ctrl *gomock.Controller @@ -9155,3 +9841,15 @@ func (mr *MockDgraphProviderMockRecorder) UseMetrics(metrics any) *gomock.Call { mr.mock.ctrl.T.Helper() return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UseMetrics", reflect.TypeOf((*MockDgraphProvider)(nil).UseMetrics), metrics) } + +// UseTracer mocks base method. +func (m *MockDgraphProvider) UseTracer(tracer any) { + m.ctrl.T.Helper() + m.ctrl.Call(m, "UseTracer", tracer) +} + +// UseTracer indicates an expected call of UseTracer. +func (mr *MockDgraphProviderMockRecorder) UseTracer(tracer any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UseTracer", reflect.TypeOf((*MockDgraphProvider)(nil).UseTracer), tracer) +} diff --git a/pkg/gofr/datasource/cassandra/cassandra.go b/pkg/gofr/datasource/cassandra/cassandra.go index 2359b8aaa..4e37aeb5f 100644 --- a/pkg/gofr/datasource/cassandra/cassandra.go +++ b/pkg/gofr/datasource/cassandra/cassandra.go @@ -6,6 +6,8 @@ import ( "reflect" "time" + "go.opentelemetry.io/otel/trace" + "github.com/gocql/gocql" ) @@ -37,6 +39,7 @@ type Client struct { logger Logger metrics Metrics + tracer trace.Tracer } var errStatusDown = errors.New("status down") @@ -88,6 +91,13 @@ func (c *Client) UseMetrics(metrics interface{}) { } } +// UseTracer sets the tracer for Clickhouse client. +func (c *Client) UseTracer(tracer any) { + if tracer, ok := tracer.(trace.Tracer); ok { + c.tracer = tracer + } +} + //nolint:exhaustive // We just want to take care of slice and struct in this case. func (c *Client) Query(dest any, stmt string, values ...any) error { defer c.sendOperationStats(&QueryLog{Query: stmt, Keyspace: c.config.Keyspace}, time.Now()) diff --git a/pkg/gofr/datasource/cassandra/go.mod b/pkg/gofr/datasource/cassandra/go.mod index 62c389699..afad03699 100644 --- a/pkg/gofr/datasource/cassandra/go.mod +++ b/pkg/gofr/datasource/cassandra/go.mod @@ -5,6 +5,7 @@ go 1.22 require ( github.com/gocql/gocql v1.6.0 github.com/stretchr/testify v1.9.0 + go.opentelemetry.io/otel/trace v1.30.0 go.uber.org/mock v0.4.0 ) @@ -13,6 +14,7 @@ require ( github.com/golang/snappy v0.0.3 // indirect github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed // indirect github.com/pmezard/go-difflib v1.0.0 // indirect + go.opentelemetry.io/otel v1.30.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/pkg/gofr/datasource/cassandra/go.sum b/pkg/gofr/datasource/cassandra/go.sum index 3a52f8078..54b3b0ad7 100644 --- a/pkg/gofr/datasource/cassandra/go.sum +++ b/pkg/gofr/datasource/cassandra/go.sum @@ -9,6 +9,8 @@ github.com/gocql/gocql v1.6.0 h1:IdFdOTbnpbd0pDhl4REKQDM+Q0SzKXQ1Yh+YZZ8T/qU= github.com/gocql/gocql v1.6.0/go.mod h1:3gM2c4D3AnkISwBxGnMMsS8Oy4y2lhbPRsH4xnJrHG8= github.com/golang/snappy v0.0.3 h1:fHPg5GQYlCeLIPB9BZqMVR5nR9A+IM5zcgeTdjMYmLA= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed h1:5upAirOpQc1Q53c0bnx2ufif5kANL7bfZWcc6VJWJd8= github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed/go.mod h1:tMWxXQ9wFIaZeTI9F+hmhFiGpFmhOHzyShyFUhRm0H4= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= @@ -22,6 +24,10 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +go.opentelemetry.io/otel v1.30.0 h1:F2t8sK4qf1fAmY9ua4ohFS/K+FUuOPemHUIXHtktrts= +go.opentelemetry.io/otel v1.30.0/go.mod h1:tFw4Br9b7fOS+uEao81PJjVMjW/5fvNCbpsDIXqP0pc= +go.opentelemetry.io/otel/trace v1.30.0 h1:7UBkkYzeg3C7kQX8VAidWh2biiQbtAKjyIML8dQ9wmc= +go.opentelemetry.io/otel/trace v1.30.0/go.mod h1:5EyKqTzzmyqB9bwtCCq6pDLktPK6fmGf/Dph+8VI02o= go.uber.org/mock v0.4.0 h1:VcM4ZOtdbR4f6VXfiOpwpVJDL6lCReaZ6mw31wqh7KU= go.uber.org/mock v0.4.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= diff --git a/pkg/gofr/datasource/clickhouse/clickhouse.go b/pkg/gofr/datasource/clickhouse/clickhouse.go index 4e138fdc4..9ab49d2e5 100644 --- a/pkg/gofr/datasource/clickhouse/clickhouse.go +++ b/pkg/gofr/datasource/clickhouse/clickhouse.go @@ -6,6 +6,8 @@ import ( "strings" "time" + "go.opentelemetry.io/otel/trace" + "github.com/ClickHouse/clickhouse-go/v2" ) @@ -21,6 +23,7 @@ type client struct { config Config logger Logger metrics Metrics + tracer trace.Tracer } var errStatusDown = errors.New("status down") @@ -53,6 +56,13 @@ func (c *client) UseMetrics(metrics interface{}) { } } +// UseTracer sets the tracer for Clickhouse client. +func (c *client) UseTracer(tracer any) { + if tracer, ok := tracer.(trace.Tracer); ok { + c.tracer = tracer + } +} + // Connect establishes a connection to Clickhouse and registers metrics using the provided configuration when the client was Created. func (c *client) Connect() { var err error diff --git a/pkg/gofr/datasource/dgraph/draph.go b/pkg/gofr/datasource/dgraph/draph.go index 92097f5e4..1e3108e7c 100644 --- a/pkg/gofr/datasource/dgraph/draph.go +++ b/pkg/gofr/datasource/dgraph/draph.go @@ -8,7 +8,6 @@ import ( "fmt" "time" - "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/trace" @@ -49,7 +48,6 @@ var ( func New(config Config) *Client { return &Client{ config: config, - tracer: otel.GetTracerProvider().Tracer("gofr-dgraph"), } } @@ -101,6 +99,13 @@ func (d *Client) UseMetrics(metrics any) { } } +// UseTracer sets the tracer for DGraph client. +func (c *Client) UseTracer(tracer any) { + if tracer, ok := tracer.(trace.Tracer); ok { + c.tracer = tracer + } +} + // Query executes a read-only query in the Dgraph database and returns the result. func (d *Client) Query(ctx context.Context, query string) (any, error) { start := time.Now() diff --git a/pkg/gofr/datasource/kv-store/badger/badger.go b/pkg/gofr/datasource/kv-store/badger/badger.go index 7d5abb8cb..8342bd33b 100644 --- a/pkg/gofr/datasource/kv-store/badger/badger.go +++ b/pkg/gofr/datasource/kv-store/badger/badger.go @@ -6,6 +6,8 @@ import ( "strings" "time" + "go.opentelemetry.io/otel/trace" + "github.com/dgraph-io/badger/v4" ) @@ -18,6 +20,7 @@ type client struct { configs Configs logger Logger metrics Metrics + tracer trace.Tracer } func New(configs Configs) *client { @@ -38,6 +41,13 @@ func (c *client) UseMetrics(metrics any) { } } +// UseTracer sets the tracer for BadgerDB client. +func (c *client) UseTracer(tracer any) { + if tracer, ok := tracer.(trace.Tracer); ok { + c.tracer = tracer + } +} + // Connect establishes a connection to BadgerDB and registers metrics using the provided configuration when the client was Created. func (c *client) Connect() { c.logger.Infof("connecting to BadgerDB at %v", c.configs.DirPath) diff --git a/pkg/gofr/datasource/kv-store/badger/go.mod b/pkg/gofr/datasource/kv-store/badger/go.mod index fad00618b..43cf8b6c0 100644 --- a/pkg/gofr/datasource/kv-store/badger/go.mod +++ b/pkg/gofr/datasource/kv-store/badger/go.mod @@ -5,6 +5,7 @@ go 1.22 require ( github.com/dgraph-io/badger/v4 v4.2.0 github.com/stretchr/testify v1.9.0 + go.opentelemetry.io/otel/trace v1.30.0 go.uber.org/mock v0.4.0 ) @@ -24,6 +25,7 @@ require ( github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect go.opencensus.io v0.22.5 // indirect + go.opentelemetry.io/otel v1.30.0 // indirect golang.org/x/net v0.23.0 // indirect golang.org/x/sys v0.18.0 // indirect google.golang.org/protobuf v1.33.0 // indirect diff --git a/pkg/gofr/datasource/kv-store/badger/go.sum b/pkg/gofr/datasource/kv-store/badger/go.sum index 425187314..fef3a3b32 100644 --- a/pkg/gofr/datasource/kv-store/badger/go.sum +++ b/pkg/gofr/datasource/kv-store/badger/go.sum @@ -34,8 +34,9 @@ github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEW github.com/google/flatbuffers v1.12.1 h1:MVlul7pQNoDzWRLTw5imwYsl+usrS1TXG2H4jg6ImGw= github.com/google/flatbuffers v1.12.1/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.12.3 h1:G5AfA94pHPysR56qqrkO2pxEexdDzrpFJ6yt/VqWxVU= @@ -56,6 +57,10 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= go.opencensus.io v0.22.5 h1:dntmOdLpSpHlVqbW5Eay97DelsZHe+55D+xC6i0dDS0= go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= +go.opentelemetry.io/otel v1.30.0 h1:F2t8sK4qf1fAmY9ua4ohFS/K+FUuOPemHUIXHtktrts= +go.opentelemetry.io/otel v1.30.0/go.mod h1:tFw4Br9b7fOS+uEao81PJjVMjW/5fvNCbpsDIXqP0pc= +go.opentelemetry.io/otel/trace v1.30.0 h1:7UBkkYzeg3C7kQX8VAidWh2biiQbtAKjyIML8dQ9wmc= +go.opentelemetry.io/otel/trace v1.30.0/go.mod h1:5EyKqTzzmyqB9bwtCCq6pDLktPK6fmGf/Dph+8VI02o= go.uber.org/mock v0.4.0 h1:VcM4ZOtdbR4f6VXfiOpwpVJDL6lCReaZ6mw31wqh7KU= go.uber.org/mock v0.4.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= @@ -104,7 +109,6 @@ golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4f golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= diff --git a/pkg/gofr/datasource/mongo/go.mod b/pkg/gofr/datasource/mongo/go.mod index adb1baa2b..4aa3ddf7a 100644 --- a/pkg/gofr/datasource/mongo/go.mod +++ b/pkg/gofr/datasource/mongo/go.mod @@ -5,11 +5,15 @@ go 1.22 require ( github.com/stretchr/testify v1.9.0 go.mongodb.org/mongo-driver v1.15.1 + go.opentelemetry.io/otel v1.30.0 + go.opentelemetry.io/otel/trace v1.30.0 go.uber.org/mock v0.4.0 ) require ( github.com/davecgh/go-spew v1.1.1 // indirect + github.com/go-logr/logr v1.4.2 // indirect + github.com/go-logr/stdr v1.2.2 // indirect github.com/golang/snappy v0.0.4 // indirect github.com/klauspost/compress v1.17.8 // indirect github.com/montanaflynn/stats v0.7.1 // indirect @@ -18,6 +22,7 @@ require ( github.com/xdg-go/scram v1.1.2 // indirect github.com/xdg-go/stringprep v1.0.4 // indirect github.com/youmark/pkcs8 v0.0.0-20240424034433-3c2c7870ae76 // indirect + go.opentelemetry.io/otel/metric v1.30.0 // indirect golang.org/x/crypto v0.23.0 // indirect golang.org/x/sync v0.7.0 // indirect golang.org/x/text v0.15.0 // indirect diff --git a/pkg/gofr/datasource/mongo/go.sum b/pkg/gofr/datasource/mongo/go.sum index 582807eae..131b1020d 100644 --- a/pkg/gofr/datasource/mongo/go.sum +++ b/pkg/gofr/datasource/mongo/go.sum @@ -1,9 +1,14 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= +github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/google/go-cmp v0.5.2 h1:X2ev0eStA3AbceY54o37/0PQ/UWqKEiiO2dKL5OPaFM= -github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU= github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= github.com/montanaflynn/stats v0.7.1 h1:etflOAAHORrCC44V+aR6Ftzort912ZU+YLiSTuV8eaE= @@ -23,6 +28,12 @@ github.com/youmark/pkcs8 v0.0.0-20240424034433-3c2c7870ae76/go.mod h1:SQliXeA7Dh github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= go.mongodb.org/mongo-driver v1.15.1 h1:l+RvoUOoMXFmADTLfYDm7On9dRm7p4T80/lEQM+r7HU= go.mongodb.org/mongo-driver v1.15.1/go.mod h1:Vzb0Mk/pa7e6cWw85R4F/endUC3u0U9jGcNU603k65c= +go.opentelemetry.io/otel v1.30.0 h1:F2t8sK4qf1fAmY9ua4ohFS/K+FUuOPemHUIXHtktrts= +go.opentelemetry.io/otel v1.30.0/go.mod h1:tFw4Br9b7fOS+uEao81PJjVMjW/5fvNCbpsDIXqP0pc= +go.opentelemetry.io/otel/metric v1.30.0 h1:4xNulvn9gjzo4hjg+wzIKG7iNFEaBMX00Qd4QIZs7+w= +go.opentelemetry.io/otel/metric v1.30.0/go.mod h1:aXTfST94tswhWEb+5QjlSqG+cZlmyXy/u8jFpor3WqQ= +go.opentelemetry.io/otel/trace v1.30.0 h1:7UBkkYzeg3C7kQX8VAidWh2biiQbtAKjyIML8dQ9wmc= +go.opentelemetry.io/otel/trace v1.30.0/go.mod h1:5EyKqTzzmyqB9bwtCCq6pDLktPK6fmGf/Dph+8VI02o= go.uber.org/mock v0.4.0 h1:VcM4ZOtdbR4f6VXfiOpwpVJDL6lCReaZ6mw31wqh7KU= go.uber.org/mock v0.4.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= @@ -54,8 +65,6 @@ golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGm golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/pkg/gofr/datasource/mongo/mongo.go b/pkg/gofr/datasource/mongo/mongo.go index 4a728dfac..ecf084b94 100644 --- a/pkg/gofr/datasource/mongo/mongo.go +++ b/pkg/gofr/datasource/mongo/mongo.go @@ -6,6 +6,8 @@ import ( "fmt" "time" + "go.opentelemetry.io/otel/trace" + "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" @@ -20,6 +22,7 @@ type Client struct { logger Logger metrics Metrics config Config + tracer trace.Tracer } type Config struct { @@ -65,6 +68,13 @@ func (c *Client) UseMetrics(metrics interface{}) { } } +// UseTracer sets the tracer for the MongoDB client. +func (c *Client) UseTracer(tracer any) { + if tracer, ok := tracer.(trace.Tracer); ok { + c.tracer = tracer + } +} + // Connect establishes a connection to MongoDB and registers metrics using the provided configuration when the client was Created. func (c *Client) Connect() { c.logger.Logf("connecting to mongoDB at %v to database %v", c.config.URI, c.config.Database) diff --git a/pkg/gofr/datasource/solr/go.mod b/pkg/gofr/datasource/solr/go.mod index 4f4636168..d3f4bfa79 100644 --- a/pkg/gofr/datasource/solr/go.mod +++ b/pkg/gofr/datasource/solr/go.mod @@ -4,11 +4,13 @@ go 1.22 require ( github.com/stretchr/testify v1.9.0 + go.opentelemetry.io/otel/trace v1.30.0 go.uber.org/mock v0.4.0 ) require ( github.com/davecgh/go-spew v1.1.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect + go.opentelemetry.io/otel v1.30.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/pkg/gofr/datasource/solr/go.sum b/pkg/gofr/datasource/solr/go.sum index 721144c3c..fe0856a8c 100644 --- a/pkg/gofr/datasource/solr/go.sum +++ b/pkg/gofr/datasource/solr/go.sum @@ -1,9 +1,15 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +go.opentelemetry.io/otel v1.30.0 h1:F2t8sK4qf1fAmY9ua4ohFS/K+FUuOPemHUIXHtktrts= +go.opentelemetry.io/otel v1.30.0/go.mod h1:tFw4Br9b7fOS+uEao81PJjVMjW/5fvNCbpsDIXqP0pc= +go.opentelemetry.io/otel/trace v1.30.0 h1:7UBkkYzeg3C7kQX8VAidWh2biiQbtAKjyIML8dQ9wmc= +go.opentelemetry.io/otel/trace v1.30.0/go.mod h1:5EyKqTzzmyqB9bwtCCq6pDLktPK6fmGf/Dph+8VI02o= go.uber.org/mock v0.4.0 h1:VcM4ZOtdbR4f6VXfiOpwpVJDL6lCReaZ6mw31wqh7KU= go.uber.org/mock v0.4.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= diff --git a/pkg/gofr/datasource/solr/solr.go b/pkg/gofr/datasource/solr/solr.go index f9268570f..ba0ca367e 100644 --- a/pkg/gofr/datasource/solr/solr.go +++ b/pkg/gofr/datasource/solr/solr.go @@ -8,6 +8,8 @@ import ( "io" "net/http" "time" + + "go.opentelemetry.io/otel/trace" ) type Config struct { @@ -20,6 +22,7 @@ type Client struct { logger Logger metrics Metrics + tracer trace.Tracer } // New initializes Solr driver with the provided configuration. @@ -36,20 +39,27 @@ func New(conf Config) *Client { return s } -// UseLogger sets the logger for the Cassandra client which asserts the Logger interface. +// UseLogger sets the logger for the Solr client which asserts the Logger interface. func (c *Client) UseLogger(logger any) { if l, ok := logger.(Logger); ok { c.logger = l } } -// UseMetrics sets the metrics for the Cassandra client which asserts the Metrics interface. +// UseMetrics sets the metrics for the Solr client which asserts the Metrics interface. func (c *Client) UseMetrics(metrics any) { if m, ok := metrics.(Metrics); ok { c.metrics = m } } +// UseTracer sets the tracer for Solr client. +func (c *Client) UseTracer(tracer any) { + if tracer, ok := tracer.(trace.Tracer); ok { + c.tracer = tracer + } +} + // Connect establishes a connection to Solr and registers metrics using the provided configuration when the client was Created. func (c *Client) Connect() { c.logger.Infof("connecting to Solr at %v", c.url)