Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PT-2235 - pt-mongodb-index-check does not support option --version #653

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions docs/pt-mongodb-index-check.rst
Original file line number Diff line number Diff line change
Expand Up @@ -67,4 +67,6 @@ Available flags
+----------------------------+----------------------------------------+
| –json | Show output as JSON |
+----------------------------+----------------------------------------+
| –version | Show version information |
+----------------------------+----------------------------------------+

48 changes: 0 additions & 48 deletions src/go/pt-mongodb-index-check/README.md

This file was deleted.

72 changes: 72 additions & 0 deletions src/go/pt-mongodb-index-check/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
.. _pt-mongodb-index-check:

=================================
:program:`pt-mongodb-index-check`
=================================

Performs checks on MongoDB indexes.

Checks available
================

Duplicated indexes
~~~~~~~~~~~~~~~~~~

Check for indexes that are the prefix of other indexes. For example if we have these 2 indexes

.. code-block:: javascript

db.getSiblingDB("testdb").test_col.createIndex({"f1": 1, "f2": -1, "f3": 1, "f4": 1}, {"name": "idx_01"});
db.getSiblingDB("testdb").test_col.createIndex({"f1": 1, "f2": -1, "f3": 1}, {"name": "idx_02"});


The index ``idx_02`` is the prefix of ``idx_01`` because it has the same
keys in the same order so, ``idx_02`` can be dropped.

Unused indexes.
~~~~~~~~~~~~~~~

This check gets the ``$indexstats`` for all indexes and reports those
having ``accesses.ops`` = 0.

Usage
=====

Run the program as ``pt-mongodb-index-check <command> [flags]``

Available commands
~~~~~~~~~~~~~~~~~~

================ ==================================
Command Description
================ ==================================
check-duplicated Run checks for duplicated indexes.
check-unused Run check for unused indexes.
check-all Run all checks
================ ==================================

Available flags
~~~~~~~~~~~~~~~

+----------------------------+----------------------------------------+
| Flag | Description |
+============================+========================================+
| –all-databases | Check in all databases excluding |
| | system dbs. |
+----------------------------+----------------------------------------+
| –databases=DATABASES,… | Comma separated list of databases to |
| | check. |
+----------------------------+----------------------------------------+
| –all-collections | Check in all collections in the |
| | selected databases. |
+----------------------------+----------------------------------------+
| –collections=COLLECTIONS,… | Comma separated list of collections to |
| | check. |
+----------------------------+----------------------------------------+
| –mongodb.uri= | Connection URI |
+----------------------------+----------------------------------------+
| –json | Show output as JSON |
+----------------------------+----------------------------------------+
| –version | Show version information |
+----------------------------+----------------------------------------+

14 changes: 4 additions & 10 deletions src/go/pt-mongodb-index-check/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ type cmdlineArgs struct {
CheckDuplicated struct{} `cmd:"" name:"check-duplicates" help:"Check for duplicated indexes."`
CheckAll struct{} `cmd:"" name:"check-all" help:"Check for unused and duplicated indexes."`
ShowHelp struct{} `cmd:"" default:"1"`
Version struct{} `cmd:"" name:"version"`
Version kong.VersionFlag

AllDatabases bool `name:"all-databases" xor:"db" help:"Check in all databases excluding system dbs"`
Databases []string `name:"databases" xor:"db" help:"Comma separated list of databases to check"`
Expand Down Expand Up @@ -55,15 +55,9 @@ var (

func main() {
var args cmdlineArgs
kongctx := kong.Parse(&args, kong.UsageOnError())

if kongctx.Command() == "version" {
fmt.Println(toolname)
fmt.Printf("Version %s\n", Version)
fmt.Printf("Build: %s using %s\n", Build, GoVersion)
fmt.Printf("Commit: %s\n", Commit)
return
}
kongctx := kong.Parse(&args, kong.UsageOnError(),
kong.Vars{"version": fmt.Sprintf("%s\nVersion %s\nBuild: %s using %s\nCommit: %s",
toolname, Version, Build, GoVersion, Commit)})

ctx, cancel := context.WithTimeout(context.Background(), 20*time.Second)
defer cancel()
Expand Down
22 changes: 22 additions & 0 deletions src/go/pt-mongodb-index-check/main_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package main

import (
"os/exec"
"regexp"
"testing"
)

/*
Option --version
*/
func TestVersionOption(t *testing.T) {
out, err := exec.Command("../../../bin/"+toolname, "--version").Output()
if err != nil {
t.Errorf("error executing %s --version: %s", toolname, err.Error())
}
// We are using MustCompile here, because hard-coded RE should not fail
re := regexp.MustCompile(toolname + `\n.*Version v?\d+\.\d+\.\d+\n`)
if !re.Match(out) {
t.Errorf("%s --version returns wrong result:\n%s", toolname, out)
}
}