-
Notifications
You must be signed in to change notification settings - Fork 0
/
agent_config.go
153 lines (127 loc) · 3.76 KB
/
agent_config.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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
/**
* Copyright © 2019 Hamed Yousefi <hdyousefi@gmail.com>.
*
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file.
*
* User: Hamed Yousefi
* Email: hdyousefi@gmail.com
* Date: 3/5/19
* Time: 10:03 AM
*
* Description:
* Set some of global properties in agent.conf
*
*/
package config
import (
"github.com/alecthomas/units"
"github.com/hamed-yousefi/athenz-agent/common"
convertor "github.com/xhit/go-str2duration/v2"
"math/rand"
"strconv"
"time"
)
var (
AgentConfig = newAgentConfiguration()
)
type (
AgentConfiguration struct {
loader Loader
Properties *agentProperties
}
agentProperties struct {
Server ServerProperties
Config Properties
Log logProperties
}
Properties struct {
ZpeConfigFile string `mapstructure:"zpe_config_file"`
ZpuConfigFile string `mapstructure:"zpu_config_file"`
AthenzConfigFile string `mapstructure:"athenz_config_file"`
}
ServerProperties struct {
Name string
Port string
MtlsProperties
}
MtlsProperties struct {
CaPath string `mapstructure:"ca_path"`
CrtPath string `mapstructure:"crt_path"`
PrivateKeyPath string `mapstructure:"key_path"`
}
// logProperties represents log config
logProperties struct {
Level string
Path string
MaxAge string `mapstructure:"max_age"`
MaxSize string `mapstructure:"max_size"`
FilenamePattern string `mapstructure:"filename_pattern"`
RotationTime string `mapstructure:"rotation_time"`
}
)
// newZpeConfiguration creates a new instance of ZpeConfiguration with
// an empty properties to prevent nil pointer exception.
func newAgentConfiguration() *AgentConfiguration {
return &AgentConfiguration{Properties: new(agentProperties)}
}
// LoadGlobalAgentConfig loads config file from input path into the global
// variable AgentConfig.
func LoadGlobalAgentConfig(filePath string) error {
return LoadAgentConfig(AgentConfig, filePath)
}
// LoadAgentConfig reads config file from a specific address and loads it into
//a AgentConfiguration object
func LoadAgentConfig(agentConfig *AgentConfiguration, filePath string) error {
// load config properties into agentProperties
agentConfig.Properties = new(agentProperties)
agentConfig.loader = NewConfigLoader()
if err := agentConfig.loader.LoadConfig(agentConfig.Properties, filePath); err != nil {
return common.Errorf("unable to load config from %s : %s", filePath, err.Error())
}
if agentConfig.Properties.Server.Port == "" {
rand.Seed(time.Now().UnixNano())
agentConfig.Properties.Server.Port = strconv.Itoa(rand.Intn(55000) + 10000)
}
// use default configuration for config loader
agentConfig.loader.WithDefaultConfig()
return nil
}
func (p logProperties) GetLevel() string {
return p.Level
}
func (p logProperties) GetPath() string {
return p.Path
}
func (p logProperties) GetMaxAge() time.Duration {
maxAge, err := convertor.ParseDuration(p.MaxAge)
if err != nil {
common.Fatalf("invalid input, MaxAge: %s", p.MaxAge)
}
return maxAge
}
func (p logProperties) GetRotationTime() time.Duration {
rotationTime, err := convertor.ParseDuration(p.RotationTime)
if err != nil {
common.Fatalf("invalid input, RotationTime: %s", p.RotationTime)
}
return rotationTime
}
func (p logProperties) GetMaxSize() int64 {
byteCount, err := units.ParseBase2Bytes(p.MaxSize)
if err != nil {
common.Fatalf("invalid input, MaxSize: %s", p.MaxSize)
}
return int64(byteCount)
}
func (p logProperties) GetFilenamePattern() string {
return p.FilenamePattern
}
// IsEmpty checks if MtlsProperties has value or not. If not returns true else
// returns false.
func (p MtlsProperties) IsEmpty() bool {
if p.CaPath=="" && p.PrivateKeyPath=="" && p.CrtPath=="" {
return true
}
return false
}