Commit bb7dc471 authored by Denis Arh's avatar Denis Arh
Browse files

Add script-runner configuration capabilities

parent 4bbc85e1
......@@ -36,7 +36,8 @@ func Configure() *cli.Config {
servicesInitialized = true
cli.HandleError(service.Init(ctx, c.Log, service.Config{
Storage: *c.StorageOpt,
Storage: *c.StorageOpt,
ScriptRunner: *c.ScriptRunner,
}))
},
......
......@@ -22,7 +22,7 @@ type (
logger *zap.Logger
ac recordAccessController
sr *scriptRunner
sr RecordScriptRunner
recordRepo repository.RecordRepository
moduleRepo repository.ModuleRepository
......@@ -41,6 +41,10 @@ type (
CanUpdateRecordValue(context.Context, *types.ModuleField) bool
}
RecordScriptRunner interface {
Record(context.Context, Runnable, *types.Namespace, *types.Module, *types.Record) (*types.Record, error)
}
RecordService interface {
With(ctx context.Context) RecordService
......
......@@ -13,6 +13,7 @@ import (
"github.com/cortezaproject/corteza-server/compose/proto"
"github.com/cortezaproject/corteza-server/compose/types"
"github.com/cortezaproject/corteza-server/internal/auth"
"github.com/cortezaproject/corteza-server/pkg/cli/options"
)
// Script runner provides an interface to corteza-corredor (Spanish for runner) service
......@@ -25,7 +26,7 @@ import (
type (
scriptRunner struct {
addr string
c options.ScriptRunnerOpt
logger *zap.Logger
conn *grpc.ClientConn
client proto.ScriptRunnerClient
......@@ -38,27 +39,40 @@ type (
IsCritical() bool
GetRunnerID() uint64
}
ScriptRunnerService interface {
Close() error
Namespace(context.Context, Runnable, *types.Namespace) (*types.Namespace, error)
Module(context.Context, Runnable, *types.Namespace, *types.Module) (*types.Module, error)
Record(context.Context, Runnable, *types.Namespace, *types.Module, *types.Record) (*types.Record, error)
}
)
func ScriptRunner(addr string) *scriptRunner {
return &scriptRunner{
addr: addr,
// @todo move to opt so all services can use it
func ScriptRunner(c options.ScriptRunnerOpt) (*scriptRunner, error) {
var svc = &scriptRunner{
c: c,
logger: DefaultLogger.Named("script-runner"),
jwtEncoder: auth.DefaultJwtHandler,
}
}
func (svc *scriptRunner) Connect() (err error) {
if svc.conn != nil {
return nil
}
return svc, svc.connect()
}
func (svc *scriptRunner) connect() (err error) {
// @todo wire grpc logger with zap logger
grpclog.SetLoggerV2(grpclog.NewLoggerV2WithVerbosity(os.Stdout, os.Stdout, os.Stdout, 0))
svc.conn, err = grpc.Dial(
svc.addr,
var dopts = []grpc.DialOption{
// @todo insecure?
grpc.WithInsecure(),
grpc.WithBackoffMaxDelay(time.Second))
}
if svc.c.MaxBackoffDelay > 0 {
dopts = append(dopts, grpc.WithBackoffMaxDelay(svc.c.MaxBackoffDelay))
}
svc.conn, err = grpc.Dial(svc.c.Addr, dopts...)
if err != nil {
return
......
......@@ -19,7 +19,8 @@ type (
}
Config struct {
Storage options.StorageOpt
Storage options.StorageOpt
ScriptRunner options.ScriptRunnerOpt
}
)
......@@ -39,7 +40,7 @@ var (
DefaultAttachment AttachmentService
DefaultNamespace NamespaceService
DefaultScriptRunner *scriptRunner // @todo interface
DefaultScriptRunner ScriptRunnerService
)
func Init(ctx context.Context, log *zap.Logger, c Config) (err error) {
......@@ -58,8 +59,7 @@ func Init(ctx context.Context, log *zap.Logger, c Config) (err error) {
DefaultAccessControl = AccessControl(DefaultPermissions)
DefaultScriptRunner = ScriptRunner("localhost:50051")
err = DefaultScriptRunner.Connect()
DefaultScriptRunner, err = ScriptRunner(c.ScriptRunner)
if err != nil {
return
}
......
package options
import (
"time"
)
type (
StorageOpt struct {
Path string `env:"STORAGE_PATH"`
ScriptRunnerOpt struct {
Addr string `env:"SCRIPT_RUNNER_ADDR"`
MaxBackoffDelay time.Duration `env:"SCRIPT_RUNNER_MAX_BACKOFF_DELAY"`
}
)
func Storage(pfix string) (o *StorageOpt) {
o = &StorageOpt{
Path: "var/store",
func ScriptRunner(pfix string) (o *ScriptRunnerOpt) {
o = &ScriptRunnerOpt{
Addr: "corredor:80",
MaxBackoffDelay: time.Minute,
}
fill(o, pfix)
......
......@@ -50,6 +50,7 @@ type (
ProvisionOpt *options.ProvisionOpt
SentryOpt *options.SentryOpt
StorageOpt *options.StorageOpt
ScriptRunner *options.ScriptRunnerOpt
// DB Connection name, defaults to ServiceName
DatabaseName string
......@@ -188,6 +189,7 @@ func (c *Config) Init() {
c.ProvisionOpt = options.Provision(c.ServiceName)
c.SentryOpt = options.Sentry(c.EnvPrefix)
c.StorageOpt = options.Storage(c.EnvPrefix)
c.ScriptRunner = options.ScriptRunner(c.EnvPrefix)
if c.RootCommandDBSetup == nil {
c.RootCommandDBSetup = Runners{func(ctx context.Context, cmd *cobra.Command, c *Config) (err error) {
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment