Skip to content
Snippets Groups Projects
Select Git revision
  • d6583291e0bd1f128fe3eb0457e4328138e61f64
  • master default protected
  • feature/PRXS-3383-CollectionsSort
  • feature/2781-SpacesLoggingMiddleware
  • feature/PRXS-3421-ImplementNewRefAPI
  • feature/PRXS-3143-3235-ReferenceOptions
  • feature/PRXS-3143-LimitReferenceFields
  • feature/PRXS-3234-FeaturePruneIdents
  • PRXS-3421-RecursiveReferences
  • feature/3109-SerializeFeature
  • release/0.33
  • feature/3109-RecoverySchema
  • feature/3109-feature
  • fix/PRXS-3369-ValidateFields
  • refactor/PRXS-3306-MovePkgGroup1
  • refactor/6-pkg-refactor-expr
  • fix/PRXS-3360-TemplateBuilderPatch
  • feature/3293-MongoV2
  • feature/3272-GoVersionUp
  • feature/PRXS-3218-HideTemplateActions
  • feature/PRXS-3234-PruneIdents
  • v0.33.1
  • v0.32.0
  • v0.31.1
  • v0.31.0
  • v0.30.0
  • v0.29.0
  • v0.28.0
  • v0.27.0-alpha.1+16
  • v0.27.0-alpha.1+15
  • v0.27.0-alpha.1+14
  • v0.27.0-alpha.1+13
  • v0.27.0-alpha.1+12
  • v0.27.0-alpha.1+11
  • v0.27.0-alpha.1+10
  • v0.27.0-alpha.1+9
  • v0.27.0-alpha.1+8
  • v0.27.0-alpha.1+7
  • v0.27.0-alpha.1+6
  • v0.27.0-alpha.1+5
  • v0.27.0-alpha.1+4
41 results

client.go

Blame
  • server.go 3.08 KiB
    package extension
    
    import (
    	"context"
    
    	"git.perx.ru/perxis/perxis-go/pkg/errors"
    	pb "git.perx.ru/perxis/perxis-go/proto/extensions"
    )
    
    type Server struct {
    	services map[string]Extension
    	pb.UnimplementedExtensionServer
    }
    
    func NewServer(svc ...Extension) *Server {
    	srv := &Server{
    		services: make(map[string]Extension, len(svc)),
    	}
    	for _, s := range svc {
    		srv.services[s.GetDescriptor().Extension] = s
    	}
    	return srv
    }
    
    func getResult(ext string, err error) *RequestResult {
    	res := new(RequestResult)
    	res.Extension = ext
    	res.State = RequestOK
    
    	if err != nil {
    		res.State = RequestError
    		res.Error = err.Error()
    		errs := errors.GetErrors(err)
    		if errs == nil {
    			errs = append(errs, err)
    		}
    		for _, e := range errs {
    			res.Msg += errors.GetDetail(e) + "\n"
    		}
    	}
    	return res
    }
    
    func (srv *Server) getResults(extensions []string, fn func(svc Extension) error) []*RequestResult {
    
    	var results []*RequestResult
    
    	for _, e := range extensions {
    		svc, ok := srv.services[e]
    		if !ok {
    			results = append(results, getResult(e, ErrUnknownExtension))
    			continue
    		}
    
    		err := fn(svc)
    		results = append(results, getResult(e, err))
    	}
    
    	return results
    }
    
    func (srv *Server) Install(ctx context.Context, request *InstallRequest) (*InstallResponse, error) {
    	res := srv.getResults(request.Extensions, func(svc Extension) error { return svc.Install(ctx, request) })
    	return &InstallResponse{Results: res}, nil
    }
    
    func (srv *Server) Check(ctx context.Context, request *CheckRequest) (*CheckResponse, error) {
    	res := srv.getResults(request.Extensions, func(svc Extension) error { return svc.Check(ctx, request) })
    	return &CheckResponse{Results: res}, nil
    }
    
    func (srv *Server) Uninstall(ctx context.Context, request *UninstallRequest) (*UninstallResponse, error) {
    	res := srv.getResults(request.Extensions, func(svc Extension) error { return svc.Uninstall(ctx, request) })
    	return &UninstallResponse{Results: res}, nil
    }
    
    func (srv *Server) Update(ctx context.Context, request *UpdateRequest) (*UpdateResponse, error) {
    	res := srv.getResults(request.Extensions, func(svc Extension) error { return svc.Update(ctx, request) })
    	return &UpdateResponse{Results: res}, nil
    }
    
    func (srv *Server) Action(ctx context.Context, in *ActionRequest) (*ActionResponse, error) {
    
    	svc, ok := srv.services[in.Extension]
    	if !ok {
    		return nil, ErrUnknownExtension
    	}
    
    	out, err := svc.Action(ctx, in)
    
    	if out == nil {
    		out = &ActionResponse{}
    	}
    
    	if err != nil {
    		out.State = ResponseError
    		out.Error = err.Error()
    		out.Msg += errors.GetDetail(err)
    	}
    
    	return out, nil
    }
    
    func (srv *Server) Start() error {
    	var errs []error
    	for _, svc := range srv.services {
    		if r, ok := svc.(Runnable); ok {
    			if err := r.Start(); err != nil {
    				errs = append(errs, err)
    			}
    		}
    	}
    
    	if len(errs) > 0 {
    		return errors.WithErrors(ErrStart, errs...)
    	}
    
    	return nil
    }
    
    func (srv *Server) Stop() error {
    	var errs []error
    	for _, svc := range srv.services {
    		if r, ok := svc.(Runnable); ok {
    			if err := r.Stop(); err != nil {
    				errs = append(errs, err)
    			}
    		}
    	}
    
    	if len(errs) > 0 {
    		return errors.WithErrors(ErrStop, errs...)
    	}
    
    	return nil
    }