diff --git a/api.go b/api.go index bc96aef..c986307 100644 --- a/api.go +++ b/api.go @@ -1,12 +1,34 @@ package main import ( + "log" + "os" + "github.com/play-with-docker/play-with-docker/config" + "github.com/play-with-docker/play-with-docker/docker" + "github.com/play-with-docker/play-with-docker/event" "github.com/play-with-docker/play-with-docker/handlers" + "github.com/play-with-docker/play-with-docker/storage" ) func main() { config.ParseFlags() - handlers.Bootstrap() + handlers.Bootstrap(initStorage, initEvent, initFactory) handlers.Register() } + +func initStorage() storage.StorageApi { + s, err := storage.NewFileStorage(config.SessionsFile) + if err != nil && !os.IsNotExist(err) { + log.Fatal("Error initializing StorageAPI: ", err) + } + return s +} + +func initEvent() event.EventApi { + return event.NewLocalBroker() +} + +func initFactory(s storage.StorageApi) docker.FactoryApi { + return docker.NewLocalCachedFactory(s) +} diff --git a/handlers/bootstrap.go b/handlers/bootstrap.go index feb92f2..de18735 100644 --- a/handlers/bootstrap.go +++ b/handlers/bootstrap.go @@ -25,15 +25,13 @@ var core pwd.PWDApi var e event.EventApi var ws *socketio.Server -func Bootstrap() { - s, err := storage.NewFileStorage(config.SessionsFile) - e = event.NewLocalBroker() +func Bootstrap(storageInit func() storage.StorageApi, eventInit func() event.EventApi, factoryInit func(storage.StorageApi) docker.FactoryApi) { + s := storageInit() - f := docker.NewLocalCachedFactory(s) + e = eventInit() + + f := factoryInit(s) - if err != nil && !os.IsNotExist(err) { - log.Fatal("Error initializing StorageAPI: ", err) - } core = pwd.NewPWD(f, e, s) sch, err := scheduler.NewScheduler(s, e, core)