gabi-cli
simplifies the configuration and usage of Gabi.
First clone the repository somewhere in your $GOPATH.
Example:
mkdir $GOPATH/src/github.com/cristianoveiga
cd $GOPATH/src/github.com/cristianoveiga
git clone git@github.com:cristianoveiga/gabi-cli.git
Next, cd into the gabi folder and run make
. This command will build the gabi
binary and place it in $GOPATH.
The gabi-cli
configuration is done via profiles
stored in the $HOME/.config/gabi/gabi.json
file. Here is what the file should look like for two profiles:
[
{
"name": "ams-stage",
"alias": "stage",
"url": "https://...",
"token": "sha256~...",
"current": true
},
{
"name": "ams-production",
"alias": "production",
"url": "https://...",
"token": "sha256~...",
"current": false
}
]
Note: This configuration can be bootstraped via the gabi config init command (see details below)
The two main commands of gabi-cli are config
and exec
.
Gets or Sets the gabi-cli configs.
gabi config -h
Gets or Sets the gabi-cli configs
Usage:
gabi configure [command]
Aliases:
configure, config
Available Commands:
allprofiles Gets all profiles currently configured for gabi-cli
currentprofile Gets the current profile
init Initializes a gabi-cli config by creating a gabi.json config file under the ~/.config/gabi directory
setcurrentprofile Sets the current profile
settoken Sets the token for current profile
seturl Sets the url for current profile
Get started by creating the gabi config file:
gabi config init
Gabi init success! Check /$HOME/.config/gabi/gabi.json for details and complete the setup.
This will create the gabi.json
in the following format:
[
{
"name": "default",
"alias": "default",
"url": "",
"token": "",
"current": true
}
]
As a next step you can configure the URL and Token (either editing the gabi.json
file or using the seturl
and settoken
commands)
gabi config seturl https://XXX...
gabi config settoken sha256~XXX...
Confirm everything is ready by running the gabi config currentprofile
command
{
"name": "default",
"alias": "default",
"url": "https://XXX...",
"token": "sha256~XXX...",
"current": true
}
Note: the token attribute will be redacted for security.
Executes queries using the gabi-cli.
gabi exec -h
Executes a gabi query received from a string as argument, from the file contents specified by a file path with an ".sql" extension, or from stdin. When using stdin, press Enter to move to the next line and then CTRL+D to execute the query (or CTRL+C to Cancel)
Usage:
gabi execute [string] | [sql_file_path] | stdin [flags]
Aliases:
execute, exec
Flags:
--csv CSV output
-h, --help help for execute
--raw Raw output
--show-row-count Prints out the number of rows returned by your query
By default, gabi-cli will format the output as json.
Here are some examples of what output looks like:
gabi exec "select * from cloud_resources where resource_type='compute.node' and cloud_provider='aws' limit 2"
[
{
"active": "true",
"category": "compute_optimized",
"category_pretty": "Compute optimized",
"cloud_provider": "aws",
"cpu_cores": "48",
"created_at": "0001-01-01T00:00:00Z",
"deleted_at": "",
"generic_name": "highcpu-48-5a",
"id": "c5a.12xlarge",
"memory": "103079215104",
"memory_pretty": "96",
"name_pretty": "c5a.12xlarge - Compute optimized",
"resource_type": "compute.node",
"size_pretty": "12xlarge",
"updated_at": "2022-10-10T13:55:03.159046Z"
},
{
"active": "true",
"category": "compute_optimized",
"category_pretty": "Compute optimized",
"cloud_provider": "aws",
"cpu_cores": "64",
"created_at": "0001-01-01T00:00:00Z",
"deleted_at": "",
"generic_name": "highcpu-64-5a",
"id": "c5a.16xlarge",
"memory": "137438953472",
"memory_pretty": "128",
"name_pretty": "c5a.16xlarge - Compute optimized",
"resource_type": "compute.node",
"size_pretty": "16xlarge",
"updated_at": "2022-10-10T13:55:03.162961Z"
}
]
Prints a comma-separated output in the terminal
gabi exec "select * from cloud_resources where resource_type='compute.node' and cloud_provider='aws' limit 2" --csv
id,created_at,updated_at,deleted_at,name_pretty,generic_name,cloud_provider,resource_type,category,category_pretty,cpu_cores,memory,memory_pretty,size_pretty,active
c5a.12xlarge,0001-01-01T00:00:00Z,2022-10-10T13:55:03.159046Z,,c5a.12xlarge - Compute optimized,highcpu-48-5a,aws,compute.node,compute_optimized,Compute optimized,48,103079215104,96,12xlarge,true
c5a.16xlarge,0001-01-01T00:00:00Z,2022-10-10T13:55:03.162961Z,,c5a.16xlarge - Compute optimized,highcpu-64-5a,aws,compute.node,compute_optimized,Compute optimized,64,137438953472,128,16xlarge,true
The original gabi response without any formatting
gabi exec "select * from cloud_resources where resource_type='compute.node' and cloud_provider='aws' limit 2" --raw
[
[
"id",
"created_at",
"updated_at",
"deleted_at",
"name_pretty",
"generic_name",
"cloud_provider",
"resource_type",
"category",
"category_pretty",
"cpu_cores",
"memory",
"memory_pretty",
"size_pretty",
"active"
],
[
"c5a.12xlarge",
"0001-01-01T00:00:00Z",
"2022-10-10T13:55:03.159046Z",
"",
"c5a.12xlarge - Compute optimized",
"highcpu-48-5a",
"aws",
"compute.node",
"compute_optimized",
"Compute optimized",
"48",
"103079215104",
"96",
"12xlarge",
"true"
],
[
"c5a.16xlarge",
"0001-01-01T00:00:00Z",
"2022-10-10T13:55:03.162961Z",
"",
"c5a.16xlarge - Compute optimized",
"highcpu-64-5a",
"aws",
"compute.node",
"compute_optimized",
"Compute optimized",
"64",
"137438953472",
"128",
"16xlarge",
"true"
]
]
Multi-line Select statements can be performed using HEREDOC or directly via the Standard Input (stdin)
gabi exec << EOF
select
count(id) as total_resources,
category as cat
from cloud_resources cr
group by category
having count(id) > 50
EOF
[
{
"cat": "compute_optimized",
"total_resources": "100"
},
{
"cat": "memory_optimized",
"total_resources": "200"
}
{
"cat": "general_purpose",
"total_resources": "300"
}
]
- Type
gabi exec
and pressEnter
- Type your query (it can include line breaks and tabs)
- When you are done typing it, press
Enter
again to move to the next line and thenCTRL+D
to indicate the end of the input - this will trigger the query execution. Alternatively, pressCTRL+C
to Cancel.
gabi exec [ENTER]
select count(id) as total_resources,
cloud_provider as provider
from cloud_resources cr
group by cloud_provider
having count(id) > 10
[Ctrl+D]
[
{
"provider": "aws",
"total_resources": "50"
},
{
"provider": "gcp",
"total_resources": "50"
}
]
Gabi-CLI can keep track of the executed queries.
This feature is disabled by default and can be enabled via the gabi config enablehistory
command.
gabi history -h
Executes history operations
Usage:
gabi history [command]
Available Commands:
clear Clears gabi-cli query history
show Shows gabi-cli query history
Flags:
-h, --help help for history
After a few queries, you should be able to run the gabi history show
command which will output something like this:
5 select * from cloud_resources where resource_type='compute.node' and cloud_provider='aws'
4 select * from cloud_resources where resource_type='compute.node' and cloud_provider='gcp'
3 select count(id) as total_resources, category as cat from cloud_resources cr group by category having count(id) > 50
2 select count(id) as total_resources, cloud_provider as provider from cloud_resources cr group by cloud_provider having count(id) > 10
1 select count(*) from cloud_resources
Note: the gabi history show
command returns the last 100 queries. This number can be overridden with the flag --max-rows
:
gabi history show -h
...
Flags:
-h, --help help for show
--max-rows int Maximum number of rows returned in the show command (default 100)
Use the gabi history clear
command to wipe out all query logs.