Skip to content
Snippets Groups Projects
Commit 6a1bfe1e authored by Alena Petraki's avatar Alena Petraki :nail_care_tone1:
Browse files

Добавлен метод внутренний метод установки состояния пространства SetState для сервиса Spaces

parent c6bf2656
No related branches found
No related tags found
No related merge requests found
Showing
with 267 additions and 40 deletions
......@@ -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
}
......@@ -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)
......
......@@ -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() {
......
......@@ -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),
......
......@@ -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() {
......
// 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(
......
// 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)
......
// 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)
......
// 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)
......
// 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)
......
// 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)
......
// 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)
......
......@@ -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. После этого пространство
......
......@@ -15,6 +15,27 @@ 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 Возможности используемые пространством
}
......
......@@ -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)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment