From dfc98ecc0fbba3433b0bae7d6b95a59f78ddfd91 Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Sat, 23 Jan 2021 19:00:33 -0500 Subject: [PATCH] fix: allow underscores in vector schemes Also unify tests for global and non-global logs:set calls --- plugins/logs/functions.go | 17 +++++--- plugins/logs/set.go | 2 +- tests/unit/logs.bats | 87 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 100 insertions(+), 6 deletions(-) diff --git a/plugins/logs/functions.go b/plugins/logs/functions.go index ab616fe26..357278f6a 100644 --- a/plugins/logs/functions.go +++ b/plugins/logs/functions.go @@ -109,9 +109,14 @@ func stopVectorContainer() error { }) } -func valueToConfig(appName string, value string) (vectorSink, error) { +func sinkValueToConfig(appName string, sinkValue string) (vectorSink, error) { var data vectorSink - u, err := url.Parse(value) + if strings.Contains(sinkValue, "://") { + parts := strings.SplitN(sinkValue, "://", 2) + parts[0] = strings.ReplaceAll(parts[0], "_", "-") + sinkValue = strings.Join(parts, "://") + } + u, err := url.Parse(sinkValue) if err != nil { return data, err } @@ -120,6 +125,8 @@ func valueToConfig(appName string, value string) (vectorSink, error) { return data, errors.New("Invalid option sinks") } + u.Scheme = strings.ReplaceAll(u.Scheme, "-", "_") + t := fmt.Sprintf("type=%s", u.Scheme) i := fmt.Sprintf("inputs[]=docker-source:%s", appName) if appName == "--global" { @@ -163,7 +170,7 @@ func writeVectorConfig() error { continue } - sink, err := valueToConfig(appName, value) + sink, err := sinkValueToConfig(appName, value) if err != nil { return err } @@ -178,7 +185,7 @@ func writeVectorConfig() error { value := common.PropertyGet("logs", "--global", "vector-sink") if value != "" { - sink, err := valueToConfig("--global", value) + sink, err := sinkValueToConfig("--global", value) if err != nil { return err } @@ -201,7 +208,7 @@ func writeVectorConfig() error { if len(data.Sinks) == 0 { // write logs to a blackhole - sink, err := valueToConfig("--null", "blackhole://?print_amount=1") + sink, err := sinkValueToConfig("--null", "blackhole://?print_amount=1") if err != nil { return err } diff --git a/plugins/logs/set.go b/plugins/logs/set.go index 5878958f9..9bd98fba3 100644 --- a/plugins/logs/set.go +++ b/plugins/logs/set.go @@ -49,7 +49,7 @@ func validateVectorSink(appName string, value string) error { return nil } - _, err := valueToConfig(appName, value) + _, err := sinkValueToConfig(appName, value) if err != nil { return err } diff --git a/tests/unit/logs.bats b/tests/unit/logs.bats index 23547e9ed..d0d3ea7e5 100644 --- a/tests/unit/logs.bats +++ b/tests/unit/logs.bats @@ -145,6 +145,44 @@ teardown() { assert_success assert_output "console://?encoding[codec]=json" + run /bin/bash -c "dokku logs:set $TEST_APP vector-sink datadog_logs://?api_key=abc123" 2>&1 + echo "output: $output" + echo "status: $status" + assert_success + assert_output_contains "Setting vector-sink" + assert_output_contains "Writing updated vector config to /var/lib/dokku/data/logs/vector.json" + + run /bin/bash -c "dokku logs:report $TEST_APP --logs-vector-sink 2>&1" + echo "output: $output" + echo "status: $status" + assert_success + assert_output "datadog_logs://?api_key=abc123" + + run /bin/bash -c "dokku logs:set $TEST_APP vector-sink" 2>&1 + echo "output: $output" + echo "status: $status" + assert_success + assert_output_contains "Unsetting vector-sink" + assert_output_contains "Writing updated vector config to /var/lib/dokku/data/logs/vector.json" + + run /bin/bash -c "dokku logs:report $TEST_APP --logs-vector-sink 2>&1" + echo "output: $output" + echo "status: $status" + assert_success + assert_output_not_exists + + run /bin/bash -c "dokku logs:set $TEST_APP vector-sink" 2>&1 + echo "output: $output" + echo "status: $status" + assert_success + assert_output_contains "Unsetting vector-sink" + + run /bin/bash -c "dokku logs:report $TEST_APP --logs-vector-sink 2>&1" + echo "output: $output" + echo "status: $status" + assert_success + assert_output "" + run /bin/bash -c "dokku logs:report $TEST_APP --logs-max-size 2>&1" echo "output: $output" echo "status: $status" @@ -186,6 +224,18 @@ teardown() { echo "status: $status" assert_success assert_output "unlimited" + + run /bin/bash -c "dokku logs:set "$TEST_APP" max-size" 2>&1 + echo "output: $output" + echo "status: $status" + assert_success + assert_output_contains "Unsetting max-size" + + run /bin/bash -c "dokku logs:report $TEST_APP --logs-max-size 2>&1" + echo "output: $output" + echo "status: $status" + assert_success + assert_output "" } @test "(logs) logs:set global" { @@ -226,6 +276,19 @@ teardown() { assert_success assert_output "console://?encoding[codec]=json" + run /bin/bash -c "dokku logs:set --global vector-sink datadog_logs://?api_key=abc123" 2>&1 + echo "output: $output" + echo "status: $status" + assert_success + assert_output_contains "Setting vector-sink" + assert_output_contains "Writing updated vector config to /var/lib/dokku/data/logs/vector.json" + + run /bin/bash -c "dokku logs:report $TEST_APP --logs-global-vector-sink 2>&1" + echo "output: $output" + echo "status: $status" + assert_success + assert_output "datadog_logs://?api_key=abc123" + run /bin/bash -c "dokku logs:set --global vector-sink" 2>&1 echo "output: $output" echo "status: $status" @@ -239,6 +302,24 @@ teardown() { assert_success assert_output_not_exists + run /bin/bash -c "dokku logs:set --global vector-sink" 2>&1 + echo "output: $output" + echo "status: $status" + assert_success + assert_output_contains "Unsetting vector-sink" + + run /bin/bash -c "dokku logs:report $TEST_APP --logs-global-vector-sink 2>&1" + echo "output: $output" + echo "status: $status" + assert_success + assert_output_not_exists + + run /bin/bash -c "dokku logs:report $TEST_APP --logs-global-max-size 2>&1" + echo "output: $output" + echo "status: $status" + assert_success + assert_output "10m" + run /bin/bash -c "dokku logs:set --global max-size" 2>&1 echo "output: $output" echo "status: $status" @@ -280,6 +361,12 @@ teardown() { echo "status: $status" assert_success assert_output_contains "Unsetting max-size" + + run /bin/bash -c "dokku logs:report $TEST_APP --logs-global-max-size 2>&1" + echo "output: $output" + echo "status: $status" + assert_success + assert_output "10m" } @test "(logs) logs:vector" {