Skip to content

Commit

Permalink
Merge pull request #59 from grafana/consolidate-log-level-flags
Browse files Browse the repository at this point in the history
deprecate -log-level=<int> / map -log.level=<string> to a ssh log level
  • Loading branch information
PoorlyDefinedBehaviour authored Dec 18, 2023
2 parents 2de6f16 + 103a483 commit 881abe8
Show file tree
Hide file tree
Showing 4 changed files with 93 additions and 3 deletions.
11 changes: 11 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,17 @@ The Grafana Private Datasource Connect Agent allows connecting private datasourc

Follow installation and running instructions in the [Grafana Labs Documentation](https://grafana.com/docs/grafana-cloud/data-configuration/configure-private-datasource-connect/)

## Setting the ssh log level

Use the `-log.level` flag. Run the agent with the `-help` flag to see the possible values.

| go log level | ssh log level |
| ------------ | ---------------- |
| `error` | 0 (`-v` not set) |
| `warn` | 0 (`-v` not set) |
| `info` | 0 (`-v` not set) |
| `debug` | 3 (`-vvv`) |

## DEV flags

Flags prefixed with `-dev` are used for local development and can be removed at any time.
Expand Down
21 changes: 19 additions & 2 deletions cmd/pdc/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,17 @@ func (mf *mainFlags) RegisterFlags(fs *flag.FlagSet) {
fs.BoolVar(&mf.DevMode, "dev-mode", false, "[DEVELOPMENT ONLY] run the agent in development mode")
}

func logLevelToSSHLogLevel(level string) (int, error) {
switch level {
case "error", "warn", "info":
return 0, nil
case "debug":
return 3, nil
default:
return -1, fmt.Errorf("invalid log level: %s", level)
}
}

// Tries to get the openssh version. Returns "UNKNOWN" on error.
func tryGetOpenSSHVersion() string {
timeoutCtx, cancel := context.WithTimeout(context.Background(), 1*time.Second)
Expand All @@ -79,14 +90,20 @@ func main() {
mf := &mainFlags{}
pdcClientCfg := &pdc.Config{}

sshConfig.Args = os.Args[1:]

usageFn, err := parseFlags(mf.RegisterFlags, sshConfig.RegisterFlags, pdcClientCfg.RegisterFlags)
if err != nil {
fmt.Println("cannot parse flags")
os.Exit(1)
}

sshConfig.Args = os.Args[1:]
sshConfig.LogLevel, err = logLevelToSSHLogLevel(mf.LogLevel)
if err != nil {
usageFn()
fmt.Printf("setting log level: %s\n", err)
os.Exit(1)
}

logger := setupLogger(mf.LogLevel)

level.Info(logger).Log("msg", "PDC agent info",
Expand Down
60 changes: 60 additions & 0 deletions cmd/pdc/main_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
package main

import (
"errors"
"testing"

"github.com/stretchr/testify/assert"
)

func TestLogLevelToSSHLogLevel(t *testing.T) {
t.Parallel()

cases := []struct {
description string
level string
expectedLevel int
expectedErr error
}{
{
description: "error becomes 0",
level: "error",
expectedLevel: 0,
},
{
description: "warn becomes 0",
level: "warn",
expectedLevel: 0,
},
{
description: "info becomes 0",
level: "info",
expectedLevel: 0,
},
{
description: "debug becomes 3",
level: "debug",
expectedLevel: 3,
},
{
description: "unknown level, should return error",
level: "unknown",
expectedErr: errors.New("invalid log level: unknown"),
},
}

for _, tt := range cases {
tt := tt
t.Run(tt.description, func(t *testing.T) {
t.Parallel()

actual, err := logLevelToSSHLogLevel(tt.level)

if tt.expectedErr != nil {
assert.Equal(t, tt.expectedErr, err)
} else {
assert.Equal(t, tt.expectedLevel, actual)
}
})
}
}
4 changes: 3 additions & 1 deletion pkg/ssh/ssh.go
Original file line number Diff line number Diff line change
Expand Up @@ -58,11 +58,13 @@ func DefaultConfig() *Config {
}

func (cfg *Config) RegisterFlags(f *flag.FlagSet) {
var deprecatedInt int

def := DefaultConfig()

cfg.SSHFlags = []string{}
f.StringVar(&cfg.KeyFile, "ssh-key-file", def.KeyFile, "The path to the SSH key file.")
f.IntVar(&cfg.LogLevel, "log-level", def.LogLevel, "The level of log verbosity. The maximum is 3.")
f.IntVar(&deprecatedInt, "log-level", def.LogLevel, "[DEPRECATED] Use the log.level flag. The level of log verbosity. The maximum is 3.")
// use default log level if invalid
if cfg.LogLevel > 3 {
cfg.LogLevel = def.LogLevel
Expand Down

0 comments on commit 881abe8

Please sign in to comment.