Octri

CLI

Source files

For compiled languages: Go, Rust, Java, Kotlin, Swift. Their stack frames already carry the original file and line, but the production binary ships without the source, so the dashboard has nothing to show at each frame until you upload it.

bash
octri-monitoring sources upload [paths...] [options]

paths defaults to the current directory and is scanned recursively for source files.

Typical use

bash
octri-monitoring sources upload ./src \
  --url https://monitoring.example.com \
  --environment "$MONITORING_ENVIRONMENT" \
  --release "$GIT_SHA"

With the environment variables set, this collapses to:

bash
octri-monitoring sources upload ./src

Why this differs from source maps

Nothing is mangled, it's just absent

A minified JavaScript frame says a.b.c:1:4823 and needs a map to become meaningful. A Go panic already says checkout.go:214. The frame is fine; what's missing is checkout.go itself, because your binary doesn't carry it.

sources upload sends the code so the dashboard can show it next to the frame.

Upload your source, not your repository

Point it at your source tree, not the project root

octri-monitoring sources upload . from a repo root walks everything: fixtures, vendored dependencies, test data, and whatever else is lying around. Point it at the directory your code actually lives in.

bash
octri-monitoring sources upload ./src ./internal

Multiple paths are fine.

What gets uploaded

Anything under those paths goes to the monitoring service

This uploads source files. A .env committed next to your code, a fixture with real customer records, a key checked in years ago: if it's under the path you point at, it's uploaded.

Scope the paths deliberately, and don't point this at a directory you haven't looked in lately.

Verify first

bash
octri-monitoring sources upload ./src --dry-run
text
[dry-run] would upload 128 source file(s) for release 9f2c1ab:
  src/main.go
  src/checkout.go
  ...

The dry run lists the files, which is also the fastest way to notice you're about to upload something you shouldn't. Long lists are truncated in the output.

Release matching

Same rule as everywhere: the release here must equal what your SDK reports at runtime. It defaults to git rev-parse HEAD. See Symbolication.