Restructure cloudmigration service (#83211)

* Restructure cloudmigation service

* Adjust codewoners and wire

* Comment out unused metrics
This commit is contained in:
idafurjes
2024-02-26 14:52:16 +01:00
committed by GitHub
parent 648abdbd0e
commit 80447dd0cc
22 changed files with 186 additions and 160 deletions
@@ -0,0 +1,67 @@
package cloudmigrationimpl
import (
"context"
"github.com/grafana/grafana/pkg/api/routing"
"github.com/grafana/grafana/pkg/infra/db"
"github.com/grafana/grafana/pkg/infra/log"
"github.com/grafana/grafana/pkg/services/cloudmigration"
"github.com/grafana/grafana/pkg/services/cloudmigration/api"
"github.com/grafana/grafana/pkg/services/datasources"
"github.com/grafana/grafana/pkg/services/featuremgmt"
"github.com/grafana/grafana/pkg/setting"
"github.com/prometheus/client_golang/prometheus"
)
// CloudMigrationsServiceImpl Define the Service Implementation.
type Service struct {
store store
log log.Logger
cfg *setting.Cfg
features featuremgmt.FeatureToggles
dsService datasources.DataSourceService
api *api.MigrationAPI
// metrics *Metrics
}
var LogPrefix = "cloudmigration.service"
var _ cloudmigration.Service = (*Service)(nil)
// ProvideService Factory for method used by wire to inject dependencies.
// builds the service, and api, and configures routes
func ProvideService(
cfg *setting.Cfg,
features featuremgmt.FeatureToggles,
db db.DB,
dsService datasources.DataSourceService,
routeRegister routing.RouteRegister,
prom prometheus.Registerer,
) cloudmigration.Service {
if !features.IsEnabledGlobally(featuremgmt.FlagOnPremToCloudMigrations) {
return &NoopServiceImpl{}
}
s := &Service{
store: &sqlStore{db: db},
log: log.New(LogPrefix),
cfg: cfg,
features: features,
dsService: dsService,
}
s.api = api.RegisterApi(routeRegister, s)
if err := s.registerMetrics(prom); err != nil {
s.log.Warn("error registering prom metrics", "error", err.Error())
}
return s
}
func (s *Service) MigrateDatasources(ctx context.Context, request *cloudmigration.MigrateDatasourcesRequest) (*cloudmigration.MigrateDatasourcesResponse, error) {
return s.store.MigrateDatasources(ctx, request)
}
@@ -0,0 +1,16 @@
package cloudmigrationimpl
import (
"context"
"github.com/grafana/grafana/pkg/services/cloudmigration"
)
// CloudMigrationsServiceImpl Define the Service Implementation.
type NoopServiceImpl struct{}
var _ cloudmigration.Service = (*NoopServiceImpl)(nil)
func (s *NoopServiceImpl) MigrateDatasources(ctx context.Context, request *cloudmigration.MigrateDatasourcesRequest) (*cloudmigration.MigrateDatasourcesResponse, error) {
return nil, cloudmigration.ErrFeatureDisabledError
}
@@ -0,0 +1,15 @@
package cloudmigrationimpl
import (
"context"
"testing"
"github.com/grafana/grafana/pkg/services/cloudmigration"
"github.com/stretchr/testify/assert"
)
func Test_NoopServiceDoesNothing(t *testing.T) {
s := &NoopServiceImpl{}
_, e := s.MigrateDatasources(context.Background(), &cloudmigration.MigrateDatasourcesRequest{})
assert.ErrorIs(t, e, cloudmigration.ErrFeatureDisabledError)
}
@@ -0,0 +1,26 @@
package cloudmigrationimpl
import (
"errors"
"github.com/grafana/grafana/pkg/services/cloudmigration"
"github.com/prometheus/client_golang/prometheus"
)
// type Metrics struct {
// log log.Logger
// }
func (s *Service) registerMetrics(prom prometheus.Registerer) error {
for _, m := range cloudmigration.PromMetrics {
if err := prom.Register(m); err != nil {
var alreadyRegisterErr prometheus.AlreadyRegisteredError
if errors.As(err, &alreadyRegisterErr) {
s.log.Warn("metric already registered", "metric", m)
continue
}
return err
}
}
return nil
}
@@ -0,0 +1,11 @@
package cloudmigrationimpl
import (
"context"
"github.com/grafana/grafana/pkg/services/cloudmigration"
)
type store interface {
MigrateDatasources(context.Context, *cloudmigration.MigrateDatasourcesRequest) (*cloudmigration.MigrateDatasourcesResponse, error)
}
@@ -0,0 +1,16 @@
package cloudmigrationimpl
import (
"context"
"github.com/grafana/grafana/pkg/infra/db"
"github.com/grafana/grafana/pkg/services/cloudmigration"
)
type sqlStore struct {
db db.DB
}
func (ss *sqlStore) MigrateDatasources(ctx context.Context, request *cloudmigration.MigrateDatasourcesRequest) (*cloudmigration.MigrateDatasourcesResponse, error) {
return nil, cloudmigration.ErrInternalNotImplementedError
}
@@ -0,0 +1,9 @@
package cloudmigrationimpl
import (
"testing"
)
func TestMigrateDatasources(t *testing.T) {
// TODO: Write this test
}