-
Notifications
You must be signed in to change notification settings - Fork 2
/
config.go
68 lines (58 loc) · 1.98 KB
/
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
/*
Copyright © 2021 Madhav Jivrajani madhav.jiv@gmail.com
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package utils
import (
"os"
"gopkg.in/yaml.v2"
)
// Config represents the top level configuration file
// that will be read.
type Config struct {
// PathToBinary is the absolute path
// to the binary for which scheduler
// traces need to be collected.
PathToBinary string `yaml:"path,omitempty"`
// SchedTrace is the specific configuration
// for collecting scheduler traces.
SchedTrace SchedTraceConfig `yaml:"sched,omitempty"`
// Prometheus is the configuration for where the
// prometheus metrics should be served,
Prometheus PrometheusConfig `yaml:"prometheus,omitempty"`
}
// SchedTraceConfig represents the config to configure
// how the scheduler traces will be collected.
type SchedTraceConfig struct {
// Interval is the frequency at which traces will be
// collected, and this value should be in milliseconds.
Interval uint64 `yaml:"interval,omitempty"`
}
// PrometheusConfig holds config related to what endpoint
// and port the metrics should be served on.
type PrometheusConfig struct {
Endpoint string `yaml:"endpoint,omitempty"`
Port int `yaml:"port,omitempty"`
}
// ReadConfig reads the provided config into the Config
// type and returns an error if any.
func ReadConfig(path string) (*Config, error) {
data, err := os.ReadFile(path)
if err != nil {
return nil, err
}
config := &Config{}
err = yaml.Unmarshal(data, config)
if err != nil {
return nil, err
}
return config, nil
}