-
Notifications
You must be signed in to change notification settings - Fork 0
/
conf.go
64 lines (52 loc) · 1.52 KB
/
conf.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
package conf
import (
"io/ioutil"
"time"
"github.com/Depado/conftags"
"github.com/pkg/errors"
yaml "gopkg.in/yaml.v2"
)
// C is the main exported conf
var C Conf
// Conf is a configuration struct intended to be filled from a yaml file and/or
// sane defaults
type Conf struct {
Server Server `yaml:"server"`
Logger Logger `yaml:"logger"`
GithubOAuthToken string `yaml:"github_oauth_token"`
rServiceInterval string `yaml:"service_interval" default:"10m"`
rRepoInterval string `yaml:"repo_interval" default:"10m"`
ServiceInterval time.Duration
RepoInterval time.Duration
Services []Service `yaml:"services"`
}
// Parse parses the tags and configures the logger associated
func (c *Conf) Parse() error {
var err error
if err = conftags.Parse(&c.Server); err != nil {
return err
}
if err = conftags.Parse(c); err != nil {
return err
}
c.Logger.Configure()
if c.ServiceInterval, err = time.ParseDuration(c.rServiceInterval); err != nil {
return errors.Wrapf(err, "configuration error : couldn't parse 'service_interval' (%s)", c.rServiceInterval)
}
if c.RepoInterval, err = time.ParseDuration(c.rRepoInterval); err != nil {
return errors.Wrapf(err, "configuration error: couldn't parse 'repo_interval' (%s)", c.rRepoInterval)
}
return nil
}
// Load loads the configuration file into C
func Load(fp string) error {
var err error
var c []byte
if c, err = ioutil.ReadFile(fp); err != nil {
return err
}
if err = yaml.Unmarshal(c, &C); err != nil {
return err
}
return C.Parse()
}