summaryrefslogtreecommitdiff
path: root/internal/config/config.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/config/config.go')
-rw-r--r--internal/config/config.go61
1 files changed, 42 insertions, 19 deletions
diff --git a/internal/config/config.go b/internal/config/config.go
index 2d77041..c9f411c 100644
--- a/internal/config/config.go
+++ b/internal/config/config.go
@@ -2,24 +2,26 @@ package config
import (
"encoding/json"
+ "fmt"
"io/ioutil"
"os"
+ "strings"
)
-// ControlUser is used for various DTail specific operations.
-const ControlUser string = "DTAIL-CONTROL"
-
-// ScheduleUser is used for non-interactive scheduled mapreduce queries.
-const ScheduleUser string = "DTAIL-SCHEDULE"
-
-// ContinuousUser is used for non-interactive continuous mapreduce queries.
-const ContinuousUser string = "DTAIL-CONTINUOUS"
-
-// TestUser is used for unit tests and potentially also for integration tests.
-const TestUser string = "DTAIL-TEST"
-
-// InterruptTimeoutS is used to terminate DTail when Ctrl+C was pressed twice within a given interval.
-const InterruptTimeoutS int = 3
+const (
+ // ControlUser is used for various DTail specific operations.
+ ControlUser string = "DTAIL-CONTROL"
+ // ScheduleUser is used for non-interactive scheduled mapreduce queries.
+ ScheduleUser string = "DTAIL-SCHEDULE"
+ // ContinuousUser is used for non-interactive continuous mapreduce queries.
+ ContinuousUser string = "DTAIL-CONTINUOUS"
+ // InterruptTimeoutS is used to terminate DTail when Ctrl+C was pressed twice within a given interval.
+ InterruptTimeoutS int = 3
+ // ConnectionsPerCPU controls how many connections are established concurrently as a start (slow start)
+ DefaultConnectionsPerCPU int = 10
+ // DTailSSHServerDefaultPort is the default DServer port.
+ DefaultSSHPort int = 2222
+)
// Client holds a DTail client configuration.
var Client *ClientConfig
@@ -37,21 +39,42 @@ type configInitializer struct {
Client *ClientConfig
}
-// Parse and read a given config file in JSON format.
-func (c *configInitializer) parseConfig(configFile string) {
+func (c *configInitializer) parseConfig(args *Args) {
+ if strings.ToUpper(args.ConfigFile) == "NONE" {
+ return
+ }
+
+ if args.ConfigFile != "" {
+ c.parseSpecificConfig(args.ConfigFile)
+ return
+ }
+
+ if homeDir, err := os.UserHomeDir(); err != nil {
+ var paths []string
+ paths = append(paths, fmt.Sprintf("%s/.config/dtail/dtail.conf", homeDir))
+ paths = append(paths, fmt.Sprintf("%s/.dtail.conf", homeDir))
+ for _, configPath := range paths {
+ if _, err := os.Stat(configPath); !os.IsNotExist(err) {
+ c.parseSpecificConfig(configPath)
+ }
+ }
+ }
+}
+
+func (c *configInitializer) parseSpecificConfig(configFile string) {
fd, err := os.Open(configFile)
if err != nil {
- panic(err)
+ panic(fmt.Sprintf("Unable to read config file: %v", err))
}
defer fd.Close()
cfgBytes, err := ioutil.ReadAll(fd)
if err != nil {
- panic(err)
+ panic(fmt.Sprintf("Unable to read config file %s: %v", configFile, err))
}
err = json.Unmarshal([]byte(cfgBytes), c)
if err != nil {
- panic(err)
+ panic(fmt.Sprintf("Unable to parse config file %s: %v", configFile, err))
}
}