diff --git a/pkg/spaces/middleware/access_logging_middleware.go b/pkg/spaces/middleware/access_logging_middleware.go index 7fca51ede8a87ba31ceb7293537e32c2db4c08d7..5a21e84e7dcd6b5044e247a4c449003aaff5e182 100644 --- a/pkg/spaces/middleware/access_logging_middleware.go +++ b/pkg/spaces/middleware/access_logging_middleware.go @@ -217,3 +217,22 @@ func (m *accessLoggingMiddleware) UpdateConfig(ctx context.Context, spaceId stri return err } + +func (m *accessLoggingMiddleware) SetState(ctx context.Context, spaceID string, state *spaces.StateInfo) (err error) { + begin := time.Now() + + m.logger.Debug("SetState.Request", + zap.Reflect("principal", auth.GetPrincipal(ctx)), + zap.Reflect("spaceID", spaceID), + zap.Reflect("state", state), + ) + + err = m.next.SetState(ctx, spaceID, state) + + m.logger.Debug("SetState.Response", + zap.Duration("time", time.Since(begin)), + zap.Error(err), + ) + + return err +} diff --git a/pkg/spaces/middleware/caching_middleware.go b/pkg/spaces/middleware/caching_middleware.go index f99e21a1f4a254ef6fb0890d09776b9b4738fd38..97029a526f6fa701ed8d34090e52f4579214bcbe 100644 --- a/pkg/spaces/middleware/caching_middleware.go +++ b/pkg/spaces/middleware/caching_middleware.go @@ -91,6 +91,20 @@ func (m cachingMiddleware) UpdateConfig(ctx context.Context, spaceId string, con return err } +func (m cachingMiddleware) SetState(ctx context.Context, spaceID string, state *service.StateInfo) (err error) { + + err = m.next.SetState(ctx, spaceID, state) + if err == nil { + value, e := m.cache.Get(spaceID) + if e == nil { + space := value.(*service.Space) + _ = m.cache.Remove(orgKey(space.OrgID)) + } + _ = m.cache.Remove(spaceID) + } + return err +} + func (m cachingMiddleware) Delete(ctx context.Context, spaceId string) (err error) { err = m.next.Delete(ctx, spaceId) diff --git a/pkg/spaces/middleware/error_logging_middleware.go b/pkg/spaces/middleware/error_logging_middleware.go index 2b11838b51f1a033e9963a729c6378401e193d0c..0afa3eec8b1cec0319afedabcfaabcf7e4899119 100644 --- a/pkg/spaces/middleware/error_logging_middleware.go +++ b/pkg/spaces/middleware/error_logging_middleware.go @@ -99,6 +99,16 @@ func (m *errorLoggingMiddleware) Move(ctx context.Context, spaceID string, orgID return m.next.Move(ctx, spaceID, orgID) } +func (m *errorLoggingMiddleware) SetState(ctx context.Context, spaceID string, state *spaces.StateInfo) (err error) { + logger := m.logger + defer func() { + if err != nil { + logger.Warn("response error", zap.Error(err)) + } + }() + return m.next.SetState(ctx, spaceID, state) +} + func (m *errorLoggingMiddleware) Transfer(ctx context.Context, spaceID string, transferToOrg string) (err error) { logger := m.logger defer func() { diff --git a/pkg/spaces/middleware/logging_middleware.go b/pkg/spaces/middleware/logging_middleware.go index 877ee7e5a62cb0a4a081191b2497d04051771757..4c5852e1f882612baa919aa2ce3209a3f0e438b1 100644 --- a/pkg/spaces/middleware/logging_middleware.go +++ b/pkg/spaces/middleware/logging_middleware.go @@ -180,6 +180,28 @@ func (m *loggingMiddleware) Update(ctx context.Context, space *spaces.Space) (er return err } +func (m *loggingMiddleware) SetState(ctx context.Context, spaceID string, state *spaces.StateInfo) (err error) { + logger := m.logger.With( + logzap.Caller(ctx), + logzap.Event(spaces.EventUpdate), + logzap.Object(id.NewSpaceId(spaceID)), + ) + + var st spaces.State + if state != nil { + st = state.State + } + + err = m.next.SetState(ctx, spaceID, state) + if err != nil { + logger.Error(fmt.Sprintf("Failed to set state '%s' to space", st), zap.Error(err)) + return + } + + logger.Info(fmt.Sprintf("Set state '%s' to space", st)) + return err +} + func (m *loggingMiddleware) UpdateConfig(ctx context.Context, spaceId string, config *spaces.Config) (err error) { logger := m.logger.With( logzap.Caller(ctx), diff --git a/pkg/spaces/middleware/recovering_middleware.go b/pkg/spaces/middleware/recovering_middleware.go index 7b9b64ed276aa9a91dd9e07ee1b463ff8bb06003..162f9a4cd0aa6e4a5201dfdfb0c3b1ff0ab7b39f 100644 --- a/pkg/spaces/middleware/recovering_middleware.go +++ b/pkg/spaces/middleware/recovering_middleware.go @@ -114,6 +114,18 @@ func (m *recoveringMiddleware) Move(ctx context.Context, spaceID string, orgID s return m.next.Move(ctx, spaceID, orgID) } +func (m *recoveringMiddleware) SetState(ctx context.Context, spaceID string, state *spaces.StateInfo) (err error) { + logger := m.logger + defer func() { + if r := recover(); r != nil { + logger.Error("panic", zap.Error(fmt.Errorf("%v", r))) + err = fmt.Errorf("%v", r) + } + }() + + return m.next.SetState(ctx, spaceID, state) +} + func (m *recoveringMiddleware) Transfer(ctx context.Context, spaceID string, transferToOrg string) (err error) { logger := m.logger defer func() { diff --git a/pkg/spaces/middleware/telemetry_middleware.go b/pkg/spaces/middleware/telemetry_middleware.go index 90597815e8e7aa0a3a364c3e29aa208f3473d690..38a47697e66d375629524faf47501218d08b759d 100644 --- a/pkg/spaces/middleware/telemetry_middleware.go +++ b/pkg/spaces/middleware/telemetry_middleware.go @@ -1,10 +1,10 @@ // Code generated by gowrap. DO NOT EDIT. -// template: ..\..\..\assets\templates\middleware\telemetry +// template: ../../../assets/templates/middleware/telemetry // gowrap: http://github.com/hexdigest/gowrap package middleware -//go:generate gowrap gen -p git.perx.ru/perxis/perxis-go/pkg/spaces -i Spaces -t ..\..\..\assets\templates\middleware\telemetry -o telemetry_middleware.go -l "" +//go:generate gowrap gen -p git.perx.ru/perxis/perxis-go/pkg/spaces -i Spaces -t ../../../assets/templates/middleware/telemetry -o telemetry_middleware.go -l "" // source template: https://github.com/hexdigest/gowrap/blob/master/templates/opentelemetry @@ -284,6 +284,40 @@ func (_d telemetryMiddleware) Move(ctx context.Context, spaceID string, orgID st return _d.Spaces.Move(ctx, spaceID, orgID) } +// SetState implements spaces.Spaces +func (_d telemetryMiddleware) SetState(ctx context.Context, spaceID string, state *spaces.StateInfo) (err error) { + attributes := otelmetric.WithAttributeSet(attribute.NewSet( + attribute.String("service", "Spaces"), + attribute.String("method", "SetState"), + )) + + _d.requestMetrics.Total.Add(ctx, 1, attributes) + + start := time.Now() + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Spaces.SetState") + + defer func() { + _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) + + if _d._spanDecorator != nil { + _d._spanDecorator(_span, map[string]interface{}{ + "ctx": ctx, + "spaceID": spaceID, + "state": state}, map[string]interface{}{ + "err": err}) + } else if err != nil { + _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) + + _span.RecordError(err) + _span.SetAttributes(attribute.String("event", "error")) + _span.SetAttributes(attribute.String("message", err.Error())) + } + + _span.End() + }() + return _d.Spaces.SetState(ctx, spaceID, state) +} + // Transfer implements spaces.Spaces func (_d telemetryMiddleware) Transfer(ctx context.Context, spaceID string, transferToOrg string) (err error) { attributes := otelmetric.WithAttributeSet(attribute.NewSet( diff --git a/pkg/spaces/mocks/SpaceCreatedObserver.go b/pkg/spaces/mocks/SpaceCreatedObserver.go index a85eced793564cc3fc27304881486329041c3d75..049a741a757f5d107d347f826363eafeb29d85ac 100644 --- a/pkg/spaces/mocks/SpaceCreatedObserver.go +++ b/pkg/spaces/mocks/SpaceCreatedObserver.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.15.0. DO NOT EDIT. +// Code generated by mockery v2.40.3. DO NOT EDIT. package mocks @@ -18,6 +18,10 @@ type SpaceCreatedObserver struct { func (_m *SpaceCreatedObserver) OnSpaceCreated(ctx context.Context, space *spaces.Space) error { ret := _m.Called(ctx, space) + if len(ret) == 0 { + panic("no return value specified for OnSpaceCreated") + } + var r0 error if rf, ok := ret.Get(0).(func(context.Context, *spaces.Space) error); ok { r0 = rf(ctx, space) @@ -28,13 +32,12 @@ func (_m *SpaceCreatedObserver) OnSpaceCreated(ctx context.Context, space *space return r0 } -type mockConstructorTestingTNewSpaceCreatedObserver interface { +// NewSpaceCreatedObserver creates a new instance of SpaceCreatedObserver. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +// The first argument is typically a *testing.T value. +func NewSpaceCreatedObserver(t interface { mock.TestingT Cleanup(func()) -} - -// NewSpaceCreatedObserver creates a new instance of SpaceCreatedObserver. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. -func NewSpaceCreatedObserver(t mockConstructorTestingTNewSpaceCreatedObserver) *SpaceCreatedObserver { +}) *SpaceCreatedObserver { mock := &SpaceCreatedObserver{} mock.Mock.Test(t) diff --git a/pkg/spaces/mocks/SpaceDeletedObserver.go b/pkg/spaces/mocks/SpaceDeletedObserver.go index 450173b03b0007c86b4dffee69a0c36522f9ce28..d4e65da6af20b85ab56159fcafed103f92b9c26b 100644 --- a/pkg/spaces/mocks/SpaceDeletedObserver.go +++ b/pkg/spaces/mocks/SpaceDeletedObserver.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.15.0. DO NOT EDIT. +// Code generated by mockery v2.40.3. DO NOT EDIT. package mocks @@ -18,6 +18,10 @@ type SpaceDeletedObserver struct { func (_m *SpaceDeletedObserver) OnSpaceDeleted(ctx context.Context, space *spaces.Space) error { ret := _m.Called(ctx, space) + if len(ret) == 0 { + panic("no return value specified for OnSpaceDeleted") + } + var r0 error if rf, ok := ret.Get(0).(func(context.Context, *spaces.Space) error); ok { r0 = rf(ctx, space) @@ -28,13 +32,12 @@ func (_m *SpaceDeletedObserver) OnSpaceDeleted(ctx context.Context, space *space return r0 } -type mockConstructorTestingTNewSpaceDeletedObserver interface { +// NewSpaceDeletedObserver creates a new instance of SpaceDeletedObserver. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +// The first argument is typically a *testing.T value. +func NewSpaceDeletedObserver(t interface { mock.TestingT Cleanup(func()) -} - -// NewSpaceDeletedObserver creates a new instance of SpaceDeletedObserver. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. -func NewSpaceDeletedObserver(t mockConstructorTestingTNewSpaceDeletedObserver) *SpaceDeletedObserver { +}) *SpaceDeletedObserver { mock := &SpaceDeletedObserver{} mock.Mock.Test(t) diff --git a/pkg/spaces/mocks/SpaceObserver.go b/pkg/spaces/mocks/SpaceObserver.go index 9c5006bf80047884f45637207d3ea6fdf0b702aa..589a7755a4cd86c025c816d652081e0597720d5e 100644 --- a/pkg/spaces/mocks/SpaceObserver.go +++ b/pkg/spaces/mocks/SpaceObserver.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.15.0. DO NOT EDIT. +// Code generated by mockery v2.40.3. DO NOT EDIT. package mocks @@ -9,13 +9,12 @@ type SpaceObserver struct { mock.Mock } -type mockConstructorTestingTNewSpaceObserver interface { +// NewSpaceObserver creates a new instance of SpaceObserver. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +// The first argument is typically a *testing.T value. +func NewSpaceObserver(t interface { mock.TestingT Cleanup(func()) -} - -// NewSpaceObserver creates a new instance of SpaceObserver. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. -func NewSpaceObserver(t mockConstructorTestingTNewSpaceObserver) *SpaceObserver { +}) *SpaceObserver { mock := &SpaceObserver{} mock.Mock.Test(t) diff --git a/pkg/spaces/mocks/SpaceUpdatedObserver.go b/pkg/spaces/mocks/SpaceUpdatedObserver.go index a7ced9b2d7bab0618013b5f73cef304c40cecb57..adfa9ea58992d08746ae6072743fe59a21a4bd10 100644 --- a/pkg/spaces/mocks/SpaceUpdatedObserver.go +++ b/pkg/spaces/mocks/SpaceUpdatedObserver.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.15.0. DO NOT EDIT. +// Code generated by mockery v2.40.3. DO NOT EDIT. package mocks @@ -18,6 +18,10 @@ type SpaceUpdatedObserver struct { func (_m *SpaceUpdatedObserver) OnSpaceUpdated(ctx context.Context, before *spaces.Space, space *spaces.Space) error { ret := _m.Called(ctx, before, space) + if len(ret) == 0 { + panic("no return value specified for OnSpaceUpdated") + } + var r0 error if rf, ok := ret.Get(0).(func(context.Context, *spaces.Space, *spaces.Space) error); ok { r0 = rf(ctx, before, space) @@ -28,13 +32,12 @@ func (_m *SpaceUpdatedObserver) OnSpaceUpdated(ctx context.Context, before *spac return r0 } -type mockConstructorTestingTNewSpaceUpdatedObserver interface { +// NewSpaceUpdatedObserver creates a new instance of SpaceUpdatedObserver. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +// The first argument is typically a *testing.T value. +func NewSpaceUpdatedObserver(t interface { mock.TestingT Cleanup(func()) -} - -// NewSpaceUpdatedObserver creates a new instance of SpaceUpdatedObserver. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. -func NewSpaceUpdatedObserver(t mockConstructorTestingTNewSpaceUpdatedObserver) *SpaceUpdatedObserver { +}) *SpaceUpdatedObserver { mock := &SpaceUpdatedObserver{} mock.Mock.Test(t) diff --git a/pkg/spaces/mocks/Spaces.go b/pkg/spaces/mocks/Spaces.go index 0f7a187f31a572c96205427dae3438aac768c5e5..5e67d52deeab49a82d05ee410c4711106c387cb7 100644 --- a/pkg/spaces/mocks/Spaces.go +++ b/pkg/spaces/mocks/Spaces.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.27.1. DO NOT EDIT. +// Code generated by mockery v2.40.3. DO NOT EDIT. package mocks @@ -18,6 +18,10 @@ type Spaces struct { func (_m *Spaces) AbortTransfer(ctx context.Context, spaceID string) error { ret := _m.Called(ctx, spaceID) + if len(ret) == 0 { + panic("no return value specified for AbortTransfer") + } + var r0 error if rf, ok := ret.Get(0).(func(context.Context, string) error); ok { r0 = rf(ctx, spaceID) @@ -32,6 +36,10 @@ func (_m *Spaces) AbortTransfer(ctx context.Context, spaceID string) error { func (_m *Spaces) Create(ctx context.Context, space *spaces.Space) (*spaces.Space, error) { ret := _m.Called(ctx, space) + if len(ret) == 0 { + panic("no return value specified for Create") + } + var r0 *spaces.Space var r1 error if rf, ok := ret.Get(0).(func(context.Context, *spaces.Space) (*spaces.Space, error)); ok { @@ -58,6 +66,10 @@ func (_m *Spaces) Create(ctx context.Context, space *spaces.Space) (*spaces.Spac func (_m *Spaces) Delete(ctx context.Context, spaceId string) error { ret := _m.Called(ctx, spaceId) + if len(ret) == 0 { + panic("no return value specified for Delete") + } + var r0 error if rf, ok := ret.Get(0).(func(context.Context, string) error); ok { r0 = rf(ctx, spaceId) @@ -72,6 +84,10 @@ func (_m *Spaces) Delete(ctx context.Context, spaceId string) error { func (_m *Spaces) Get(ctx context.Context, spaceId string) (*spaces.Space, error) { ret := _m.Called(ctx, spaceId) + if len(ret) == 0 { + panic("no return value specified for Get") + } + var r0 *spaces.Space var r1 error if rf, ok := ret.Get(0).(func(context.Context, string) (*spaces.Space, error)); ok { @@ -98,6 +114,10 @@ func (_m *Spaces) Get(ctx context.Context, spaceId string) (*spaces.Space, error func (_m *Spaces) List(ctx context.Context, orgId string) ([]*spaces.Space, error) { ret := _m.Called(ctx, orgId) + if len(ret) == 0 { + panic("no return value specified for List") + } + var r0 []*spaces.Space var r1 error if rf, ok := ret.Get(0).(func(context.Context, string) ([]*spaces.Space, error)); ok { @@ -124,6 +144,10 @@ func (_m *Spaces) List(ctx context.Context, orgId string) ([]*spaces.Space, erro func (_m *Spaces) ListTransfers(ctx context.Context, orgID string) ([]*spaces.Space, error) { ret := _m.Called(ctx, orgID) + if len(ret) == 0 { + panic("no return value specified for ListTransfers") + } + var r0 []*spaces.Space var r1 error if rf, ok := ret.Get(0).(func(context.Context, string) ([]*spaces.Space, error)); ok { @@ -150,6 +174,10 @@ func (_m *Spaces) ListTransfers(ctx context.Context, orgID string) ([]*spaces.Sp func (_m *Spaces) Move(ctx context.Context, spaceID string, orgID string) error { ret := _m.Called(ctx, spaceID, orgID) + if len(ret) == 0 { + panic("no return value specified for Move") + } + var r0 error if rf, ok := ret.Get(0).(func(context.Context, string, string) error); ok { r0 = rf(ctx, spaceID, orgID) @@ -160,10 +188,32 @@ func (_m *Spaces) Move(ctx context.Context, spaceID string, orgID string) error return r0 } +// SetState provides a mock function with given fields: ctx, spaceID, state +func (_m *Spaces) SetState(ctx context.Context, spaceID string, state *spaces.StateInfo) error { + ret := _m.Called(ctx, spaceID, state) + + if len(ret) == 0 { + panic("no return value specified for SetState") + } + + var r0 error + if rf, ok := ret.Get(0).(func(context.Context, string, *spaces.StateInfo) error); ok { + r0 = rf(ctx, spaceID, state) + } else { + r0 = ret.Error(0) + } + + return r0 +} + // Transfer provides a mock function with given fields: ctx, spaceID, transferToOrg func (_m *Spaces) Transfer(ctx context.Context, spaceID string, transferToOrg string) error { ret := _m.Called(ctx, spaceID, transferToOrg) + if len(ret) == 0 { + panic("no return value specified for Transfer") + } + var r0 error if rf, ok := ret.Get(0).(func(context.Context, string, string) error); ok { r0 = rf(ctx, spaceID, transferToOrg) @@ -178,6 +228,10 @@ func (_m *Spaces) Transfer(ctx context.Context, spaceID string, transferToOrg st func (_m *Spaces) Update(ctx context.Context, space *spaces.Space) error { ret := _m.Called(ctx, space) + if len(ret) == 0 { + panic("no return value specified for Update") + } + var r0 error if rf, ok := ret.Get(0).(func(context.Context, *spaces.Space) error); ok { r0 = rf(ctx, space) @@ -192,6 +246,10 @@ func (_m *Spaces) Update(ctx context.Context, space *spaces.Space) error { func (_m *Spaces) UpdateConfig(ctx context.Context, spaceId string, config *spaces.Config) error { ret := _m.Called(ctx, spaceId, config) + if len(ret) == 0 { + panic("no return value specified for UpdateConfig") + } + var r0 error if rf, ok := ret.Get(0).(func(context.Context, string, *spaces.Config) error); ok { r0 = rf(ctx, spaceId, config) @@ -202,13 +260,12 @@ func (_m *Spaces) UpdateConfig(ctx context.Context, spaceId string, config *spac return r0 } -type mockConstructorTestingTNewSpaces interface { +// NewSpaces creates a new instance of Spaces. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +// The first argument is typically a *testing.T value. +func NewSpaces(t interface { mock.TestingT Cleanup(func()) -} - -// NewSpaces creates a new instance of Spaces. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. -func NewSpaces(t mockConstructorTestingTNewSpaces) *Spaces { +}) *Spaces { mock := &Spaces{} mock.Mock.Test(t) diff --git a/pkg/spaces/mocks/Storage.go b/pkg/spaces/mocks/Storage.go index 0f61e8c4d5796032d6e6103b070512dc8c5b87b7..078993cebec0cb2a5748c0d5bf1c50fb68d4def0 100644 --- a/pkg/spaces/mocks/Storage.go +++ b/pkg/spaces/mocks/Storage.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.27.1. DO NOT EDIT. +// Code generated by mockery v2.40.3. DO NOT EDIT. package mocks @@ -20,6 +20,10 @@ type Storage struct { func (_m *Storage) Create(ctx context.Context, space *spaces.Space) error { ret := _m.Called(ctx, space) + if len(ret) == 0 { + panic("no return value specified for Create") + } + var r0 error if rf, ok := ret.Get(0).(func(context.Context, *spaces.Space) error); ok { r0 = rf(ctx, space) @@ -34,6 +38,10 @@ func (_m *Storage) Create(ctx context.Context, space *spaces.Space) error { func (_m *Storage) Delete(ctx context.Context, filter *spaces.Filter) (int, error) { ret := _m.Called(ctx, filter) + if len(ret) == 0 { + panic("no return value specified for Delete") + } + var r0 int var r1 error if rf, ok := ret.Get(0).(func(context.Context, *spaces.Filter) (int, error)); ok { @@ -58,6 +66,10 @@ func (_m *Storage) Delete(ctx context.Context, filter *spaces.Filter) (int, erro func (_m *Storage) Find(ctx context.Context, filter *spaces.Filter, opts *options.FindOptions) ([]*spaces.Space, int, error) { ret := _m.Called(ctx, filter, opts) + if len(ret) == 0 { + panic("no return value specified for Find") + } + var r0 []*spaces.Space var r1 int var r2 error @@ -91,6 +103,10 @@ func (_m *Storage) Find(ctx context.Context, filter *spaces.Filter, opts *option func (_m *Storage) Init(ctx context.Context) error { ret := _m.Called(ctx) + if len(ret) == 0 { + panic("no return value specified for Init") + } + var r0 error if rf, ok := ret.Get(0).(func(context.Context) error); ok { r0 = rf(ctx) @@ -105,6 +121,10 @@ func (_m *Storage) Init(ctx context.Context) error { func (_m *Storage) Reset(ctx context.Context) error { ret := _m.Called(ctx) + if len(ret) == 0 { + panic("no return value specified for Reset") + } + var r0 error if rf, ok := ret.Get(0).(func(context.Context) error); ok { r0 = rf(ctx) @@ -119,6 +139,10 @@ func (_m *Storage) Reset(ctx context.Context) error { func (_m *Storage) Update(ctx context.Context, update *spaces.Space, filter *spaces.Filter) (int, int, error) { ret := _m.Called(ctx, update, filter) + if len(ret) == 0 { + panic("no return value specified for Update") + } + var r0 int var r1 int var r2 error @@ -146,13 +170,12 @@ func (_m *Storage) Update(ctx context.Context, update *spaces.Space, filter *spa return r0, r1, r2 } -type mockConstructorTestingTNewStorage interface { +// NewStorage creates a new instance of Storage. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +// The first argument is typically a *testing.T value. +func NewStorage(t interface { mock.TestingT Cleanup(func()) -} - -// NewStorage creates a new instance of Storage. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. -func NewStorage(t mockConstructorTestingTNewStorage) *Storage { +}) *Storage { mock := &Storage{} mock.Mock.Test(t) diff --git a/pkg/spaces/service.go b/pkg/spaces/service.go index 40c6bd9ebf7a16f694bec40388dd4a7dd8208473..1877e468a70e3145b9289c685a129739ba29e01b 100644 --- a/pkg/spaces/service.go +++ b/pkg/spaces/service.go @@ -28,6 +28,9 @@ type Spaces interface { List(ctx context.Context, orgId string) (spaces []*Space, err error) Update(ctx context.Context, space *Space) (err error) UpdateConfig(ctx context.Context, spaceId string, config *Config) (err error) + + // @microgen - + SetState(ctx context.Context, spaceID string, state *StateInfo) (err error) Delete(ctx context.Context, spaceId string) (err error) // Transfer устанавливает для пространства значение поля RequestedMoveTo. После этого пространство diff --git a/pkg/spaces/space.go b/pkg/spaces/space.go index 83edb3f14706793aed6077adcee856598358b044..482a953b1e79e8690c58748439ce66dc68430b0e 100644 --- a/pkg/spaces/space.go +++ b/pkg/spaces/space.go @@ -15,8 +15,29 @@ const ( StateError // Произошла ошибка при конфигурации пространства (см. Space.Error) ) +func (s State) String() string { + switch s { + case StateNew: + return "New" + case StateReady: + return "Ready" + case StatePreparing: + return "Preparing" + case StateMaintenance: + return "Maintenance" + case StateMigration: + return "Migration" + case StateDeleting: + return "Deleting" + case StateError: + return "Error" + default: + return "Unknown" + } +} + type Config struct { - Features []string //Deprecated Возможности используемые пространством + Features []string // Deprecated Возможности используемые пространством } const StateInfoEmpty = "EMPTY" @@ -42,4 +63,4 @@ type StateInfo struct { func (s Space) Clone() *Space { return &s -} \ No newline at end of file +} diff --git a/pkg/spaces/transport/client.go b/pkg/spaces/transport/client.go index 26900dad00a30d5c685ce507626dd7d93d847c87..f7f2edcd2b04d986c03720966b7c677c3ac6be2d 100644 --- a/pkg/spaces/transport/client.go +++ b/pkg/spaces/transport/client.go @@ -56,6 +56,10 @@ func (set EndpointsSet) UpdateConfig(arg0 context.Context, arg1 string, arg2 *sp return res0 } +func (set EndpointsSet) SetState(arg0 context.Context, arg1 string, arg2 *spaces.StateInfo) (res0 error) { + return +} + func (set EndpointsSet) Delete(arg0 context.Context, arg1 string) (res0 error) { request := DeleteRequest{SpaceId: arg1} _, res0 = set.DeleteEndpoint(arg0, &request)