Refactor bootstrap so it's decoupled from main function
This commit is contained in:
24
api.go
24
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)
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user