Implementing LoadDirectory.
This commit is contained in:
parent
ae10fc7fb4
commit
c938523cd5
|
@ -17,6 +17,8 @@ var fDebug = flag.Bool("debug", false,
|
||||||
"show metrics as they're generated to stdout")
|
"show metrics as they're generated to stdout")
|
||||||
var fTest = flag.Bool("test", false, "gather metrics, print them out, and exit")
|
var fTest = flag.Bool("test", false, "gather metrics, print them out, and exit")
|
||||||
var fConfig = flag.String("config", "", "configuration file to load")
|
var fConfig = flag.String("config", "", "configuration file to load")
|
||||||
|
var fConfigDirectory = flag.String("configdirectory", "",
|
||||||
|
"directory containing additional configuration files")
|
||||||
var fVersion = flag.Bool("version", false, "display the version")
|
var fVersion = flag.Bool("version", false, "display the version")
|
||||||
var fSampleConfig = flag.Bool("sample-config", false,
|
var fSampleConfig = flag.Bool("sample-config", false,
|
||||||
"print out full sample configuration")
|
"print out full sample configuration")
|
||||||
|
@ -81,6 +83,13 @@ func main() {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if *fConfigDirectory != "" {
|
||||||
|
err = config.LoadDirectory(*fConfigDirectory)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ag, err := telegraf.NewAgent(config)
|
ag, err := telegraf.NewAgent(config)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
|
|
76
config.go
76
config.go
|
@ -4,6 +4,7 @@ import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
|
"path/filepath"
|
||||||
"reflect"
|
"reflect"
|
||||||
"sort"
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
|
@ -378,6 +379,81 @@ func mergeStruct(base, overlay interface{}, fields []string) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *Config) LoadDirectory(path string) error {
|
||||||
|
directoryEntries, err := ioutil.ReadDir(path)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
for _, entry := range directoryEntries {
|
||||||
|
if entry.IsDir() {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
name := entry.Name()
|
||||||
|
if name[len(name)-5:] != ".conf" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
subConfig, err := LoadConfig(filepath.Join(path, name))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if subConfig.agent != nil {
|
||||||
|
err = mergeStruct(c.agent, subConfig.agent, subConfig.agentFieldsSet)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
for _, field := range subConfig.agentFieldsSet {
|
||||||
|
if !sliceContains(field, c.agentFieldsSet) {
|
||||||
|
c.agentFieldsSet = append(c.agentFieldsSet, field)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for pluginName, plugin := range subConfig.plugins {
|
||||||
|
if _, ok := c.plugins[pluginName]; !ok {
|
||||||
|
c.plugins[pluginName] = plugin
|
||||||
|
c.pluginFieldsSet[pluginName] = subConfig.pluginFieldsSet[pluginName]
|
||||||
|
c.pluginConfigurations[pluginName] = subConfig.pluginConfigurations[pluginName]
|
||||||
|
c.pluginConfigurationFieldsSet[pluginName] = subConfig.pluginConfigurationFieldsSet[pluginName]
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
err = mergeStruct(c.plugins[pluginName], plugin, subConfig.pluginFieldsSet[pluginName])
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
for _, field := range subConfig.pluginFieldsSet[pluginName] {
|
||||||
|
if !sliceContains(field, c.pluginFieldsSet[pluginName]) {
|
||||||
|
c.pluginFieldsSet[pluginName] = append(c.pluginFieldsSet[pluginName], field)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
err = mergeStruct(c.pluginConfigurations[pluginName], subConfig.pluginConfigurations[pluginName], subConfig.pluginConfigurationFieldsSet[pluginName])
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
for _, field := range subConfig.pluginConfigurationFieldsSet[pluginName] {
|
||||||
|
if !sliceContains(field, c.pluginConfigurationFieldsSet[pluginName]) {
|
||||||
|
c.pluginConfigurationFieldsSet[pluginName] = append(c.pluginConfigurationFieldsSet[pluginName], field)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for outputName, output := range subConfig.outputs {
|
||||||
|
if _, ok := c.outputs[outputName]; !ok {
|
||||||
|
c.outputs[outputName] = output
|
||||||
|
c.outputFieldsSet[outputName] = subConfig.outputFieldsSet[outputName]
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
err = mergeStruct(c.outputs[outputName], output, subConfig.outputFieldsSet[outputName])
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
for _, field := range subConfig.outputFieldsSet[outputName] {
|
||||||
|
if !sliceContains(field, c.outputFieldsSet[outputName]) {
|
||||||
|
c.outputFieldsSet[outputName] = append(c.outputFieldsSet[outputName], field)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// hazmat area. Keeping the ast parsing here.
|
// hazmat area. Keeping the ast parsing here.
|
||||||
|
|
||||||
// LoadConfig loads the given config file and returns a *Config pointer
|
// LoadConfig loads the given config file and returns a *Config pointer
|
||||||
|
|
|
@ -111,6 +111,7 @@ fi
|
||||||
|
|
||||||
# Configuration file
|
# Configuration file
|
||||||
config=/etc/opt/telegraf/telegraf.conf
|
config=/etc/opt/telegraf/telegraf.conf
|
||||||
|
confdir=/etc/opt/telegraf/telegraf.d
|
||||||
|
|
||||||
# If the daemon is not there, then exit.
|
# If the daemon is not there, then exit.
|
||||||
[ -x $daemon ] || exit 5
|
[ -x $daemon ] || exit 5
|
||||||
|
@ -136,9 +137,9 @@ case $1 in
|
||||||
|
|
||||||
log_success_msg "Starting the process" "$name"
|
log_success_msg "Starting the process" "$name"
|
||||||
if which start-stop-daemon > /dev/null 2>&1; then
|
if which start-stop-daemon > /dev/null 2>&1; then
|
||||||
start-stop-daemon --chuid $GROUP:$USER --start --quiet --pidfile $pidfile --exec $daemon -- -pidfile $pidfile -config $config $TELEGRAF_OPTS >>$STDOUT 2>>$STDERR &
|
start-stop-daemon --chuid $GROUP:$USER --start --quiet --pidfile $pidfile --exec $daemon -- -pidfile $pidfile -config $config -configdirectory $confdir $TELEGRAF_OPTS >>$STDOUT 2>>$STDERR &
|
||||||
else
|
else
|
||||||
nohup $daemon -pidfile $pidfile -config $config $TELEGRAF_OPTS >>$STDOUT 2>>$STDERR &
|
nohup $daemon -pidfile $pidfile -config $config -configdirectory $confdir $TELEGRAF_OPTS >>$STDOUT 2>>$STDERR &
|
||||||
fi
|
fi
|
||||||
log_success_msg "$name process was started"
|
log_success_msg "$name process was started"
|
||||||
;;
|
;;
|
||||||
|
|
|
@ -6,7 +6,7 @@ After=network.target
|
||||||
[Service]
|
[Service]
|
||||||
EnvironmentFile=-/etc/default/telegraf
|
EnvironmentFile=-/etc/default/telegraf
|
||||||
User=telegraf
|
User=telegraf
|
||||||
ExecStart=/opt/telegraf/telegraf -config /etc/opt/telegraf/telegraf.conf $TELEGRAF_OPTS
|
ExecStart=/opt/telegraf/telegraf -config /etc/opt/telegraf/telegraf.conf -configdirectory /etc/opt/telegraf/telegraf.d $TELEGRAF_OPTS
|
||||||
Restart=on-failure
|
Restart=on-failure
|
||||||
KillMode=process
|
KillMode=process
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue