diff --git a/inputs/mongodb/exporter/dsn_fix/dsn_fix.go b/inputs/mongodb/exporter/dsn_fix/dsn_fix.go deleted file mode 100644 index 96dbda1..0000000 --- a/inputs/mongodb/exporter/dsn_fix/dsn_fix.go +++ /dev/null @@ -1,43 +0,0 @@ -// mongodb_exporter -// Copyright (C) 2017 Percona LLC -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package dsn_fix - -import ( - "net/url" - - "go.mongodb.org/mongo-driver/mongo/options" -) - -// ClientOptionsForDSN applies URI to Client. -func ClientOptionsForDSN(dsn string) (*options.ClientOptions, error) { - clientOptions := options.Client().ApplyURI(dsn) - - // Workaround for PMM-9320 - // if username or password is set, need to replace it with correctly parsed credentials. - parsedDsn, err := url.Parse(dsn) - if err != nil { - // for non-URI, do nothing (PMM-10265) - return clientOptions, nil - } - username := parsedDsn.User.Username() - password, _ := parsedDsn.User.Password() - if username != "" || password != "" { - clientOptions = clientOptions.SetAuth(options.Credential{Username: username, Password: password}) - } - - return clientOptions, nil -} diff --git a/inputs/mongodb/exporter/metrics_test.go b/inputs/mongodb/exporter/metrics_test.go deleted file mode 100644 index 8f65fca..0000000 --- a/inputs/mongodb/exporter/metrics_test.go +++ /dev/null @@ -1,218 +0,0 @@ -// mongodb_exporter -// Copyright (C) 2017 Percona LLC -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package exporter - -import ( - "testing" - "time" - - "github.com/AlekSi/pointer" - "github.com/prometheus/client_golang/prometheus" - "github.com/stretchr/testify/assert" - "go.mongodb.org/mongo-driver/bson/primitive" -) - -// Test metric renaming and labeling. -func TestMetricName(t *testing.T) { - tcs := []struct { - prefix string - name string - wantMetric string - wantLabel string - }{ - { - prefix: "serverStatus.metrics.commands.saslStart.", - name: "total", - wantMetric: "mongodb_ss_metrics_commands_saslStart_total", - }, - { - prefix: "serverStatus.metrics.commands._configsvrShardCollection.", - name: "failed", - wantMetric: "mongodb_ss_metrics_commands_configsvrShardCollection_failed", - }, - { - prefix: "serverStatus.wiredTiger.lock.", - name: "metadata lock acquisitions", - wantMetric: "mongodb_ss_wt_lock_metadata_lock_acquisitions", - }, - { - prefix: "serverStatus.wiredTiger.perf.", - name: "file system write latency histogram (bucket 5) - 500-999ms", - wantMetric: "mongodb_ss_wt_perf", - wantLabel: "perf_bucket", - }, - { - prefix: "serverStatus.wiredTiger.transaction.", - name: "rollback to stable updates removed from lookaside", - wantMetric: "mongodb_ss_wt_txn_rollback_to_stable_updates_removed_from_lookaside", - }, - } - - for _, tc := range tcs { - metric, label := nameAndLabel(tc.prefix, tc.name) - assert.Equal(t, tc.wantMetric, metric, tc.prefix+tc.name) - assert.Equal(t, tc.wantLabel, label, tc.prefix+tc.name) - } -} - -func TestPrometeusize(t *testing.T) { - tests := []struct { - in string - want string - }{ - { - in: "serverStatus.wiredTiger.transaction.transaction checkpoint most recent time (msecs)", - want: "mongodb_ss_wt_txn_transaction_checkpoint_most_recent_time_msecs", - }, - { - in: "serverStatus.wiredTiger.thread-yield.page acquire time sleeping (usecs)", - want: "mongodb_ss_wt_thread_yield_page_acquire_time_sleeping_usecs", - }, - { - in: "serverStatus.opLatencies.reads.latency", - want: "mongodb_ss_opLatencies_reads_latency", - }, - { - in: "replSetGetStatus.optimes.lastCommittedOpTime.t", - want: "mongodb_rs_optimes_lastCommittedOpTime_t", - }, - { - in: "systemMetrics.memory.Active_kb", - want: "mongodb_sys_memory_Active_kb", - }, - { - in: "local.oplog.rs.stats.wiredTiger.block-manager.checkpoint size", - want: "mongodb_oplog_stats_wt_block_manager_checkpoint_size", - }, - { - in: "local.oplog.rs.stats.storageSize", - want: "mongodb_oplog_stats_storageSize", - }, - { - in: "collstats_storage.wiredTiger.xxx", - want: "mongodb_collstats_storage_wt_xxx", - }, - - { - in: "collstats_storage.indexDetails.xxx", - want: "mongodb_collstats_storage_idx_xxx", - }, - { - in: "collStats.storageStats.xxx", - want: "mongodb_collstats_storage_xxx", - }, - { - in: "collStats.latencyStats.xxx", - want: "mongodb_collstats_latency_xxx", - }, - } - - for _, test := range tests { - got := prometheusize(test.in) - assert.Equal(t, test.want, got) - } -} - -// Test supported value types conversion. -func TestMakeRawMetric(t *testing.T) { - prefix := "serverStatus.transactions." - name := "retriedCommandsCount" - testCases := []struct { - value interface{} - wantVal *float64 - }{ - {value: true, wantVal: pointer.ToFloat64(1)}, - {value: false, wantVal: pointer.ToFloat64(0)}, - {value: int32(1), wantVal: pointer.ToFloat64(1)}, - {value: int64(2), wantVal: pointer.ToFloat64(2)}, - {value: float32(1.23), wantVal: pointer.ToFloat64(float64(float32(1.23)))}, - {value: float64(1.23), wantVal: pointer.ToFloat64(1.23)}, - {value: primitive.A{}, wantVal: nil}, - {value: primitive.Timestamp{}, wantVal: nil}, - {value: "zapp", wantVal: nil}, - {value: []byte{}, wantVal: nil}, - {value: time.Date(2020, 6, 15, 0, 0, 0, 0, time.UTC), wantVal: nil}, - } - - ln := make([]string, 0) // needs pre-allocation to accomplish pre-allocation for labels - lv := make([]string, 0) - - fqName := prometheusize(prefix + name) - help := metricHelp(prefix, name) - - for _, tc := range testCases { - var want *rawMetric - if tc.wantVal != nil { - want = &rawMetric{ - fqName: fqName, - help: help, - ln: ln, - lv: lv, - val: *tc.wantVal, - vt: prometheus.CounterValue, - } - } - - m, err := makeRawMetric(prefix, name, tc.value, nil) - - assert.NoError(t, err) - assert.Equal(t, want, m) - } -} - -func TestRawToCompatibleRawMetric(t *testing.T) { - testCases := []struct { - in *rawMetric - want *rawMetric - }{ - { - in: &rawMetric{ - fqName: "mongodb_ss_opLatencies_commands_latency", - val: float64(1), - vt: prometheus.UntypedValue, - }, - want: &rawMetric{ - fqName: "mongodb_ss_opLatencies_latency", - help: "mongodb_ss_opLatencies_latency", - ln: []string{"op_type"}, - lv: []string{"commands"}, - val: 1, - vt: 3, - }, - }, - { - in: &rawMetric{ - fqName: "mongodb_ss_opLatencies_commands_ops", - val: float64(1), - vt: prometheus.UntypedValue, - }, - want: &rawMetric{ - fqName: "mongodb_ss_opLatencies_ops", - help: "mongodb_ss_opLatencies_ops", - ln: []string{"op_type"}, - lv: []string{"commands"}, - val: 1, - vt: 3, - }, - }, - } - - for _, tc := range testCases { - m := metricRenameAndLabel(tc.in, specialConversions()) - assert.Equal(t, m[0], tc.want) - } -}