2025-10-05 22:53:20 +03:00
2025-10-05 22:27:26 +03:00
2025-10-05 22:53:20 +03:00

KVS Shell

An interactive command-line client for the KVS (Key-Value Store) distributed database system.

Overview

KVS Shell is a terminal-based client that provides an intuitive interface for interacting with KVS servers. It offers features similar to mongosh, psql, or redis-cli, allowing you to manage key-value data, users, groups, and cluster members through a simple command interface.

Features

  • Interactive Shell: Full-featured REPL with command history and auto-completion
  • Profile Management: Switch between multiple user accounts and servers
  • Authentication: JWT token-based authentication with secure credential storage
  • Key-Value Operations: Store, retrieve, and delete JSON data
  • Cluster Management: Monitor cluster members and health status
  • User Management: View and manage user accounts (with appropriate permissions)
  • Colored Output: Syntax-highlighted responses for better readability

Installation

Prerequisites

  • Go 1.21 or higher
  • Access to a running KVS server

Build from Source

git clone
cd kvs-shell
go mod tidy
go build -o kvs-shell

Install

# Install to your Go bin directory
go install

# Or copy the binary to your PATH
sudo cp kvs-shell /usr/local/bin/

Quick Start

  1. Start the shell:
./kvs-shell
  1. Connect to your KVS server:
kvs> connect http://localhost:8090
  1. Authenticate (if required):
kvs> auth eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
  1. Store and retrieve data:
kvs> put users/alice {"name": "Alice", "email": "alice@example.com"}
kvs> get users/alice

Commands Reference

Connection & Authentication

connect <url>                              # Connect to KVS server
auth <token>                               # Set authentication token

Profile Management

profile                                    # List all saved profiles
profile add <name> <token> <user-uuid> [url]  # Add a new profile
profile use <name>                         # Switch to a profile
profile remove <name>                      # Delete a profile

Example:

kvs> profile add admin eyJhbG... user-uuid-123 http://localhost:8090
kvs> profile add dev eyJhbG... user-uuid-456 http://localhost:8091
kvs> profile use dev

Key-Value Operations

get <key>                                  # Retrieve value for key
put <key> <json>                           # Store JSON value at key
delete <key>                               # Delete key

Examples:

kvs> put config/app {"version": "1.0", "debug": true}
kvs> get config/app
kvs> delete config/old

Cluster Management

members                                    # List cluster members
health                                     # Check service health

User Management

user get <uuid>                            # Get user details
user create <nickname>                     # Create new user (admin only)

System Commands

help                                       # Show help
clear                                      # Clear screen
exit, quit                                 # Exit shell

Response Format

Stored Values

When retrieving data with get, you'll see:

UUID:      a1b2c3d4-e5f6-7890-abcd-ef1234567890
Timestamp: 2025-10-05T12:34:56Z
Data:
{
  "name": "Alice",
  "email": "alice@example.com"
}

Cluster Members

The members command shows:

Cluster Members:
  • node-1 (192.168.1.10:8090) - Last seen: 2025-10-05T12:34:56Z
  • node-2 (192.168.1.11:8090) - Last seen: 2025-10-05T12:35:01Z

Configuration

History

Command history is automatically saved to ~/.kvs_history and persists across sessions.

Profiles

Profiles are stored in memory during the session. To persist profiles across restarts, you can save them to a configuration file (feature to be added in future versions).

Authentication

KVS Shell uses JWT tokens for authentication. Obtain a token from your KVS server administrator or through the server's authentication API:

# Example: Get token from KVS server
curl -X POST http://localhost:8090/api/tokens \
  -H "Authorization: Bearer <admin-token>" \
  -H "Content-Type: application/json" \
  -d '{"user_uuid": "your-uuid", "scopes": ["read", "write"]}'

Then use the returned token in the shell:

kvs> auth eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

Advanced Usage

Working with Complex JSON

For multi-line or complex JSON, use quotes:

kvs> put data/user '{"name": "Bob", "preferences": {"theme": "dark", "notifications": true}}'

Key Naming Conventions

Keys can use path-like structures:

users/alice
config/app/production
data/metrics/2025-10

This helps organize your data hierarchically.

Troubleshooting

Connection Issues

If you can't connect to the server:

  1. Verify the server is running: curl http://localhost:8090/health
  2. Check firewall settings
  3. Ensure the URL includes the protocol (http:// or https://)

Authentication Errors

If you get "Unauthorized" errors:

  1. Verify your token is still valid (tokens may expire)
  2. Check that your user has the required permissions
  3. Generate a new token if needed

Command Not Found

If a command isn't recognized:

  • Type help to see available commands
  • Check for typos in the command name
  • Ensure you've connected to a server first

Development

Building

go build -o kvs-shell

Testing

go test ./...

Dependencies

  • github.com/chzyer/readline - Interactive line editing and history
  • github.com/fatih/color - Colored terminal output

Roadmap

Planned features:

  • Configuration file for persistent profiles
  • Management of local KVS instance configuration file
  • Batch operations from file
  • Export/import functionality
  • Group management commands
  • Metadata management
  • Query filtering and pagination
  • TLS/SSL support
  • Shell scripts execution
  • Tab completion for keys
  • Transaction support
Description
commandline shell to use and manage KVS.
Readme 152 KiB
Languages
Go 100%