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")
|
||||
var fTest = flag.Bool("test", false, "gather metrics, print them out, and exit")
|
||||
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 fSampleConfig = flag.Bool("sample-config", false,
|
||||
"print out full sample configuration")
|
||||
|
@ -81,6 +83,13 @@ func main() {
|
|||
return
|
||||
}
|
||||
|
||||
if *fConfigDirectory != "" {
|
||||
err = config.LoadDirectory(*fConfigDirectory)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
ag, err := telegraf.NewAgent(config)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
|
|
76
config.go
76
config.go
|
@ -4,6 +4,7 @@ import (
|
|||
"errors"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"path/filepath"
|
||||
"reflect"
|
||||
"sort"
|
||||
"strings"
|
||||
|
@ -378,6 +379,81 @@ func mergeStruct(base, overlay interface{}, fields []string) error {
|
|||
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.
|
||||
|
||||
// LoadConfig loads the given config file and returns a *Config pointer
|
||||
|
|
|
@ -111,6 +111,7 @@ fi
|
|||
|
||||
# Configuration file
|
||||
config=/etc/opt/telegraf/telegraf.conf
|
||||
confdir=/etc/opt/telegraf/telegraf.d
|
||||
|
||||
# If the daemon is not there, then exit.
|
||||
[ -x $daemon ] || exit 5
|
||||
|
@ -136,9 +137,9 @@ case $1 in
|
|||
|
||||
log_success_msg "Starting the process" "$name"
|
||||
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
|
||||
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
|
||||
log_success_msg "$name process was started"
|
||||
;;
|
||||
|
|
|
@ -6,7 +6,7 @@ After=network.target
|
|||
[Service]
|
||||
EnvironmentFile=-/etc/default/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
|
||||
KillMode=process
|
||||
|
||||
|
|
Loading…
Reference in New Issue