Skip to main content

OpenTelemetry-based instrumentation for CLI tools

Project description

cli-telemetry

Telemetry agent for CLI tools. Backed by SQLite

Getting Started

Install it using pip or uv

uv pip install cli-telemetry

Usage

Use it with any python script. Here's an example to show how to use it with a Click based CLI.

@click.group()
@click.pass_context
def cli(ctx):
    # Start the root span for this invocation
    cmd = ctx.invoked_subcommand or "cli"
    start_session(command_name=cmd, service_name="example-cli")
    # Ensure we end the span when the CLI exits
    ctx.call_on_close(end_session)

@cli.command()
@profile
def work():
    """Simulate some nested work using a profile_block."""
    add_tag("phase", "start_work")
    with profile_block("step_1", tags={"step": 1}):
        click.echo("step1")
        sleep(0.1)
        pass
    with profile_block("step_2", tags={"step": 2}):
        click.echo("step2")
        sleep(0.2)
        pass
    click.echo("Work done!")

if __name__ == "__main__":
    cli()

Running this CLI will automatically record performance stats in a SQLite database. The SQLite database is located under $XDG_DATA_HOME (~/.local/share/cli-telemetry/).

You can view the traces using the built in viewer:

cli-telemetry

This is a menu driven interface to visualize your traces.

Available databases:
  [1] example-cli (/Users/amjith/.local/share/cli-telemetry/example-cli/telemetry.db)
Select database [1] (1):

Available traces:
  [1] 6c35e820-951f-4544-94e0-42ddd03a15f4 (command: 'work' at 2025-05-06T17:46:50)
  [2] c748efc2-6f34-42b9-876c-333b9fb406d5 (command: 'shout' at 2025-05-06T17:46:30)
  [3] 3b9a0b4c-ee73-4aa9-988b-d67037c5836d (command: 'shout' at 2025-05-06T08:16:51)
Select trace [1/2/3] (1):
root  936.83ms (100%)
└── cli_invocation  936.83ms (100.0%)
    └── work  622.85ms (66.5%)
        └── step_1  105.06ms (11.2%)            step_2  204.88ms (21.9%)

Web-Based Viewer

The web-based telemetry viewer is provided as a plugin. To serve the web UI:

cli-telemetry webapp --db-file ~/.local/share/cli-telemetry/<service>/telemetry.db \
    --host 127.0.0.1 --port 5000

Folded Stack Exporter

The folded stack exporter is provided as a plugin. It generates a flame-graph style folded stacks file.

cli-telemetry folded \
  --db-file ~/.local/share/cli-telemetry/<service>/telemetry.db \
  --trace-id YOUR_TRACE_ID \
  --output-file trace.folded

Omit --output-file to print the folded stacks to stdout.

Plugin Architecture

cli-telemetry supports plugins to extend its CLI:

  • Built-in plugins are discovered in the cli_telemetry.plugins namespace package.
  • External plugins can be installed and registered via setuptools entry points under the group cli_telemetry.plugins.

Plugins must define a register(cli_group) function, which takes the main Click group and registers commands or options. For example:

import click

def register(cli):
    @cli.command()
    def hello():
        """A simple hello command."""
        click.echo("Hello from plugin!")

External plugins should declare their entry point in their packaging:

[project.entry-points."cli_telemetry.plugins"]
myplugin = "my_plugin.module:register"

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cli_telemetry-0.0.2.tar.gz (25.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

cli_telemetry-0.0.2-py3-none-any.whl (25.5 kB view details)

Uploaded Python 3

File details

Details for the file cli_telemetry-0.0.2.tar.gz.

File metadata

  • Download URL: cli_telemetry-0.0.2.tar.gz
  • Upload date:
  • Size: 25.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for cli_telemetry-0.0.2.tar.gz
Algorithm Hash digest
SHA256 0574d4e623f50c86ca198008e0961134fda3d3efdf2621ab9ae2d2789fd48a55
MD5 b0d6feb86d4dd15ae6dbe3e775404f91
BLAKE2b-256 7aa039e62b9e96355928ece5a44ac79eb8c8193bc202392be813a2c048689631

See more details on using hashes here.

Provenance

The following attestation bundles were made for cli_telemetry-0.0.2.tar.gz:

Publisher: publish.yml on amjith/cli-telemetry

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file cli_telemetry-0.0.2-py3-none-any.whl.

File metadata

  • Download URL: cli_telemetry-0.0.2-py3-none-any.whl
  • Upload date:
  • Size: 25.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for cli_telemetry-0.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 2a767474a48898bbe8d9cfa0ad3a228a39253bc0899fca31c9ac8d94ae731a7c
MD5 61c4d15143f990ca7a4b021e0144e7e0
BLAKE2b-256 c744e6787ca250347b124fa42c234f23b0938c41345b17f1fd13842323b3a5d7

See more details on using hashes here.

Provenance

The following attestation bundles were made for cli_telemetry-0.0.2-py3-none-any.whl:

Publisher: publish.yml on amjith/cli-telemetry

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page