Files
opencloud/pkg/micro/runtime/runtime.go
2020-05-20 20:58:14 +02:00

123 lines
2.5 KiB
Go

package runtime
import (
"fmt"
golog "log"
"net/rpc"
"time"
"github.com/micro/cli/v2"
"github.com/micro/micro/v2/client/api"
"github.com/micro/micro/v2/client/proxy"
"github.com/micro/micro/v2/client/web"
"github.com/micro/micro/v2/service/registry"
"github.com/refs/pman/pkg/process"
"github.com/refs/pman/pkg/service"
)
var (
// OwncloudNamespace is the base path for micro' services to use
OwncloudNamespace = "com.owncloud."
// MicroServices to start as part of the fullstack option
MicroServices = []string{
"api", // :8080
"web", // :8082
"registry", // :8000
}
// Extensions are ocis extension services
Extensions = []string{
"phoenix",
"graph",
"graph-explorer",
"ocs",
"webdav",
"reva-frontend",
"reva-gateway",
"reva-users",
"reva-auth-basic",
"reva-auth-bearer",
"reva-sharing",
//"reva-storage-root",
"reva-storage-home",
"reva-storage-home-data",
"reva-storage-eos",
"reva-storage-eos-data",
"reva-storage-oc",
"reva-storage-oc-data",
"accounts",
"glauth",
"konnectd",
"proxy",
"thumbnails",
}
)
// Runtime represents an oCIS runtime environment.
type Runtime struct{}
// New creates a new ocis + micro runtime
func New() Runtime {
return Runtime{}
}
// Start rpc runtime
func (r *Runtime) Start() error {
go r.Launch()
return service.Start()
}
// Launch ocis Extensions
func (r *Runtime) Launch() {
client, err := rpc.DialHTTP("tcp", "localhost:10666")
if err != nil {
fmt.Println("rpc service not available, retrying in 1 second...")
time.Sleep(1 * time.Second)
r.Launch()
}
all := append(Extensions, MicroServices...)
for i := range all {
arg0 := process.NewProcEntry(
all[i],
[]string{all[i]}...,
)
var arg1 int
if err := client.Call("Service.Start", arg0, &arg1); err != nil {
golog.Fatal(err)
}
}
}
// AddMicroPlatform adds the micro subcommands to the cli app
func AddMicroPlatform(app *cli.App) {
setDefaults()
app.Commands = append(app.Commands, api.Commands()...)
app.Commands = append(app.Commands, proxy.Commands()...)
app.Commands = append(app.Commands, web.Commands()...)
app.Commands = append(app.Commands, registry.Commands()...)
}
// provide a config.Config with default values?
func setDefaults() {
// api
api.Name = OwncloudNamespace + "api"
api.Namespace = OwncloudNamespace + "api"
api.HeaderPrefix = "X-Micro-Owncloud-"
// proxy
proxy.Name = OwncloudNamespace + "proxy"
// web
web.Name = OwncloudNamespace + "web"
web.Namespace = OwncloudNamespace + "web"
// registry
registry.Name = OwncloudNamespace + "registry"
}