2019-11-03 01:54:35 +03:00
|
|
|
package handler
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
|
|
|
|
"github.com/micro/go-micro/errors"
|
|
|
|
"github.com/micro/go-micro/runtime"
|
|
|
|
pb "github.com/micro/go-micro/runtime/service/proto"
|
|
|
|
)
|
|
|
|
|
|
|
|
type Runtime struct {
|
|
|
|
Runtime runtime.Runtime
|
|
|
|
}
|
|
|
|
|
|
|
|
func toProto(s *runtime.Service) *pb.Service {
|
|
|
|
return &pb.Service{
|
|
|
|
Name: s.Name,
|
|
|
|
Version: s.Version,
|
|
|
|
Source: s.Source,
|
|
|
|
Path: s.Path,
|
|
|
|
Exec: s.Exec,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func toService(s *pb.Service) *runtime.Service {
|
|
|
|
return &runtime.Service{
|
|
|
|
Name: s.Name,
|
|
|
|
Version: s.Version,
|
|
|
|
Source: s.Source,
|
|
|
|
Path: s.Path,
|
|
|
|
Exec: s.Exec,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-11-15 16:41:40 +03:00
|
|
|
func toCreateOptions(opts *pb.CreateOptions) []runtime.CreateOption {
|
|
|
|
options := []runtime.CreateOption{}
|
|
|
|
// command options
|
|
|
|
l := len(opts.Command)
|
|
|
|
if l == 1 {
|
|
|
|
options = append(options, runtime.WithCommand(opts.Command[0]))
|
|
|
|
}
|
|
|
|
if l > 1 {
|
|
|
|
options = append(options, runtime.WithCommand(opts.Command[0], opts.Command[1:]...))
|
|
|
|
}
|
|
|
|
// env options
|
|
|
|
if len(opts.Env) > 0 {
|
|
|
|
options = append(options, runtime.WithEnv(opts.Env))
|
|
|
|
}
|
|
|
|
|
|
|
|
// TODO: output options
|
|
|
|
|
|
|
|
return options
|
|
|
|
}
|
|
|
|
|
|
|
|
func toGetOptions(opts *pb.GetOptions) []runtime.GetOption {
|
|
|
|
options := []runtime.GetOption{}
|
|
|
|
// version options
|
|
|
|
if len(opts.Version) > 0 {
|
|
|
|
options = append(options, runtime.WithVersion(opts.Version))
|
|
|
|
}
|
|
|
|
|
|
|
|
return options
|
|
|
|
}
|
|
|
|
|
2019-11-03 01:54:35 +03:00
|
|
|
func (r *Runtime) Create(ctx context.Context, req *pb.CreateRequest, rsp *pb.CreateResponse) error {
|
|
|
|
if req.Service == nil {
|
|
|
|
return errors.BadRequest("go.micro.runtime", "blank service")
|
|
|
|
}
|
|
|
|
|
2019-11-15 16:41:40 +03:00
|
|
|
var options []runtime.CreateOption
|
|
|
|
if req.Options != nil {
|
|
|
|
options = toCreateOptions(req.Options)
|
|
|
|
}
|
|
|
|
|
2019-11-03 01:54:35 +03:00
|
|
|
service := toService(req.Service)
|
2019-11-15 16:41:40 +03:00
|
|
|
err := r.Runtime.Create(service, options...)
|
2019-11-03 01:54:35 +03:00
|
|
|
if err != nil {
|
|
|
|
return errors.InternalServerError("go.micro.runtime", err.Error())
|
|
|
|
}
|
|
|
|
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
2019-11-15 16:41:40 +03:00
|
|
|
func (r *Runtime) Get(ctx context.Context, req *pb.GetRequest, rsp *pb.GetResponse) error {
|
|
|
|
if len(req.Name) == 0 {
|
|
|
|
return errors.BadRequest("go.micro.runtime", "blank service")
|
|
|
|
}
|
|
|
|
|
|
|
|
var options []runtime.GetOption
|
|
|
|
if req.Options != nil {
|
|
|
|
options = toGetOptions(req.Options)
|
|
|
|
}
|
|
|
|
|
|
|
|
services, err := r.Runtime.Get(req.Name, options...)
|
|
|
|
if err != nil {
|
|
|
|
return errors.InternalServerError("go.micro.runtime", err.Error())
|
|
|
|
}
|
|
|
|
|
|
|
|
for _, service := range services {
|
|
|
|
rsp.Services = append(rsp.Services, toProto(service))
|
|
|
|
}
|
|
|
|
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
2019-11-03 01:54:35 +03:00
|
|
|
func (r *Runtime) Update(ctx context.Context, req *pb.UpdateRequest, rsp *pb.UpdateResponse) error {
|
|
|
|
if req.Service == nil {
|
|
|
|
return errors.BadRequest("go.micro.runtime", "blank service")
|
|
|
|
}
|
|
|
|
|
|
|
|
// TODO: add opts
|
|
|
|
service := toService(req.Service)
|
|
|
|
err := r.Runtime.Update(service)
|
|
|
|
if err != nil {
|
|
|
|
return errors.InternalServerError("go.micro.runtime", err.Error())
|
|
|
|
}
|
|
|
|
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func (r *Runtime) Delete(ctx context.Context, req *pb.DeleteRequest, rsp *pb.DeleteResponse) error {
|
|
|
|
if req.Service == nil {
|
|
|
|
return errors.BadRequest("go.micro.runtime", "blank service")
|
|
|
|
}
|
|
|
|
|
|
|
|
// TODO: add opts
|
|
|
|
service := toService(req.Service)
|
|
|
|
err := r.Runtime.Delete(service)
|
|
|
|
if err != nil {
|
|
|
|
return errors.InternalServerError("go.micro.runtime", err.Error())
|
|
|
|
}
|
|
|
|
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func (r *Runtime) List(ctx context.Context, req *pb.ListRequest, rsp *pb.ListResponse) error {
|
|
|
|
services, err := r.Runtime.List()
|
|
|
|
if err != nil {
|
|
|
|
return errors.InternalServerError("go.micro.runtime", err.Error())
|
|
|
|
}
|
|
|
|
|
|
|
|
for _, service := range services {
|
|
|
|
rsp.Services = append(rsp.Services, toProto(service))
|
|
|
|
}
|
|
|
|
|
|
|
|
return nil
|
|
|
|
}
|