Skip to content

Commit 56bd153

Browse files
authored
Make validation timeout configurable (#435)
Intoduce a new config option: `collector_validation_timeout = 1m` Also increase the default timeout from 30s to 1m since 30s seems to low for some use cases. Fixes #431
1 parent d8c6366 commit 56bd153

File tree

5 files changed

+39
-18
lines changed

5 files changed

+39
-18
lines changed

backends/backend.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -168,12 +168,12 @@ func (b *Backend) ValidateConfigurationFile(context *context.Ctx) (error, string
168168
}()
169169

170170
select {
171-
case <-time.After(time.Duration(30) * time.Second):
171+
case <-time.After(context.UserConfig.CollectorValidationTimeout):
172172
if err := cmd.Process.Kill(); err != nil {
173173
err = fmt.Errorf("Failed to kill validation process: %s", err)
174174
return err, ""
175175
}
176-
return fmt.Errorf("Unable to validate configuration, timeout reached."), ""
176+
return fmt.Errorf("Unable to validate configuration, timeout <%v> reached", context.UserConfig.CollectorValidationTimeout), ""
177177
case err := <-done:
178178
if err != nil {
179179
close(done)

cfgfile/schema.go

+21-16
Original file line numberDiff line numberDiff line change
@@ -15,23 +15,27 @@
1515

1616
package cfgfile
1717

18+
import "time"
19+
1820
type SidecarConfig struct {
19-
ServerUrl string `config:"server_url"`
20-
ServerApiToken string `config:"server_api_token"`
21-
TlsSkipVerify bool `config:"tls_skip_verify"`
22-
NodeName string `config:"node_name"`
23-
NodeId string `config:"node_id"`
24-
CachePath string `config:"cache_path"`
25-
LogPath string `config:"log_path"`
26-
CollectorConfigurationDirectory string `config:"collector_configuration_directory"`
27-
LogRotateMaxFileSizeString string `config:"log_rotate_max_file_size"`
28-
LogRotateMaxFileSize int64 // set from LogRotateMaxFileSizeString
29-
LogRotateKeepFiles int `config:"log_rotate_keep_files"`
30-
UpdateInterval int `config:"update_interval"`
31-
SendStatus bool `config:"send_status"`
32-
ListLogFiles []string `config:"list_log_files"`
33-
CollectorBinariesWhitelist []string `config:"collector_binaries_whitelist"`
34-
CollectorBinariesAccesslist []string `config:"collector_binaries_accesslist"`
21+
ServerUrl string `config:"server_url"`
22+
ServerApiToken string `config:"server_api_token"`
23+
TlsSkipVerify bool `config:"tls_skip_verify"`
24+
NodeName string `config:"node_name"`
25+
NodeId string `config:"node_id"`
26+
CachePath string `config:"cache_path"`
27+
LogPath string `config:"log_path"`
28+
CollectorValidationTimeoutString string `config:"collector_validation_timeout"`
29+
CollectorValidationTimeout time.Duration // set from CollectorValidationTimeoutString
30+
CollectorConfigurationDirectory string `config:"collector_configuration_directory"`
31+
LogRotateMaxFileSizeString string `config:"log_rotate_max_file_size"`
32+
LogRotateMaxFileSize int64 // set from LogRotateMaxFileSizeString
33+
LogRotateKeepFiles int `config:"log_rotate_keep_files"`
34+
UpdateInterval int `config:"update_interval"`
35+
SendStatus bool `config:"send_status"`
36+
ListLogFiles []string `config:"list_log_files"`
37+
CollectorBinariesWhitelist []string `config:"collector_binaries_whitelist"`
38+
CollectorBinariesAccesslist []string `config:"collector_binaries_accesslist"`
3539
}
3640

3741
// Default Sidecar configuration
@@ -47,6 +51,7 @@ cache_path: "/var/cache/graylog-sidecar"
4751
log_path: "/var/log/graylog-sidecar"
4852
log_rotate_max_file_size: "10MiB"
4953
log_rotate_keep_files: 10
54+
collector_validation_timeout: "1m"
5055
collector_configuration_directory: "/var/lib/graylog-sidecar/generated"
5156
collector_binaries_accesslist:
5257
- "/usr/bin/filebeat"

context/context.go

+10
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
"os"
2222
"path/filepath"
2323
"runtime"
24+
"time"
2425

2526
"github.com/Graylog2/collector-sidecar/cfgfile"
2627
"github.com/Graylog2/collector-sidecar/common"
@@ -101,6 +102,15 @@ func (ctx *Ctx) LoadConfig(path *string) error {
101102
log.Fatal("No log directory was configured.")
102103
}
103104

105+
// collector_validation_timeout
106+
if ctx.UserConfig.CollectorValidationTimeoutString == "" {
107+
log.Fatal("No collector validation timeout was configured.")
108+
}
109+
ctx.UserConfig.CollectorValidationTimeout, err = time.ParseDuration(ctx.UserConfig.CollectorValidationTimeoutString)
110+
if err != nil {
111+
log.Fatal("Cannot parse validation timeout duration: ", err)
112+
}
113+
104114
// collector_configuration_directory
105115
if ctx.UserConfig.CollectorConfigurationDirectory == "" {
106116
log.Fatal("No collector configuration directory was configured.")

sidecar-example.yml

+3
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,9 @@ server_api_token: ""
5656
# The maximum number of old log files to retain.
5757
#log_rotate_keep_files: 10
5858

59+
# How long to wait for the config validation command.
60+
#collector_validation_timeout: "1m"
61+
5962
# Directory where the sidecar generates configurations for collectors.
6063
#collector_configuration_directory: "/var/lib/graylog-sidecar/generated"
6164

sidecar-windows-example.yml

+3
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,9 @@ send_status: <SENDSTATUS>
6161
# The maximum number of old log files to retain.
6262
#log_rotate_keep_files: 10
6363

64+
# How long to wait for the config validation command.
65+
#collector_validation_timeout: "1m"
66+
6467
# Directory where the sidecar generates configurations for collectors.
6568
#collector_configuration_directory: "C:\\Program Files\\Graylog\\sidecar\\generated"
6669

0 commit comments

Comments
 (0)