Update to use TOML config
This commit is contained in:
parent
0262a99321
commit
e9efc2ff82
@ -6,7 +6,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/8thlight/vulcanizedb/blockchain_listener"
|
"github.com/8thlight/vulcanizedb/blockchain_listener"
|
||||||
cfg "github.com/8thlight/vulcanizedb/config"
|
"github.com/8thlight/vulcanizedb/config"
|
||||||
"github.com/8thlight/vulcanizedb/core"
|
"github.com/8thlight/vulcanizedb/core"
|
||||||
"github.com/8thlight/vulcanizedb/geth"
|
"github.com/8thlight/vulcanizedb/geth"
|
||||||
"github.com/8thlight/vulcanizedb/observers"
|
"github.com/8thlight/vulcanizedb/observers"
|
||||||
@ -14,18 +14,19 @@ import (
|
|||||||
do "gopkg.in/godo.v2"
|
do "gopkg.in/godo.v2"
|
||||||
)
|
)
|
||||||
|
|
||||||
func parseIpcPath(context *do.Context) string {
|
func parseEnvironment(context *do.Context) string {
|
||||||
ipcPath := context.Args.MayString("", "ipc-path", "i")
|
environment := context.Args.MayString("", "environment", "env", "e")
|
||||||
if ipcPath == "" {
|
if environment == "" {
|
||||||
log.Fatalln("--ipc-path required")
|
log.Fatalln("--environment required")
|
||||||
}
|
}
|
||||||
return ipcPath
|
return environment
|
||||||
}
|
}
|
||||||
|
|
||||||
func startBlockchainListener(config cfg.Config, ipcPath string) {
|
func startBlockchainListener(cfg config.Config) {
|
||||||
blockchain := geth.NewGethBlockchain(ipcPath)
|
fmt.Println("Client Path ", cfg.Client.IPCPath)
|
||||||
|
blockchain := geth.NewGethBlockchain(cfg.Client.IPCPath)
|
||||||
loggingObserver := observers.BlockchainLoggingObserver{}
|
loggingObserver := observers.BlockchainLoggingObserver{}
|
||||||
connectString := cfg.DbConnectionString(cfg.Public().Database)
|
connectString := config.DbConnectionString(cfg.Database)
|
||||||
db, err := sqlx.Connect("postgres", connectString)
|
db, err := sqlx.Connect("postgres", connectString)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("Error connecting to DB: %v\n", err)
|
log.Fatalf("Error connecting to DB: %v\n", err)
|
||||||
@ -40,36 +41,30 @@ func startBlockchainListener(config cfg.Config, ipcPath string) {
|
|||||||
|
|
||||||
func tasks(p *do.Project) {
|
func tasks(p *do.Project) {
|
||||||
|
|
||||||
p.Task("runPublic", nil, func(context *do.Context) {
|
p.Task("run", nil, func(context *do.Context) {
|
||||||
startBlockchainListener(cfg.Public(), parseIpcPath(context))
|
environment := parseEnvironment(context)
|
||||||
|
cfg := config.NewConfig(environment)
|
||||||
|
startBlockchainListener(cfg)
|
||||||
})
|
})
|
||||||
|
|
||||||
p.Task("runPrivate", nil, func(context *do.Context) {
|
p.Task("migrate", nil, func(context *do.Context) {
|
||||||
startBlockchainListener(cfg.Private(), parseIpcPath(context))
|
environment := parseEnvironment(context)
|
||||||
|
cfg := config.NewConfig(environment)
|
||||||
|
connectString := config.DbConnectionString(cfg.Database)
|
||||||
|
migrate := fmt.Sprintf("migrate -database '%s' -path ./migrations up", connectString)
|
||||||
|
dumpSchema := fmt.Sprintf("pg_dump -O -s %s > migrations/schema.sql", cfg.Database.Name)
|
||||||
|
context.Bash(migrate)
|
||||||
|
context.Bash(dumpSchema)
|
||||||
})
|
})
|
||||||
|
|
||||||
p.Task("migratePublic", nil, func(context *do.Context) {
|
p.Task("rollback", nil, func(context *do.Context) {
|
||||||
connectString := cfg.DbConnectionString(cfg.Public().Database)
|
environment := parseEnvironment(context)
|
||||||
context.Bash(fmt.Sprintf("migrate -database '%s' -path ./migrations up", connectString))
|
cfg := config.NewConfig(environment)
|
||||||
context.Bash(fmt.Sprintf("pg_dump -O -s %s > migrations/schema.sql", cfg.Public().Database.Name))
|
connectString := config.DbConnectionString(cfg.Database)
|
||||||
})
|
migrate := fmt.Sprintf("migrate -database '%s' -path ./migrations down 1", connectString)
|
||||||
|
dumpSchema := fmt.Sprintf("pg_dump -O -s %s > migrations/schema.sql", cfg.Database.Name)
|
||||||
p.Task("migratePrivate", nil, func(context *do.Context) {
|
context.Bash(migrate)
|
||||||
connectString := cfg.DbConnectionString(cfg.Private().Database)
|
context.Bash(dumpSchema)
|
||||||
context.Bash(fmt.Sprintf("migrate -database '%s' -path ./migrations up", connectString))
|
|
||||||
context.Bash(fmt.Sprintf("pg_dump -O -s %s > migrations/schema.sql", cfg.Private().Database.Name))
|
|
||||||
})
|
|
||||||
|
|
||||||
p.Task("rollbackPublic", nil, func(context *do.Context) {
|
|
||||||
connectString := cfg.DbConnectionString(cfg.Public().Database)
|
|
||||||
context.Bash(fmt.Sprintf("migrate -database '%s' -path ./migrations down 1", connectString))
|
|
||||||
context.Bash("pg_dump -O -s vulcanize_public > migrations/schema.sql")
|
|
||||||
})
|
|
||||||
|
|
||||||
p.Task("rollbackPrivate", nil, func(context *do.Context) {
|
|
||||||
connectString := cfg.DbConnectionString(cfg.Private().Database)
|
|
||||||
context.Bash(fmt.Sprintf("migrate -database '%s' -path ./migrations down 1", connectString))
|
|
||||||
context.Bash("pg_dump -O -s vulcanize_private > migrations/schema.sql")
|
|
||||||
})
|
})
|
||||||
|
|
||||||
}
|
}
|
||||||
|
76
Gopkg.lock
generated
76
Gopkg.lock
generated
@ -1,6 +1,18 @@
|
|||||||
# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'.
|
# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'.
|
||||||
|
|
||||||
|
|
||||||
|
[[projects]]
|
||||||
|
name = "github.com/BurntSushi/toml"
|
||||||
|
packages = ["."]
|
||||||
|
revision = "b26d9c308763d68093482582cea63d69be07a0f0"
|
||||||
|
version = "v0.3.0"
|
||||||
|
|
||||||
|
[[projects]]
|
||||||
|
branch = "master"
|
||||||
|
name = "github.com/MichaelTJones/walk"
|
||||||
|
packages = ["."]
|
||||||
|
revision = "4748e29d5718c2df4028a6543edf86fd8cc0f881"
|
||||||
|
|
||||||
[[projects]]
|
[[projects]]
|
||||||
branch = "master"
|
branch = "master"
|
||||||
name = "github.com/btcsuite/btcd"
|
name = "github.com/btcsuite/btcd"
|
||||||
@ -19,6 +31,12 @@
|
|||||||
revision = "817915b46b97fd7bb80e8ab6b69f01a53ac3eebf"
|
revision = "817915b46b97fd7bb80e8ab6b69f01a53ac3eebf"
|
||||||
version = "v1.6.0"
|
version = "v1.6.0"
|
||||||
|
|
||||||
|
[[projects]]
|
||||||
|
branch = "master"
|
||||||
|
name = "github.com/howeyc/gopass"
|
||||||
|
packages = ["."]
|
||||||
|
revision = "bf9dde6d0d2c004a008c27aaee91170c786f6db8"
|
||||||
|
|
||||||
[[projects]]
|
[[projects]]
|
||||||
branch = "master"
|
branch = "master"
|
||||||
name = "github.com/jmoiron/sqlx"
|
name = "github.com/jmoiron/sqlx"
|
||||||
@ -31,6 +49,48 @@
|
|||||||
packages = [".","oid"]
|
packages = [".","oid"]
|
||||||
revision = "b609790bd85edf8e9ab7e0f8912750a786177bcf"
|
revision = "b609790bd85edf8e9ab7e0f8912750a786177bcf"
|
||||||
|
|
||||||
|
[[projects]]
|
||||||
|
name = "github.com/mattn/go-colorable"
|
||||||
|
packages = ["."]
|
||||||
|
revision = "167de6bfdfba052fa6b2d3664c8f5272e23c9072"
|
||||||
|
version = "v0.0.9"
|
||||||
|
|
||||||
|
[[projects]]
|
||||||
|
name = "github.com/mattn/go-isatty"
|
||||||
|
packages = ["."]
|
||||||
|
revision = "0360b2af4f38e8d38c7fce2a9f4e702702d73a39"
|
||||||
|
version = "v0.0.3"
|
||||||
|
|
||||||
|
[[projects]]
|
||||||
|
branch = "master"
|
||||||
|
name = "github.com/mgutz/ansi"
|
||||||
|
packages = ["."]
|
||||||
|
revision = "9520e82c474b0a04dd04f8a40959027271bab992"
|
||||||
|
|
||||||
|
[[projects]]
|
||||||
|
branch = "master"
|
||||||
|
name = "github.com/mgutz/minimist"
|
||||||
|
packages = ["."]
|
||||||
|
revision = "39eb8cf573ca29344bd7d7e6ba4d7febdebd37a9"
|
||||||
|
|
||||||
|
[[projects]]
|
||||||
|
name = "github.com/mgutz/str"
|
||||||
|
packages = ["."]
|
||||||
|
revision = "968bf66e3da857419e4f6e71b2d5c9ae95682dc4"
|
||||||
|
version = "v1.2.0"
|
||||||
|
|
||||||
|
[[projects]]
|
||||||
|
name = "github.com/mgutz/to"
|
||||||
|
packages = ["."]
|
||||||
|
revision = "00c06406c2dd2e011f153a6502a21473676db33f"
|
||||||
|
version = "v1.0.0"
|
||||||
|
|
||||||
|
[[projects]]
|
||||||
|
name = "github.com/nozzle/throttler"
|
||||||
|
packages = ["."]
|
||||||
|
revision = "d9b45f19996c645d38c9266d1f5cf1990e930119"
|
||||||
|
version = "v1.0"
|
||||||
|
|
||||||
[[projects]]
|
[[projects]]
|
||||||
name = "github.com/onsi/ginkgo"
|
name = "github.com/onsi/ginkgo"
|
||||||
packages = [".","config","internal/codelocation","internal/containernode","internal/failer","internal/leafnodes","internal/remote","internal/spec","internal/spec_iterator","internal/specrunner","internal/suite","internal/testingtproxy","internal/writer","reporters","reporters/stenographer","reporters/stenographer/support/go-colorable","reporters/stenographer/support/go-isatty","types"]
|
packages = [".","config","internal/codelocation","internal/containernode","internal/failer","internal/leafnodes","internal/remote","internal/spec","internal/spec_iterator","internal/specrunner","internal/suite","internal/testingtproxy","internal/writer","reporters","reporters/stenographer","reporters/stenographer/support/go-colorable","reporters/stenographer/support/go-isatty","types"]
|
||||||
@ -55,6 +115,12 @@
|
|||||||
revision = "7af7a1e09ba336d2ea14b1ce73bf693c6837dbf6"
|
revision = "7af7a1e09ba336d2ea14b1ce73bf693c6837dbf6"
|
||||||
version = "v1.2"
|
version = "v1.2"
|
||||||
|
|
||||||
|
[[projects]]
|
||||||
|
branch = "master"
|
||||||
|
name = "golang.org/x/crypto"
|
||||||
|
packages = ["ssh/terminal"]
|
||||||
|
revision = "bd6f299fb381e4c3393d1c4b1f0b94f5e77650c8"
|
||||||
|
|
||||||
[[projects]]
|
[[projects]]
|
||||||
branch = "master"
|
branch = "master"
|
||||||
name = "golang.org/x/net"
|
name = "golang.org/x/net"
|
||||||
@ -64,7 +130,7 @@
|
|||||||
[[projects]]
|
[[projects]]
|
||||||
branch = "master"
|
branch = "master"
|
||||||
name = "golang.org/x/sys"
|
name = "golang.org/x/sys"
|
||||||
packages = ["unix"]
|
packages = ["unix","windows"]
|
||||||
revision = "8dbc5d05d6edcc104950cc299a1ce6641235bc86"
|
revision = "8dbc5d05d6edcc104950cc299a1ce6641235bc86"
|
||||||
|
|
||||||
[[projects]]
|
[[projects]]
|
||||||
@ -79,6 +145,12 @@
|
|||||||
revision = "57907de300222151a123d29255ed17f5ed43fad3"
|
revision = "57907de300222151a123d29255ed17f5ed43fad3"
|
||||||
version = "v0.1.0"
|
version = "v0.1.0"
|
||||||
|
|
||||||
|
[[projects]]
|
||||||
|
name = "gopkg.in/godo.v2"
|
||||||
|
packages = [".","glob","util","watcher","watcher/fswatch"]
|
||||||
|
revision = "b5fd2f0bef1ebe832e628cfad18ab1cc707f65a1"
|
||||||
|
version = "v2.0.9"
|
||||||
|
|
||||||
[[projects]]
|
[[projects]]
|
||||||
branch = "v2"
|
branch = "v2"
|
||||||
name = "gopkg.in/karalabe/cookiejar.v2"
|
name = "gopkg.in/karalabe/cookiejar.v2"
|
||||||
@ -100,6 +172,6 @@
|
|||||||
[solve-meta]
|
[solve-meta]
|
||||||
analyzer-name = "dep"
|
analyzer-name = "dep"
|
||||||
analyzer-version = 1
|
analyzer-version = 1
|
||||||
inputs-digest = "3c8b6348d0670c73eb8ad2a42eccd107b996873ac4477e9c82d5be5d95243bfe"
|
inputs-digest = "f9569275c3b9863e5209029135f13d3d9df9a697b49e75b5cbd37942b23e4f3b"
|
||||||
solver-name = "gps-cdcl"
|
solver-name = "gps-cdcl"
|
||||||
solver-version = 1
|
solver-version = 1
|
||||||
|
5
config/client.go
Normal file
5
config/client.go
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
package config
|
||||||
|
|
||||||
|
type Client struct {
|
||||||
|
IPCPath string
|
||||||
|
}
|
@ -1,5 +1,46 @@
|
|||||||
package config
|
package config
|
||||||
|
|
||||||
|
import (
|
||||||
|
"log"
|
||||||
|
"os"
|
||||||
|
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"path/filepath"
|
||||||
|
|
||||||
|
"path"
|
||||||
|
"runtime"
|
||||||
|
|
||||||
|
"github.com/BurntSushi/toml"
|
||||||
|
)
|
||||||
|
|
||||||
type Config struct {
|
type Config struct {
|
||||||
Database Database
|
Database Database
|
||||||
|
Client Client
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewConfig(environment string) Config {
|
||||||
|
filenameWithExtension := fmt.Sprintf("%s.toml", environment)
|
||||||
|
absolutePath := filepath.Join(ProjectRoot(), "config", "environments", filenameWithExtension)
|
||||||
|
config := parseConfigFile(absolutePath)
|
||||||
|
config.Client.IPCPath = filepath.Join(ProjectRoot(), config.Client.IPCPath)
|
||||||
|
return config
|
||||||
|
}
|
||||||
|
|
||||||
|
func ProjectRoot() string {
|
||||||
|
var _, filename, _, _ = runtime.Caller(0)
|
||||||
|
return path.Join(path.Dir(filename), "../")
|
||||||
|
}
|
||||||
|
|
||||||
|
func parseConfigFile(configfile string) Config {
|
||||||
|
var cfg Config
|
||||||
|
_, err := os.Stat(configfile)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal("Config file is missing: ", configfile)
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, err := toml.DecodeFile(configfile, &cfg); err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
return cfg
|
||||||
}
|
}
|
||||||
|
13
config/config_suite_test.go
Normal file
13
config/config_suite_test.go
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
package config_test
|
||||||
|
|
||||||
|
import (
|
||||||
|
. "github.com/onsi/ginkgo"
|
||||||
|
. "github.com/onsi/gomega"
|
||||||
|
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestConfig(t *testing.T) {
|
||||||
|
RegisterFailHandler(Fail)
|
||||||
|
RunSpecs(t, "Config Suite")
|
||||||
|
}
|
23
config/config_test.go
Normal file
23
config/config_test.go
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
package config_test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"path/filepath"
|
||||||
|
|
||||||
|
"github.com/8thlight/vulcanizedb/config"
|
||||||
|
. "github.com/onsi/ginkgo"
|
||||||
|
. "github.com/onsi/gomega"
|
||||||
|
)
|
||||||
|
|
||||||
|
var _ = Describe("Loading the config", func() {
|
||||||
|
|
||||||
|
It("reads the private config using the environment", func() {
|
||||||
|
privateConfig := config.NewConfig("private")
|
||||||
|
|
||||||
|
Expect(privateConfig.Database.Hostname).To(Equal("localhost"))
|
||||||
|
Expect(privateConfig.Database.Name).To(Equal("vulcanize_private"))
|
||||||
|
Expect(privateConfig.Database.Port).To(Equal(5432))
|
||||||
|
expandedPath := filepath.Join(config.ProjectRoot(), "test_data_dir/geth.ipc")
|
||||||
|
Expect(privateConfig.Client.IPCPath).To(Equal(expandedPath))
|
||||||
|
})
|
||||||
|
|
||||||
|
})
|
7
config/environments/private.toml
Normal file
7
config/environments/private.toml
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
[database]
|
||||||
|
name = "vulcanize_private"
|
||||||
|
hostname = "localhost"
|
||||||
|
port = 5432
|
||||||
|
|
||||||
|
[client]
|
||||||
|
ipcPath = "test_data_dir/geth.ipc"
|
@ -1,11 +0,0 @@
|
|||||||
package config
|
|
||||||
|
|
||||||
func Private() Config {
|
|
||||||
return Config{
|
|
||||||
Database: Database{
|
|
||||||
Name: "vulcanize_private",
|
|
||||||
Hostname: "localhost",
|
|
||||||
Port: 5432,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,11 +0,0 @@
|
|||||||
package config
|
|
||||||
|
|
||||||
func Public() Config {
|
|
||||||
return Config{
|
|
||||||
Database: Database{
|
|
||||||
Name: "vulcanize_public",
|
|
||||||
Hostname: "localhost",
|
|
||||||
Port: 5432,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,6 +1,8 @@
|
|||||||
package observers_test
|
package observers_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"runtime"
|
||||||
|
|
||||||
"github.com/8thlight/vulcanizedb/config"
|
"github.com/8thlight/vulcanizedb/config"
|
||||||
"github.com/8thlight/vulcanizedb/core"
|
"github.com/8thlight/vulcanizedb/core"
|
||||||
"github.com/8thlight/vulcanizedb/observers"
|
"github.com/8thlight/vulcanizedb/observers"
|
||||||
@ -10,13 +12,18 @@ import (
|
|||||||
. "github.com/onsi/gomega"
|
. "github.com/onsi/gomega"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
_, filename, _, _ = runtime.Caller(0)
|
||||||
|
)
|
||||||
|
|
||||||
var _ = Describe("Saving blocks to the database", func() {
|
var _ = Describe("Saving blocks to the database", func() {
|
||||||
|
|
||||||
var db *sqlx.DB
|
var db *sqlx.DB
|
||||||
var err error
|
var err error
|
||||||
|
|
||||||
BeforeEach(func() {
|
BeforeEach(func() {
|
||||||
pgConfig := config.DbConnectionString(config.Private().Database)
|
cfg := config.NewConfig("private")
|
||||||
|
pgConfig := config.DbConnectionString(cfg.Database)
|
||||||
db, err = sqlx.Connect("postgres", pgConfig)
|
db, err = sqlx.Connect("postgres", pgConfig)
|
||||||
db.MustExec("DELETE FROM transactions")
|
db.MustExec("DELETE FROM transactions")
|
||||||
db.MustExec("DELETE FROM blocks")
|
db.MustExec("DELETE FROM blocks")
|
||||||
|
Loading…
Reference in New Issue
Block a user