-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathmain.go
66 lines (56 loc) · 1.99 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
package main
import (
"fmt"
"os"
"github.com/jessevdk/go-flags"
log "github.com/sirupsen/logrus"
"github.com/camptocamp/terradb/internal/api"
"github.com/camptocamp/terradb/internal/storage"
)
var opts struct {
Version bool `short:"V" long:"version" description:"Display version."`
MongoDB struct {
URL string `long:"mongodb-url" description:"MongoDB URL" env:"MONGODB_URL"`
Username string `long:"mongodb-username" description:"MongoDB Username" env:"MONGODB_USERNAME"`
Password string `long:"mongodb-password" description:"MongoDB Password" env:"MONGODB_PASSWORD"`
} `group:"MongoDB options"`
API struct {
Address string `long:"api-address" description:"Address on to bind the API server" env:"API_ADDRESS" default:"127.0.0.1"`
Port string `long:"api-port" description:"Port on to listen" env:"API_PORT" default:"8080"`
PageSize int `long:"page-size" description:"Page size for list results" env:"API_PAGE_SIZE" default:"100"`
Username string `long:"terradb-username" description:"Restrict API access with basic auth" env:"TERRADB_USERNAME"`
Password string `long:"terradb-password" description:"Restrict API access with basic auth" env:"TERRADB_PASSWORD"`
} `group:"API server options"`
}
// VERSION is TerraDB's version number
var VERSION = "undefined"
func main() {
var st storage.Storage
parser := flags.NewParser(&opts, flags.Default)
_, err := parser.Parse()
if flagsErr, ok := err.(*flags.Error); ok && flagsErr.Type == flags.ErrHelp {
os.Exit(0)
}
if err != nil {
log.Fatal(err)
}
if opts.Version {
fmt.Printf("TerraDB v%v\n", VERSION)
os.Exit(0)
}
st, err = storage.NewMongoDB(&storage.MongoDBConfig{
URL: opts.MongoDB.URL,
Username: opts.MongoDB.Username,
Password: opts.MongoDB.Password,
})
if err != nil {
log.Fatalf("failed to setup storage: %s", err)
}
api.StartServer(&api.API{
Address: opts.API.Address,
Port: opts.API.Port,
PageSize: opts.API.PageSize,
Username: opts.API.Username,
Password: opts.API.Password,
}, st)
}