summaryrefslogtreecommitdiff
path: root/internal/config/config.go
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2021-10-02 11:54:07 +0300
committerPaul Buetow <paul@buetow.org>2021-10-02 15:11:23 +0300
commitdde2a1702ea1283dc5b2754f751f9381e8d0f005 (patch)
treea779dc77dc8bf5a2dfc2030c718ce4543bfba6c7 /internal/config/config.go
parente922e0f7a955fd40753930b818f580f714578ca3 (diff)
reduce logging in serverless mode
Diffstat (limited to 'internal/config/config.go')
-rw-r--r--internal/config/config.go116
1 files changed, 14 insertions, 102 deletions
diff --git a/internal/config/config.go b/internal/config/config.go
index 6d4730a..09ae994 100644
--- a/internal/config/config.go
+++ b/internal/config/config.go
@@ -1,14 +1,5 @@
package config
-import (
- "encoding/json"
- "flag"
- "fmt"
- "io/ioutil"
- "os"
- "strings"
-)
-
const (
// ControlUser is used for various DTail specific operations.
ControlUser string = "DTAIL-CONTROL"
@@ -33,97 +24,18 @@ var Server *ServerConfig
// Common holds common configs of both both, client and server.
var Common *CommonConfig
-// Used to initialize the configuration.
-type configInitializer struct {
- Common *CommonConfig
- Server *ServerConfig
- Client *ClientConfig
-}
-
-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(fmt.Sprintf("Unable to read config file: %v", err))
- }
- defer fd.Close()
-
- cfgBytes, err := ioutil.ReadAll(fd)
- if err != nil {
- panic(fmt.Sprintf("Unable to read config file %s: %v", configFile, err))
- }
-
- err = json.Unmarshal([]byte(cfgBytes), c)
- if err != nil {
- panic(fmt.Sprintf("Unable to parse config file %s: %v", configFile, err))
- }
-}
-
-func (c *configInitializer) transformConfig(args *Args, additionalArgs []string,
- client *ClientConfig, server *ServerConfig, common *CommonConfig) (*ClientConfig, *ServerConfig, *CommonConfig) {
- if args.LogDir != "" {
- common.LogDir = args.LogDir
- }
- if strings.Contains(common.LogDir, "~/") {
- homeDir, err := os.UserHomeDir()
- if err != nil {
- panic(err)
- }
- common.LogDir = strings.ReplaceAll(common.LogDir, "~/", fmt.Sprintf("%s/", homeDir))
- }
- if common.LogStrategy == "" {
- common.LogStrategy = "daily"
- }
-
- if args.LogLevel != "" {
- common.LogLevel = args.LogLevel
- }
-
- if args.SSHPort != DefaultSSHPort {
- common.SSHPort = args.SSHPort
- }
- if args.NoColor {
- client.TermColorsEnable = false
- }
-
- if args.Spartan {
- args.Quiet = true
- args.NoColor = true
- }
-
- if args.Discovery == "" && args.ServersStr == "" {
- args.Serverless = true
- }
-
- // Interpret additional args as file list.
- if args.What == "" {
- var files []string
- for _, file := range flag.Args() {
- files = append(files, file)
- }
- args.What = strings.Join(files, ",")
- }
-
- return client, server, common
+// Setup the DTail configuration.
+func Setup(args *Args, additionalArgs []string) {
+ initializer := initializer{
+ Common: newDefaultCommonConfig(),
+ Server: newDefaultServerConfig(),
+ Client: newDefaultClientConfig(),
+ }
+ initializer.parseConfig(args)
+ Client, Server, Common = initializer.transformConfig(
+ args, additionalArgs,
+ initializer.Client,
+ initializer.Server,
+ initializer.Common,
+ )
}