diff options
| -rw-r--r-- | TODO.md | 2 | ||||
| -rw-r--r-- | docker/dtail.json | 27 | ||||
| -rw-r--r-- | internal/config/client.go | 2 | ||||
| -rw-r--r-- | internal/config/common.go | 9 | ||||
| -rw-r--r-- | internal/config/server.go | 2 | ||||
| -rw-r--r-- | internal/io/dlog/dlog.go | 4 | ||||
| -rw-r--r-- | internal/io/dlog/loggers/factory.go | 8 | ||||
| -rw-r--r-- | samples/dtail.json.sample | 131 | ||||
| -rwxr-xr-x | samples/dtail.schema.json | 493 |
9 files changed, 460 insertions, 218 deletions
@@ -3,7 +3,7 @@ TODO This is a loose list of what to do. Maybe for the next releae or maybe for a later one. -[ ] Adjust JSONSchema to reflect all the changes made. +[ ] Adjust JSONSchema to reflect all the changes made. (check all config options here) [ ] Client 4.x should print a warning when trying to connect to a 3.x server. [ ] Client 3.x should print a warning when trying to connect to a 4.x server. [ ] Update docs for color configuration diff --git a/docker/dtail.json b/docker/dtail.json index d86da20..acef22a 100644 --- a/docker/dtail.json +++ b/docker/dtail.json @@ -7,34 +7,15 @@ "MaxConnections": 50, "MapreduceLogFormat" : "default", "HostKeyFile" : "cache/ssh_host_key", - "HostKeyBits" : 2048, - "Permissions": { - "Default": [ - "readfiles:^/.*$", - "runcommands:^/.*$" - ], - "Users": { - "pbuetow": [ - "readfiles:^/.*$", - "runcommands:^/.*$" - ], - "jblake": [ - "readfiles:^/tmp/foo.log$", - "readfiles:^/.*$", - "readfiles:!^/tmp/bar.log$", - "runcommands:!^/.*$" - ] - } - } + "HostKeyBits" : 2048 }, "Common": { "LogDir": "/var/log/dserver", - "Logger": "fout", + "Logger": "Fout", + "LogLevel": "trace", + "LogRotation": "Daily", "CacheDir": "cache", - "TmpDir": "tmp", - "LogStrategy": "daily", "SSHPort": 2222, - "LogLevel": "trace", "ExperimentalFeaturesEnable": false } } diff --git a/internal/config/client.go b/internal/config/client.go index 8227c68..9f4df97 100644 --- a/internal/config/client.go +++ b/internal/config/client.go @@ -102,7 +102,7 @@ type termColors struct { // ClientConfig represents a DTail client configuration (empty as of now as there // are no available config options yet, but that may changes in the future). type ClientConfig struct { - TermColorsEnable bool + TermColorsEnable bool `json:",omitempty"` TermColors termColors `json:",omitempty"` } diff --git a/internal/config/common.go b/internal/config/common.go index 9d22c95..7a72cfe 100644 --- a/internal/config/common.go +++ b/internal/config/common.go @@ -12,12 +12,10 @@ type CommonConfig struct { Logger string // LogLevel defines how much is logged. LogLevel string `json:",omitempty"` - // LogStrategy defines the log rotation strategy. - LogStrategy string + // LogRotation strategy to be used. + LogRotation string // The cache directory CacheDir string - // The temp directory - TmpDir string `json:",omitempty"` } // Create a new default configuration. @@ -28,8 +26,7 @@ func newDefaultCommonConfig() *CommonConfig { LogDir: "log", Logger: "stdout", LogLevel: DefaultLogLevel, - LogStrategy: "daily", + LogRotation: "daily", CacheDir: "cache", - TmpDir: "/tmp", } } diff --git a/internal/config/server.go b/internal/config/server.go index 677f5ac..254ea0c 100644 --- a/internal/config/server.go +++ b/internal/config/server.go @@ -47,7 +47,7 @@ type ServerConfig struct { MaxConcurrentCats int // The max amount of concurrent tails per server. MaxConcurrentTails int - // The user permissions. + // The user permissions. TODO: Add to JSON schema Permissions Permissions `json:",omitempty"` // The mapr log format MapreduceLogFormat string `json:",omitempty"` diff --git a/internal/io/dlog/dlog.go b/internal/io/dlog/dlog.go index da67585..5e0c3a1 100644 --- a/internal/io/dlog/dlog.go +++ b/internal/io/dlog/dlog.go @@ -82,12 +82,12 @@ func new(sourceProcess, sourcePackage source.Source) *DLog { if err != nil { panic(err) } - strategy := loggers.NewStrategy(config.Common.LogStrategy) + logRotation := loggers.NewStrategy(config.Common.LogRotation) loggerName := config.Common.Logger level := newLevel(config.Common.LogLevel) return &DLog{ - logger: loggers.Factory(sourceProcess.String(), loggerName, strategy), + logger: loggers.Factory(sourceProcess.String(), loggerName, logRotation), sourceProcess: sourceProcess, sourcePackage: sourcePackage, maxLevel: level, diff --git a/internal/io/dlog/loggers/factory.go b/internal/io/dlog/loggers/factory.go index 415d7fb..a5cc7cf 100644 --- a/internal/io/dlog/loggers/factory.go +++ b/internal/io/dlog/loggers/factory.go @@ -10,12 +10,12 @@ var factoryMap map[string]Logger var factoryMutex sync.Mutex // Factory is there to retrieve a logger based on various settings. -func Factory(sourceName, loggerName string, rotationStrategy Strategy) Logger { +func Factory(sourceName, loggerName string, logRotation Strategy) Logger { factoryMutex.Lock() defer factoryMutex.Unlock() id := fmt.Sprintf("sourceName:%s,fileBase:%s,loggerName:%s", sourceName, - rotationStrategy.FileBase, loggerName) + logRotation.FileBase, loggerName) if factoryMap == nil { factoryMap = make(map[string]Logger) } @@ -29,10 +29,10 @@ func Factory(sourceName, loggerName string, rotationStrategy Strategy) Logger { singleton = newStdout() factoryMap[id] = singleton case "file": - singleton = newFile(rotationStrategy) + singleton = newFile(logRotation) factoryMap[id] = singleton case "fout": - singleton = newFout(rotationStrategy) + singleton = newFout(logRotation) factoryMap[id] = singleton default: panic(fmt.Sprintf("Unsupported logger type '%s'", loggerName)) diff --git a/samples/dtail.json.sample b/samples/dtail.json.sample index 100e488..20a1359 100644 --- a/samples/dtail.json.sample +++ b/samples/dtail.json.sample @@ -2,49 +2,100 @@ "Client": { "TermColorsEnable": true, "TermColors": { - "ClientErrorAttr": "Bold", - "ClientErrorBg": "Black", - "ClientErrorFg": "Red", - "ClientStatsAttr": "Dim", - "ClientStatsBg": "Blue", - "ClientStatsFg": "White", - "ClientWarnAttr": "None", - "ClientWarnBg": "Black", - "ClientWarnFg": "Magenta", - "RemoteDebugAttr": "None", - "RemoteDebugBg": "Green", - "RemoteDebugFg": "Black", - "RemoteErrorAttr": "Bold", - "RemoteErrorBg": "Red", - "RemoteErrorFg": "White", - "RemoteFatalAttr": "Blink", - "RemoteFatalBg": "Red", - "RemoteFatalFg": "White", - "RemoteStatsOkAttr": "None", - "RemoteStatsOkBg": "Green", - "RemoteStatsOkFg": "Black", - "RemoteStatsWarnAttr": "None", - "RemoteStatsWarnBg": "Red", - "RemoteStatsWarnFg": "White", - "RemoteTextAttr": "None", - "RemoteTextBg": "Black", - "RemoteTextFg": "White", - "RemoteTraceAttr": "Bold", - "RemoteTraceBg": "Green", - "RemoteTraceFg": "White", - "RemoteWarnAttr": "Bold", - "RemoteWarnBg": "Yellow", - "RemoteWarnFg": "White" + "Remote": { + "DelimiterAttr": "Dim", + "DelimiterBg": "Blue", + "DelimiterFg": "Cyan", + "RemoteAttr": "Dim", + "RemoteBg": "Blue", + "RemoteFg": "White", + "CountAttr": "Dim", + "CountBg": "Blue", + "CountFg": "White", + "HostnameAttr": "Bold", + "HostnameBg": "Blue", + "HostnameFg": "White", + "IDAttr": "Dim", + "IDBg": "Blue", + "IDFg": "White", + "StatsOkAttr": "None", + "StatsOkBg": "Green", + "StatsOkFg": "Black", + "StatsWarnAttr": "None", + "StatsWarnBg": "Red", + "StatsWarnFg": "White", + "TextAttr": "None", + "TextBg": "Black", + "TextFg": "White" + }, + "Client": { + "DelimiterAttr": "Dim", + "DelimiterBg": "Yellow", + "DelimiterFg": "Black", + "ClientAttr": "Dim", + "ClientBg": "Yellow", + "ClientFg": "Black", + "HostnameAttr": "Dim", + "HostnameBg": "Yellow", + "HostnameFg": "Black", + "TextAttr": "None", + "TextBg": "Black", + "TextFg": "White" + }, + "Server": { + "DelimiterAttr": "AttrDim", + "DelimiterBg": "BgCyan", + "DelimiterFg": "FgBlack", + "ServerAttr": "AttrDim", + "ServerBg": "BgCyan", + "ServerFg": "FgBlack", + "HostnameAttr": "AttrBold", + "HostnameBg": "BgCyan", + "HostnameFg": "FgBlack", + "TextAttr": "AttrNone", + "TextBg": "BgBlack", + "TextFg": "FgWhite" + }, + "Common": { + "SeverityErrorAttr": "AttrBold", + "SeverityErrorBg": "BgRed", + "SeverityErrorFg": "FgWhite", + "SeverityFatalAttr": "AttrBold", + "SeverityFatalBg": "BgMagenta", + "SeverityFatalFg": "FgWhite", + "SeverityWarnAttr": "AttrBold", + "SeverityWarnBg": "BgBlack", + "SeverityWarnFg": "FgWhite" + }, + "MaprTable": { + "DataAttr": "AttrNone", + "DataBg": "BgBlue", + "DataFg": "FgWhite", + "DelimiterAttr": "AttrDim", + "DelimiterBg": "BgBlue", + "DelimiterFg": "FgWhite", + "HeaderAttr": "AttrBold", + "HeaderBg": "BgBlue", + "HeaderFg": "FgWhite", + "HeaderDelimiterAttr": "AttrDim", + "HeaderDelimiterBg": "BgBlue", + "HeaderDelimiterFg": "FgWhite", + "HeaderSortKeyAttr": "AttrUnderline", + "HeaderGroupKeyAttr": "AttrReverse", + "RawQueryAttr": "AttrDim", + "RawQueryBg": "BgBlack", + "RawQueryFg": "FgCyan" + } } }, "Server": { "SSHBindAddress": "0.0.0.0", + "HostKeyFile": "cache/ssh_host_key", + "HostKeyBits": 2048, + "MapreduceLogFormat": "default", "MaxConcurrentCats": 2, "MaxConcurrentTails": 50, "MaxConnections": 50, - "MapreduceLogFormat": "default", - "HostKeyFile": "cache/ssh_host_key", - "HostKeyBits": 2048, "Permissions": { "Default": [ "readfiles:^/.*$" @@ -66,12 +117,10 @@ }, "Common": { "LogDir": "log", + "Logger": "Fout", + "LogRotation": "Daily", "CacheDir": "cache", - "TmpDir": "tmp", - "Logger": "fout", - "LogStrategy": "daily", "SSHPort": 2222, - "LogLevel": "info", - "ExperimentalFeaturesEnable": false + "LogLevel": "Info" } } diff --git a/samples/dtail.schema.json b/samples/dtail.schema.json index 37761f8..9bba4c9 100755 --- a/samples/dtail.schema.json +++ b/samples/dtail.schema.json @@ -1,118 +1,372 @@ { "$schema": "https://json-schema.org/2019-09/schema", "description": "Schema for dtail.json", + "definitions": { + "loglevel": { + "type": "string", + "enum": [ + "None", + "Fatal", + "Error", + "Warn", + "Info", + "Default", + "Verbose", + "Debug", + "Devel", + "Trace", + "All" + ] + }, + "logger": { + "type": "string", + "enum": [ + "None", + "Stdout", + "File", + "Fout" + ] + }, + "logrotation": { + "type": "string", + "enum": [ + "Daily", + "Signal" + ] + }, + "color": { + "type": "string", + "enum": [ + "Black", + "Red", + "Green", + "Yellow", + "Blue", + "Magenta", + "Cyan", + "White" + ] + }, + "attribute": { + "type": "string", + "enum": [ + "None", + "Bold", + "Dim", + "Italic", + "Underline", + "Blink", + "SlowBlink", + "RapidBlink", + "Reverse", + "Hidden" + ] + } + }, "type": "object", + "additionalProperties": false, "properties": { "Client": { + "additionalProperties": false, "properties": { "TermColorsEnable": { "type": "boolean" }, "TermColors": { "type": "object", + "additionalProperties": false, "properties": { - "ClientErrorAttr": { - "type": "string" - }, - "ClientErrorBg": { - "type": "string" - }, - "ClientErrorFg": { - "type": "string" - }, - "ClientWarnAttr": { - "type": "string" - }, - "ClientWarnBg": { - "type": "string" - }, - "ClientWarnFg": { - "type": "string" - }, - "RemoteDebugAttr": { - "type": "string" - }, - "RemoteDebugBg": { - "type": "string" - }, - "RemoteDebugFg": { - "type": "string" - }, - "RemoteErrorAttr": { - "type": "string" - }, - "RemoteErrorBg": { - "type": "string" - }, - "RemoteErrorFg": { - "type": "string" - }, - "RemoteFatalAttr": { - "type": "string" - }, - "RemoteFatalBg": { - "type": "string" - }, - "RemoteFatalFg": { - "type": "string" - }, - "RemoteStatsOkAttr": { - "type": "string" - }, - "RemoteStatsOkBg": { - "type": "string" - }, - "RemoteStatsOkFg": { - "type": "string" - }, - "RemoteStatsWarnAttr": { - "type": "string" - }, - "RemoteStatsWarnBg": { - "type": "string" - }, - "RemoteStatsWarnFg": { - "type": "string" - }, - "RemoteTextAttr": { - "type": "string" - }, - "RemoteTextBg": { - "type": "string" - }, - "RemoteTextFg": { - "type": "string" - }, - "RemoteTraceAttr": { - "type": "string" - }, - "RemoteTraceBg": { - "type": "string" + "Remote": { + "additionalProperties": false, + "properties": { + "DelimiterAttr": { + "$ref": "#/definitions/attribute" + }, + "DelimiterBg": { + "$ref": "#/definitions/color" + }, + "DelimiterFg": { + "$ref": "#/definitions/color" + }, + "RemoteAttr": { + "$ref": "#/definitions/attribute" + }, + "RemoteBg": { + "$ref": "#/definitions/color" + }, + "RemoteFg": { + "$ref": "#/definitions/color" + }, + "CountAttr": { + "$ref": "#/definitions/attribute" + }, + "CountBg": { + "$ref": "#/definitions/color" + }, + "CountFg": { + "$ref": "#/definitions/color" + }, + "HostnameAttr": { + "$ref": "#/definitions/attribute" + }, + "HostnameBg": { + "$ref": "#/definitions/color" + }, + "HostnameFg": { + "$ref": "#/definitions/color" + }, + "IDAttr": { + "$ref": "#/definitions/attribute" + }, + "IDBg": { + "$ref": "#/definitions/color" + }, + "IDFg": { + "$ref": "#/definitions/color" + }, + "StatsOkAttr": { + "$ref": "#/definitions/attribute" + }, + "StatsOkBg": { + "$ref": "#/definitions/color" + }, + "StatsOkFg": { + "$ref": "#/definitions/color" + }, + "StatsWarnAttr": { + "$ref": "#/definitions/attribute" + }, + "StatsWarnBg": { + "$ref": "#/definitions/color" + }, + "StatsWarnFg": { + "$ref": "#/definitions/color" + }, + "TextAttr": { + "$ref": "#/definitions/attribute" + }, + "TextBg": { + "$ref": "#/definitions/color" + }, + "TextFg": { + "$ref": "#/definitions/color" + } + } }, - "RemoteTraceFg": { - "type": "string" + "Client": { + "additionalProperties": false, + "properties": { + "DelimiterAttr": { + "$ref": "#/definitions/attribute" + }, + "DelimiterBg": { + "$ref": "#/definitions/color" + }, + "DelimiterFg": { + "$ref": "#/definitions/color" + }, + "ClientAttr": { + "$ref": "#/definitions/attribute" + }, + "ClientBg": { + "$ref": "#/definitions/color" + }, + "ClientFg": { + "$ref": "#/definitions/color" + }, + "HostnameAttr": { + "$ref": "#/definitions/attribute" + }, + "HostnameBg": { + "$ref": "#/definitions/color" + }, + "HostnameFg": { + "$ref": "#/definitions/color" + }, + "TextAttr": { + "$ref": "#/definitions/attribute" + }, + "TextBg": { + "$ref": "#/definitions/color" + }, + "TextFg": { + "$ref": "#/definitions/color" + } + } }, - "RemoteWarnAttr": { - "type": "string" + "Server": { + "additionalProperties": false, + "properties": { + "DelimiterAttr": { + "#ref": "#/definitions/attribute" + }, + "DelimiterBg": { + "#ref": "#/definitions/color" + }, + "DelimiterFg": { + "#ref": "#/definitions/color" + }, + "ServerAttr": { + "#ref": "#/definitions/attribute" + }, + "ServerBg": { + "#ref": "#/definitions/color" + }, + "ServerFg": { + "#ref": "#/definitions/color" + }, + "HostnameAttr": { + "#ref": "#/definitions/attribute" + }, + "HostnameBg": { + "#ref": "#/definitions/color" + }, + "HostnameFg": { + "#ref": "#/definitions/color" + }, + "TextAttr": { + "#ref": "#/definitions/attribute" + }, + "TextBg": { + "#ref": "#/definitions/color" + }, + "TextFg": { + "#ref": "#/definitions/color" + } + } }, - "RemoteWarnBg": { - "type": "string" + "Common": { + "additionalProperties": false, + "properties": { + "SeverityErrorAttr": { + "#ref": "#/definitions/attribute" + }, + "SeverityErrorBg": { + "#ref": "#/definitions/color" + }, + "SeverityErrorFg": { + "#ref": "#/definitions/color" + }, + "SeverityFatalAttr": { + "#ref": "#/definitions/attribute" + }, + "SeverityFatalBg": { + "#ref": "#/definitions/color" + }, + "SeverityFatalFg": { + "#ref": "#/definitions/color" + }, + "SeverityWarnAttr": { + "#ref": "#/definitions/attribute" + }, + "SeverityWarnBg": { + "#ref": "#/definitions/color" + }, + "SeverityWarnFg": { + "#ref": "#/definitions/color" + } + } }, - "RemoteWarnFg": { - "type": "string" + "MaprTable": { + "additionalProperties": false, + "properties": { + "DataAttr": { + "#ref": "#/definitions/attribute" + }, + "DataBg": { + "#ref": "#/definitions/color" + }, + "DataFg": { + "#ref": "#/definitions/color" + }, + "DelimiterAttr": { + "#ref": "#/definitions/attribute" + }, + "DelimiterBg": { + "#ref": "#/definitions/color" + }, + "DelimiterFg": { + "#ref": "#/definitions/color" + }, + "HeaderAttr": { + "#ref": "#/definitions/attribute" + }, + "HeaderBg": { + "#ref": "#/definitions/color" + }, + "HeaderFg": { + "#ref": "#/definitions/color" + }, + "HeaderDelimiterAttr": { + "#ref": "#/definitions/attribute" + }, + "HeaderDelimiterBg": { + "#ref": "#/definitions/color" + }, + "HeaderDelimiterFg": { + "#ref": "#/definitions/color" + }, + "HeaderSortKeyAttr": { + "#ref": "#/definitions/attribute" + }, + "HeaderGroupKeyAttr": { + "#ref": "#/definitions/attribute" + }, + "RawQueryAttr": { + "#ref": "#/definitions/attribute" + }, + "RawQueryBg": { + "#ref": "#/definitions/color" + }, + "RawQueryFg": { + "#ref": "#/definitions/color" + } + } } - }, - "additionalProperties": false + } } - }, - "additionalProperties": false + } }, "Server": { + "additionalProperties": false, "properties": { + "SSHBindAddress": { + "type": "string" + }, + "HostKeyFile": { + "type": "string" + }, + "HostKeyBits": { + "type": "integer", + "minimum": 2048 + }, + "MapreduceLogFormat": { + "type": "string" + }, + "MaxConcurrentCats": { + "type": "integer", + "minimum": 1, + "maximum": 20 + }, + "MaxConcurrentTails": { + "type": "integer", + "minimum": 1, + "maximum": 100 + }, + "MaxConnections": { + "type": "integer", + "minimum": 1, + "maximum": 100 + }, + "Permissions": { + "type": "object", + "properties": {} + }, "Schedule": { "type": "array", "items": { "type": "object", + "additionalProperties": false, "properties": { "Name": { "type": "string" @@ -147,6 +401,7 @@ "type": "array", "items": { "type": "object", + "additionalProperties": false, "properties": { "Name": { "type": "string" @@ -168,57 +423,25 @@ } } } - }, - "HostKeyFile": { - "type": "string" - }, - "HostKeyBits": { - "type": "integer", - "minimum": 2048 - }, - "MapreduceLogFormat": { - "type": "string" - }, - "SSHBindAddress": { - "type": "string" - }, - "MaxConcurrentCats": { - "type": "integer", - "minimum": 1, - "maximum": 20 - }, - "MaxConcurrentTails": { - "type": "integer", - "minimum": 1, - "maximum": 100 - }, - "MaxConnections": { - "type": "integer", - "minimum": 1, - "maximum": 100 - }, - "Permissions": { - "type": "object", - "properties": {} } - }, - "additionalProperties": false + } }, "Common": { + "additionalProperties": false, "properties": { "LogDir": { "type": "string" }, - "LogLevel": { - "type": "string" + "Logger": { + "#ref": "#/definitions/logger" }, - "CacheDir": { - "type": "string" + "LogLevel": { + "#ref": "#/definitions/loglevel" }, - "TmpDir": { - "type": "string" + "LogRotation": { + "#ref": "#/definitions/logrotation" }, - "LogStrategy": { + "CacheDir": { "type": "string" }, "SSHPort": { @@ -226,20 +449,12 @@ "minimum": 2, "maximum": 16000 }, - "DebugEnable": { - "type": "boolean" - }, "ExperimentalFeaturesEnable": { "type": "boolean" - }, - "TraceEnable": { - "type": "boolean" } - }, - "additionalProperties": false + } } }, - "additionalProperties": false, "required": [ "Client", "Server", |
