diff --git a/pkg/extension/extension.go b/pkg/extension/extension.go index ee95f328fdc31b75c68467df210d766c8cf336ce..15b92676be86b1782eb0ca8e5feb98bf1f8ba186 100644 --- a/pkg/extension/extension.go +++ b/pkg/extension/extension.go @@ -3,7 +3,6 @@ package extension import ( "context" - "git.perx.ru/perxis/perxis-go/pkg/operation" "go.uber.org/zap" "git.perx.ru/perxis/perxis-go" @@ -70,13 +69,6 @@ type Extension interface { Action(ctx context.Context, in *ActionRequest) (*ActionResponse, error) } -type ExtensionOpetation interface { - InstallOperation(ctx context.Context, in *InstallRequest) (*operation.Operation, error) - CheckOperation(ctx context.Context, in *CheckRequest) (*operation.Operation, error) - UninstallOperation(ctx context.Context, in *UninstallRequest) (*operation.Operation, error) - Action(ctx context.Context, in *ActionRequest) (*ActionResponse, error) -} - func CheckInstalled(ctx context.Context, content *content.Content, spaceID, envID, extension string) (bool, error) { status, err := NewStorage(content, nil).GetExtension(ctx, spaceID, envID, extension) if err != nil { diff --git a/pkg/extension/manager.go b/pkg/extension/manager.go index 285d21ad1119a1a78aaf239d0283f329abd8b9f5..9d4def7ce9e6c24c8e9ac257066606e16db80afb 100644 --- a/pkg/extension/manager.go +++ b/pkg/extension/manager.go @@ -10,7 +10,7 @@ import ( ) type Manager interface { - ExtensionOpetation + Extension RegisterExtensions(ctx context.Context, ext ...*ExtensionConnector) error UnregisterExtensions(ctx context.Context, ext ...*ExtensionConnector) error ListRegisteredExtensions(ctx context.Context, extensions ...string) ([]*ExtensionConnector, error) diff --git a/pkg/extension/manager_server.go b/pkg/extension/manager_server.go deleted file mode 100644 index 66a2f12ec800313399e498ecbd66350bf32833b3..0000000000000000000000000000000000000000 --- a/pkg/extension/manager_server.go +++ /dev/null @@ -1,76 +0,0 @@ -package extension - -import ( - "context" - - "git.perx.ru/perxis/perxis-go/pkg/errors" - "git.perx.ru/perxis/perxis-go/pkg/operation" - pb "git.perx.ru/perxis/perxis-go/proto/extensions" - "google.golang.org/grpc" -) - -type ManagerServer struct { - manager Manager - pb.UnimplementedExtensionServiceServer -} - -func NewManagerServer(manager Manager) *ManagerServer { - return &ManagerServer{manager: manager} -} - -func RegisterManagerServer(grpcSrv *grpc.Server, srv *ManagerServer) { - pb.RegisterExtensionServiceServer(grpcSrv, srv) -} - -func (s *ManagerServer) Install(ctx context.Context, req *InstallRequest) (*operation.Proto, error) { - op, err := s.manager.InstallOperation(ctx, req) - if err != nil { - return nil, err - } - return op.Proto(), nil -} - -func (s *ManagerServer) Uninstall(ctx context.Context, req *UninstallRequest) (*operation.Proto, error) { - op, err := s.manager.UninstallOperation(ctx, req) - if err != nil { - return nil, err - } - return op.Proto(), nil -} - -func (s *ManagerServer) Check(ctx context.Context, req *CheckRequest) (*operation.Proto, error) { - op, err := s.manager.CheckOperation(ctx, req) - if err != nil { - return nil, err - } - return op.Proto(), nil -} - -func (s *ManagerServer) Action(ctx context.Context, in *pb.ActionRequest) (*pb.ActionResponse, error) { - actionURL, err := NewActionURL(in.Action) - if err != nil { - return nil, ErrInvalidAction - } - - ext := actionURL.Extension() - if ext == "" { - ext = in.Extension - } - if ext == "" { - return nil, ErrInvalidAction - } - - out, err := s.manager.Action(ctx, ActionRequestFromPB(in)) - - if out == nil { - out = &ActionResponse{} - } - - if err != nil { - out.State = ResponseError - out.Error = err.Error() - out.Msg += errors.GetDetail(err) - } - - return ActionResponseToPB(out), nil -} diff --git a/pkg/extension/middleware/access_logging_middleware.go b/pkg/extension/middleware/access_logging_middleware.go index 46d3440971f8db4584912c32287306ec1a74e597..0fbd63de8991c449fc96ad49527f5e079bd88773 100644 --- a/pkg/extension/middleware/access_logging_middleware.go +++ b/pkg/extension/middleware/access_logging_middleware.go @@ -12,7 +12,6 @@ import ( "git.perx.ru/perxis/perxis-go/pkg/auth" "git.perx.ru/perxis/perxis-go/pkg/extension" - "git.perx.ru/perxis/perxis-go/pkg/operation" "go.uber.org/zap" ) @@ -51,42 +50,55 @@ func (m *accessLoggingMiddleware) Action(ctx context.Context, in *extension.Acti return ap1, err } -func (m *accessLoggingMiddleware) CheckOperation(ctx context.Context, in *extension.CheckRequest) (op1 *operation.Operation, err error) { +func (m *accessLoggingMiddleware) Check(ctx context.Context, in *extension.CheckRequest) (err error) { begin := time.Now() - m.logger.Debug("CheckOperation.Request", + m.logger.Debug("Check.Request", zap.Reflect("principal", auth.GetPrincipal(ctx)), zap.Reflect("in", in), ) - op1, err = m.next.CheckOperation(ctx, in) + err = m.next.Check(ctx, in) - m.logger.Debug("CheckOperation.Response", + m.logger.Debug("Check.Response", zap.Duration("time", time.Since(begin)), - zap.Reflect("op1", op1), zap.Error(err), ) - return op1, err + return err +} + +func (m *accessLoggingMiddleware) GetDescriptor() (ep1 *extension.ExtensionDescriptor) { + begin := time.Now() + + m.logger.Debug("GetDescriptor.Request") + + ep1 = m.next.GetDescriptor() + + m.logger.Debug("GetDescriptor.Response", + zap.Duration("time", time.Since(begin)), + zap.Reflect("ep1", ep1), + ) + + return ep1 } -func (m *accessLoggingMiddleware) InstallOperation(ctx context.Context, in *extension.InstallRequest) (op1 *operation.Operation, err error) { +func (m *accessLoggingMiddleware) Install(ctx context.Context, in *extension.InstallRequest) (err error) { begin := time.Now() - m.logger.Debug("InstallOperation.Request", + m.logger.Debug("Install.Request", zap.Reflect("principal", auth.GetPrincipal(ctx)), zap.Reflect("in", in), ) - op1, err = m.next.InstallOperation(ctx, in) + err = m.next.Install(ctx, in) - m.logger.Debug("InstallOperation.Response", + m.logger.Debug("Install.Response", zap.Duration("time", time.Since(begin)), - zap.Reflect("op1", op1), zap.Error(err), ) - return op1, err + return err } func (m *accessLoggingMiddleware) ListExtensions(ctx context.Context, space string, env string, filter *extension.ListExtensionsFilter) (ipa1 []*extension.Info, err error) { @@ -147,23 +159,22 @@ func (m *accessLoggingMiddleware) RegisterExtensions(ctx context.Context, ext .. return err } -func (m *accessLoggingMiddleware) UninstallOperation(ctx context.Context, in *extension.UninstallRequest) (op1 *operation.Operation, err error) { +func (m *accessLoggingMiddleware) Uninstall(ctx context.Context, in *extension.UninstallRequest) (err error) { begin := time.Now() - m.logger.Debug("UninstallOperation.Request", + m.logger.Debug("Uninstall.Request", zap.Reflect("principal", auth.GetPrincipal(ctx)), zap.Reflect("in", in), ) - op1, err = m.next.UninstallOperation(ctx, in) + err = m.next.Uninstall(ctx, in) - m.logger.Debug("UninstallOperation.Response", + m.logger.Debug("Uninstall.Response", zap.Duration("time", time.Since(begin)), - zap.Reflect("op1", op1), zap.Error(err), ) - return op1, err + return err } func (m *accessLoggingMiddleware) UnregisterExtensions(ctx context.Context, ext ...*extension.ExtensionConnector) (err error) { diff --git a/pkg/extension/middleware/error_logging_middleware.go b/pkg/extension/middleware/error_logging_middleware.go index d9f6753845852c57c904c947dd03480b678b6e32..474003790010e858eed9fb9ac2af71f17fb35094 100644 --- a/pkg/extension/middleware/error_logging_middleware.go +++ b/pkg/extension/middleware/error_logging_middleware.go @@ -10,7 +10,6 @@ import ( "context" "git.perx.ru/perxis/perxis-go/pkg/extension" - "git.perx.ru/perxis/perxis-go/pkg/operation" "go.uber.org/zap" ) @@ -40,24 +39,28 @@ func (m *errorLoggingMiddleware) Action(ctx context.Context, in *extension.Actio return m.next.Action(ctx, in) } -func (m *errorLoggingMiddleware) CheckOperation(ctx context.Context, in *extension.CheckRequest) (op1 *operation.Operation, err error) { +func (m *errorLoggingMiddleware) Check(ctx context.Context, in *extension.CheckRequest) (err error) { logger := m.logger defer func() { if err != nil { logger.Warn("response error", zap.Error(err)) } }() - return m.next.CheckOperation(ctx, in) + return m.next.Check(ctx, in) } -func (m *errorLoggingMiddleware) InstallOperation(ctx context.Context, in *extension.InstallRequest) (op1 *operation.Operation, err error) { +func (m *errorLoggingMiddleware) GetDescriptor() (ep1 *extension.ExtensionDescriptor) { + return m.next.GetDescriptor() +} + +func (m *errorLoggingMiddleware) Install(ctx context.Context, in *extension.InstallRequest) (err error) { logger := m.logger defer func() { if err != nil { logger.Warn("response error", zap.Error(err)) } }() - return m.next.InstallOperation(ctx, in) + return m.next.Install(ctx, in) } func (m *errorLoggingMiddleware) ListExtensions(ctx context.Context, space string, env string, filter *extension.ListExtensionsFilter) (ipa1 []*extension.Info, err error) { @@ -90,14 +93,14 @@ func (m *errorLoggingMiddleware) RegisterExtensions(ctx context.Context, ext ... return m.next.RegisterExtensions(ctx, ext...) } -func (m *errorLoggingMiddleware) UninstallOperation(ctx context.Context, in *extension.UninstallRequest) (op1 *operation.Operation, err error) { +func (m *errorLoggingMiddleware) Uninstall(ctx context.Context, in *extension.UninstallRequest) (err error) { logger := m.logger defer func() { if err != nil { logger.Warn("response error", zap.Error(err)) } }() - return m.next.UninstallOperation(ctx, in) + return m.next.Uninstall(ctx, in) } func (m *errorLoggingMiddleware) UnregisterExtensions(ctx context.Context, ext ...*extension.ExtensionConnector) (err error) { diff --git a/pkg/extension/middleware/recovering_middleware.go b/pkg/extension/middleware/recovering_middleware.go index 0a7284dda276d3339f87e520c92657792f65d239..54b78da481917fda0d5614f6d9158c455d4d03e6 100644 --- a/pkg/extension/middleware/recovering_middleware.go +++ b/pkg/extension/middleware/recovering_middleware.go @@ -11,7 +11,6 @@ import ( "fmt" "git.perx.ru/perxis/perxis-go/pkg/extension" - "git.perx.ru/perxis/perxis-go/pkg/operation" "go.uber.org/zap" ) @@ -43,7 +42,7 @@ func (m *recoveringMiddleware) Action(ctx context.Context, in *extension.ActionR return m.next.Action(ctx, in) } -func (m *recoveringMiddleware) CheckOperation(ctx context.Context, in *extension.CheckRequest) (op1 *operation.Operation, err error) { +func (m *recoveringMiddleware) Check(ctx context.Context, in *extension.CheckRequest) (err error) { logger := m.logger defer func() { if r := recover(); r != nil { @@ -52,10 +51,21 @@ func (m *recoveringMiddleware) CheckOperation(ctx context.Context, in *extension } }() - return m.next.CheckOperation(ctx, in) + return m.next.Check(ctx, in) } -func (m *recoveringMiddleware) InstallOperation(ctx context.Context, in *extension.InstallRequest) (op1 *operation.Operation, err error) { +func (m *recoveringMiddleware) GetDescriptor() (ep1 *extension.ExtensionDescriptor) { + logger := m.logger + defer func() { + if r := recover(); r != nil { + logger.Error("panic", zap.Error(fmt.Errorf("%v", r))) + } + }() + + return m.next.GetDescriptor() +} + +func (m *recoveringMiddleware) Install(ctx context.Context, in *extension.InstallRequest) (err error) { logger := m.logger defer func() { if r := recover(); r != nil { @@ -64,7 +74,7 @@ func (m *recoveringMiddleware) InstallOperation(ctx context.Context, in *extensi } }() - return m.next.InstallOperation(ctx, in) + return m.next.Install(ctx, in) } func (m *recoveringMiddleware) ListExtensions(ctx context.Context, space string, env string, filter *extension.ListExtensionsFilter) (ipa1 []*extension.Info, err error) { @@ -103,7 +113,7 @@ func (m *recoveringMiddleware) RegisterExtensions(ctx context.Context, ext ...*e return m.next.RegisterExtensions(ctx, ext...) } -func (m *recoveringMiddleware) UninstallOperation(ctx context.Context, in *extension.UninstallRequest) (op1 *operation.Operation, err error) { +func (m *recoveringMiddleware) Uninstall(ctx context.Context, in *extension.UninstallRequest) (err error) { logger := m.logger defer func() { if r := recover(); r != nil { @@ -112,7 +122,7 @@ func (m *recoveringMiddleware) UninstallOperation(ctx context.Context, in *exten } }() - return m.next.UninstallOperation(ctx, in) + return m.next.Uninstall(ctx, in) } func (m *recoveringMiddleware) UnregisterExtensions(ctx context.Context, ext ...*extension.ExtensionConnector) (err error) { diff --git a/pkg/extension/middleware/telemetry_middleware.go b/pkg/extension/middleware/telemetry_middleware.go index 54b823abb1d9d92d0d8e513948ff7501c0df27f5..7302cab3b4ecf364f475b0dbe7d77a37c96cd784 100644 --- a/pkg/extension/middleware/telemetry_middleware.go +++ b/pkg/extension/middleware/telemetry_middleware.go @@ -13,7 +13,6 @@ import ( oid "git.perx.ru/perxis/perxis-go/id" "git.perx.ru/perxis/perxis-go/pkg/auth" "git.perx.ru/perxis/perxis-go/pkg/extension" - "git.perx.ru/perxis/perxis-go/pkg/operation" "git.perx.ru/perxis/perxis-go/pkg/telemetry/metrics" "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/attribute" @@ -93,19 +92,19 @@ func (_d telemetryMiddleware) Action(ctx context.Context, in *extension.ActionRe return ap1, err } -// CheckOperation implements extension.Manager -func (_d telemetryMiddleware) CheckOperation(ctx context.Context, in *extension.CheckRequest) (op1 *operation.Operation, err error) { +// Check implements extension.Manager +func (_d telemetryMiddleware) Check(ctx context.Context, in *extension.CheckRequest) (err error) { var att = []attribute.KeyValue{ attribute.String("service", "Manager"), - attribute.String("method", "CheckOperation"), + attribute.String("method", "Check"), } attributes := otelmetric.WithAttributeSet(attribute.NewSet(att...)) start := time.Now() - ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Manager.CheckOperation") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Manager.Check") defer _span.End() - op1, err = _d.Manager.CheckOperation(ctx, in) + err = _d.Manager.Check(ctx, in) _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) @@ -120,7 +119,6 @@ func (_d telemetryMiddleware) CheckOperation(ctx context.Context, in *extension. _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "in": in}, map[string]interface{}{ - "op1": op1, "err": err}) } else if err != nil { _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) @@ -130,22 +128,22 @@ func (_d telemetryMiddleware) CheckOperation(ctx context.Context, in *extension. _span.SetAttributes(attribute.String("message", err.Error())) } - return op1, err + return err } -// InstallOperation implements extension.Manager -func (_d telemetryMiddleware) InstallOperation(ctx context.Context, in *extension.InstallRequest) (op1 *operation.Operation, err error) { +// Install implements extension.Manager +func (_d telemetryMiddleware) Install(ctx context.Context, in *extension.InstallRequest) (err error) { var att = []attribute.KeyValue{ attribute.String("service", "Manager"), - attribute.String("method", "InstallOperation"), + attribute.String("method", "Install"), } attributes := otelmetric.WithAttributeSet(attribute.NewSet(att...)) start := time.Now() - ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Manager.InstallOperation") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Manager.Install") defer _span.End() - op1, err = _d.Manager.InstallOperation(ctx, in) + err = _d.Manager.Install(ctx, in) _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) @@ -160,7 +158,6 @@ func (_d telemetryMiddleware) InstallOperation(ctx context.Context, in *extensio _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "in": in}, map[string]interface{}{ - "op1": op1, "err": err}) } else if err != nil { _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) @@ -170,7 +167,7 @@ func (_d telemetryMiddleware) InstallOperation(ctx context.Context, in *extensio _span.SetAttributes(attribute.String("message", err.Error())) } - return op1, err + return err } // ListExtensions implements extension.Manager @@ -294,19 +291,19 @@ func (_d telemetryMiddleware) RegisterExtensions(ctx context.Context, ext ...*ex return err } -// UninstallOperation implements extension.Manager -func (_d telemetryMiddleware) UninstallOperation(ctx context.Context, in *extension.UninstallRequest) (op1 *operation.Operation, err error) { +// Uninstall implements extension.Manager +func (_d telemetryMiddleware) Uninstall(ctx context.Context, in *extension.UninstallRequest) (err error) { var att = []attribute.KeyValue{ attribute.String("service", "Manager"), - attribute.String("method", "UninstallOperation"), + attribute.String("method", "Uninstall"), } attributes := otelmetric.WithAttributeSet(attribute.NewSet(att...)) start := time.Now() - ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Manager.UninstallOperation") + ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Manager.Uninstall") defer _span.End() - op1, err = _d.Manager.UninstallOperation(ctx, in) + err = _d.Manager.Uninstall(ctx, in) _d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes) @@ -321,7 +318,6 @@ func (_d telemetryMiddleware) UninstallOperation(ctx context.Context, in *extens _d._spanDecorator(_span, map[string]interface{}{ "ctx": ctx, "in": in}, map[string]interface{}{ - "op1": op1, "err": err}) } else if err != nil { _d.requestMetrics.FailedTotal.Add(ctx, 1, attributes) @@ -331,7 +327,7 @@ func (_d telemetryMiddleware) UninstallOperation(ctx context.Context, in *extens _span.SetAttributes(attribute.String("message", err.Error())) } - return op1, err + return err } // UnregisterExtensions implements extension.Manager