blob: 1397a24e73dc7358e3ac6093774cbb5024b956d7 [file] [log] [blame]
Jiri Simsa5293dcb2014-05-10 09:56:38 -07001package main
2
3import (
4 "flag"
Bogdan Caprita5420f172014-10-10 15:58:14 -07005 "os"
Jiri Simsa5293dcb2014-05-10 09:56:38 -07006
Jiri Simsa519c5072014-09-17 21:37:57 -07007 "veyron.io/veyron/veyron2/naming"
8 "veyron.io/veyron/veyron2/rt"
9 "veyron.io/veyron/veyron2/vlog"
Cosmos Nicolaoud6c3c9c2014-09-30 15:42:53 -070010
11 "veyron.io/veyron/veyron/lib/signals"
12 "veyron.io/veyron/veyron/profiles/roaming"
Bogdan Capritaa456f472014-12-10 10:18:03 -080013 "veyron.io/veyron/veyron/services/mgmt/device/config"
14 "veyron.io/veyron/veyron/services/mgmt/device/impl"
Jiri Simsa5293dcb2014-05-10 09:56:38 -070015)
16
Adam Sadovsky5181bdb2014-08-13 10:29:11 -070017var (
Bogdan Caprita2b219362014-12-09 17:03:33 -080018 publishAs = flag.String("name", "", "name to publish the device manager at")
Bogdan Caprita5420f172014-10-10 15:58:14 -070019 installSelf = flag.Bool("install_self", false, "perform installation using environment and command-line flags")
20 installFrom = flag.String("install_from", "", "if not-empty, perform installation from the provided application envelope object name")
Adam Sadovsky5181bdb2014-08-13 10:29:11 -070021)
22
Jiri Simsa5293dcb2014-05-10 09:56:38 -070023func main() {
Jiri Simsa5293dcb2014-05-10 09:56:38 -070024 flag.Parse()
Matt Rosencrantz5180d162014-12-03 13:48:40 -080025 runtime, err := rt.New()
26 if err != nil {
27 vlog.Fatalf("Could not initialize runtime: %v", err)
28 }
Bogdan Caprita4258d882014-07-02 09:15:22 -070029 defer runtime.Cleanup()
Bogdan Caprita5420f172014-10-10 15:58:14 -070030
31 if len(*installFrom) > 0 {
32 if err := impl.InstallFrom(*installFrom); err != nil {
33 vlog.Errorf("InstallFrom failed: %v", err)
34 os.Exit(1)
35 }
36 return
37 }
38
39 if *installSelf {
Bogdan Caprita35fcead2014-12-04 17:38:30 -080040 // TODO(caprita): Make the flags survive updates.
41 if err := impl.SelfInstall(flag.Args(), os.Environ()); err != nil {
Bogdan Caprita5420f172014-10-10 15:58:14 -070042 vlog.Errorf("SelfInstall failed: %v", err)
43 os.Exit(1)
44 }
45 return
46 }
47
Jiri Simsa5293dcb2014-05-10 09:56:38 -070048 server, err := runtime.NewServer()
49 if err != nil {
50 vlog.Fatalf("NewServer() failed: %v", err)
51 }
52 defer server.Stop()
Cosmos Nicolaouf8d4c2b2014-10-23 22:36:38 -070053 endpoint, err := server.Listen(roaming.ListenSpec)
Jiri Simsa5293dcb2014-05-10 09:56:38 -070054 if err != nil {
Cosmos Nicolaoud6c3c9c2014-09-30 15:42:53 -070055 vlog.Fatalf("Listen(%s) failed: %v", roaming.ListenSpec, err)
Jiri Simsa5293dcb2014-05-10 09:56:38 -070056 }
David Why Use Two When One Will Do Presotto8b4dbbf2014-11-06 10:50:14 -080057 name := naming.JoinAddressName(endpoint.String(), "")
Bogdan Caprita2b219362014-12-09 17:03:33 -080058 vlog.VI(0).Infof("Device manager object name: %v", name)
Bogdan Capritac87a9142014-07-21 10:38:13 -070059 configState, err := config.Load()
60 if err != nil {
61 vlog.Fatalf("Failed to load config passed from parent: %v", err)
62 return
63 }
64 configState.Name = name
65 // TODO(caprita): We need a way to set config fields outside of the
66 // update mechanism (since that should ideally be an opaque
67 // implementation detail).
Matt Rosencrantz5180d162014-12-03 13:48:40 -080068 dispatcher, err := impl.NewDispatcher(runtime.Principal(), configState)
Bogdan Capritac87a9142014-07-21 10:38:13 -070069 if err != nil {
70 vlog.Fatalf("Failed to create dispatcher: %v", err)
71 }
Cosmos Nicolaou92dba582014-11-05 17:24:10 -080072 if err := server.ServeDispatcher(*publishAs, dispatcher); err != nil {
Adam Sadovsky5181bdb2014-08-13 10:29:11 -070073 vlog.Fatalf("Serve(%v) failed: %v", *publishAs, err)
Jiri Simsa24e87aa2014-06-09 09:27:34 -070074 }
Bogdan Caprita2b219362014-12-09 17:03:33 -080075 vlog.VI(0).Infof("Device manager published as: %v", *publishAs)
Matt Rosencrantz5180d162014-12-03 13:48:40 -080076 impl.InvokeCallback(runtime.NewContext(), name)
Bogdan Capritac87a9142014-07-21 10:38:13 -070077
Jiri Simsa5293dcb2014-05-10 09:56:38 -070078 // Wait until shutdown.
Matt Rosencrantzc7fecf12014-11-27 19:58:43 -080079 <-signals.ShutdownOnSignals(runtime)
Jiri Simsa5293dcb2014-05-10 09:56:38 -070080}