OSDN Git Service

add
[bytom/vapor.git] / toolbar / precog / config / config.go
1 package config
2
3 import (
4         "encoding/json"
5         "os"
6
7         log "github.com/sirupsen/logrus"
8         "github.com/vapor/crypto/ed25519/chainkd"
9
10         "github.com/vapor/toolbar/common"
11 )
12
13 func NewConfig() *Config {
14         if len(os.Args) <= 1 {
15                 log.Fatal("Please setup the config file path")
16         }
17
18         return NewConfigWithPath(os.Args[1])
19 }
20
21 func NewConfigWithPath(path string) *Config {
22         configFile, err := os.Open(path)
23         if err != nil {
24                 log.WithFields(log.Fields{"err": err, "file_path": os.Args[1]}).Fatal("fail to open config file")
25         }
26         defer configFile.Close()
27
28         cfg := &Config{}
29         if err := json.NewDecoder(configFile).Decode(cfg); err != nil {
30                 log.WithField("err", err).Fatal("fail to decode config file")
31         }
32
33         return cfg
34 }
35
36 type Config struct {
37         MySQLConfig common.MySQLConfig `json:"mysql"`
38         Policy      Policy             `json:"policy"`
39         Nodes       []Node             `json:"nodes"`
40         API         API                `json:"api"`
41 }
42
43 type Policy struct {
44         LantencyMS uint64 `json:"lantency_ms"`
45 }
46
47 type Node struct {
48         Alias    string       `json:"alias"`
49         HostPort string       `json:"host_port"`
50         PubKey   chainkd.XPub `json:"pubkey"`
51 }
52
53 type API struct {
54         HostPort      bool   `json:"host_port"`
55         AccessToken   string `json:"access_token"`
56         IsReleaseMode bool   `json:"is_release_mode"`
57 }