Runtime service implementation (#965)
This commit is contained in:
parent
55252cbc32
commit
11d81221cc
@ -6,6 +6,8 @@ import "time"
|
||||
var (
|
||||
// DefaultRuntime is default micro runtime
|
||||
DefaultRuntime Runtime = NewRuntime()
|
||||
// DefaultName is default runtime service name
|
||||
DefaultName = "go.micro.runtime"
|
||||
)
|
||||
|
||||
// Runtime is a service runtime manager
|
||||
|
185
runtime/service/service.go
Normal file
185
runtime/service/service.go
Normal file
@ -0,0 +1,185 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"context"
|
||||
"sync"
|
||||
|
||||
"github.com/micro/go-micro/client"
|
||||
"github.com/micro/go-micro/runtime"
|
||||
pb "github.com/micro/go-micro/runtime/service/proto"
|
||||
)
|
||||
|
||||
type svc struct {
|
||||
sync.RWMutex
|
||||
options runtime.Options
|
||||
runtime pb.RuntimeService
|
||||
}
|
||||
|
||||
// NewRuntime creates new service runtime and returns it
|
||||
func NewRuntime(opts ...runtime.Option) runtime.Runtime {
|
||||
// get default options
|
||||
options := runtime.Options{}
|
||||
|
||||
// apply requested options
|
||||
for _, o := range opts {
|
||||
o(&options)
|
||||
}
|
||||
|
||||
// create default client
|
||||
cli := client.DefaultClient
|
||||
|
||||
return &svc{
|
||||
options: options,
|
||||
runtime: pb.NewRuntimeService(runtime.DefaultName, cli),
|
||||
}
|
||||
}
|
||||
|
||||
// Init initializes runtime with given options
|
||||
func (s *svc) Init(opts ...runtime.Option) error {
|
||||
s.Lock()
|
||||
defer s.Unlock()
|
||||
|
||||
for _, o := range opts {
|
||||
o(&s.options)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// Create registers a service in the runtime
|
||||
func (s *svc) Create(svc *runtime.Service, opts ...runtime.CreateOption) error {
|
||||
options := runtime.CreateOptions{}
|
||||
// apply requested options
|
||||
for _, o := range opts {
|
||||
o(&options)
|
||||
}
|
||||
|
||||
// runtime service create request
|
||||
req := &pb.CreateRequest{
|
||||
Service: &pb.Service{
|
||||
Name: svc.Name,
|
||||
Version: svc.Version,
|
||||
Source: svc.Source,
|
||||
},
|
||||
Options: &pb.CreateOptions{
|
||||
Command: options.Command,
|
||||
Env: options.Env,
|
||||
},
|
||||
}
|
||||
|
||||
if _, err := s.runtime.Create(context.Background(), req); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// Get returns the service with the given name from the runtime
|
||||
func (s *svc) Get(name string, opts ...runtime.GetOption) ([]*runtime.Service, error) {
|
||||
options := runtime.GetOptions{}
|
||||
// apply requested options
|
||||
for _, o := range opts {
|
||||
o(&options)
|
||||
}
|
||||
|
||||
// runtime service create request
|
||||
req := &pb.GetRequest{
|
||||
Name: name,
|
||||
Options: &pb.GetOptions{
|
||||
Version: options.Version,
|
||||
},
|
||||
}
|
||||
|
||||
resp, err := s.runtime.Get(context.Background(), req)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
services := make([]*runtime.Service, 0, len(resp.Services))
|
||||
for _, service := range resp.Services {
|
||||
svc := &runtime.Service{
|
||||
Name: service.Name,
|
||||
Version: service.Version,
|
||||
Source: service.Source,
|
||||
Path: service.Path,
|
||||
Exec: service.Exec,
|
||||
}
|
||||
services = append(services, svc)
|
||||
}
|
||||
|
||||
return services, nil
|
||||
}
|
||||
|
||||
// Update updates the running service
|
||||
func (s *svc) Update(svc *runtime.Service) error {
|
||||
// runtime service create request
|
||||
req := &pb.UpdateRequest{
|
||||
Service: &pb.Service{
|
||||
Name: svc.Name,
|
||||
Version: svc.Version,
|
||||
},
|
||||
}
|
||||
|
||||
if _, err := s.runtime.Update(context.Background(), req); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// Delete stops and removes the service from the runtime
|
||||
func (s *svc) Delete(svc *runtime.Service) error {
|
||||
// runtime service create request
|
||||
req := &pb.DeleteRequest{
|
||||
Service: &pb.Service{
|
||||
Name: svc.Name,
|
||||
Version: svc.Version,
|
||||
},
|
||||
}
|
||||
|
||||
if _, err := s.runtime.Delete(context.Background(), req); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// List lists all services managed by the runtime
|
||||
func (s *svc) List() ([]*runtime.Service, error) {
|
||||
// list all services managed by the runtime
|
||||
resp, err := s.runtime.List(context.Background(), &pb.ListRequest{})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
services := make([]*runtime.Service, 0, len(resp.Services))
|
||||
for _, service := range resp.Services {
|
||||
svc := &runtime.Service{
|
||||
Name: service.Name,
|
||||
Version: service.Version,
|
||||
Source: service.Source,
|
||||
Path: service.Path,
|
||||
Exec: service.Exec,
|
||||
}
|
||||
services = append(services, svc)
|
||||
}
|
||||
|
||||
return services, nil
|
||||
}
|
||||
|
||||
// Start starts the runtime
|
||||
func (s *svc) Start() error {
|
||||
// NOTE: nothing to be done here
|
||||
return nil
|
||||
}
|
||||
|
||||
// Stop stops the runtime
|
||||
func (s *svc) Stop() error {
|
||||
// NOTE: nothing to be done here
|
||||
return nil
|
||||
}
|
||||
|
||||
// Returns the runtime service implementation
|
||||
func (s *svc) String() string {
|
||||
return "service"
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user