Repository navigation
Commit 992d9c0
authored
docs(demo): add a recorded demo reel, and make --format box render a box (#80)
* fix(cli): render --format box as an actual box, on stdout
`PrintBox` called `MaterializedQueryResult::ToString()`, which is DuckDB's debug
rendering, not a box: it prints a column-types row and a `[ Rows: N]` line ahead
of the data and draws no border. So `duckdb-otlp query` -- whose default on a
terminal is `box` -- looked nothing like the `duckdb` CLI it mirrors, and an
explicit `--format box` did not produce one.
Go through `duckdb::BoxRenderer`, the renderer the duckdb CLI itself uses, via
`ToString` rather than `Print`: `BoxRenderer::Print` writes through
`duckdb::Printer` to stderr, and a result set is the command's data, which this
CLI puts on stdout. Piped output is unaffected -- it still defaults to CSV.
* docs(demo): add a recorded demo reel and embed it in the README
Three beats, deliberately: receive -> ingest -> query. `duckdb-otlp serve`
with no flags, a synthetic checkout flow sent over OTLP/HTTP, and a
p95-by-service query run with plain `duckdb` straight over the Parquet the
server has already written -- while it is still receiving. Anything outside
those three beats is cut; the reel is a hook that autoplays muted, not a
tutorial, so it stays at ~36s and 432K (a README GIF that is slow to load is
not shown at all).
The reel is a VHS tape rather than a screen recording, so it lives in the
diff and re-records reproducibly. `demo/record.sh` holds everything a viewer
should not watch -- the throwaway workspace, PATH, the prompt -- so
`demo.tape` contains only what ends up on camera.
Beat 3 uses `duckdb` rather than `duckdb-otlp query` because a running server
holds the control database's write lock, so the CLI cannot read its own
catalog until it stops (`--readonly` does not help). Reading the Parquet
directly is the only live option, and it makes the better point anyway.
`demo/seed.py` generates the telemetry locally -- stdlib only, no recorded
traffic -- with `payment-service` deliberately the slow and failing one, so
the query on screen has something real to find.
record.sh refuses to run under VHS 0.12.0, which records the tape, prints
"Creating <file>...", exits 0 and writes nothing (charmbracelet/vhs#787).
* docs(demo): hand-wave the data source, and size the GIF for the README
Two things the first cut got wrong.
The ingest caption named the scenario ("Here, a checkout flow"), which is
detail nobody needs in beat 2. It now says what a viewer would actually do --
point their own apps or agents at :4318 -- and gestures at the OpenTelemetry
Demo as something to send. Deliberately as a suggestion, not as a claim about
what is on screen: the traffic is generated by demo/seed.py, and a reel that
implied it came from the upstream demo would be asserting a compatibility
result it has not shown. seed.py's progress lines drop "checkout" for the same
reason -- they repeated the scenario eight times on camera.
And the reel was recorded at 1200px, which GitHub scales into its ~900px
README column, softening every glyph. It is now recorded at the width it is
displayed at, so the terminal text is pixel-crisp where it is actually read
(and 320K rather than 432K).
The height is load-bearing, not cosmetic. At 520px the terminal held 25 rows,
two short of the startup banner plus the lines typed above it, so the banner
scrolled past `Wait /Send OTLP/` before it could match. The failure mode is
nasty: the recording dies a minute later, at a beat that has nothing to do
with the cause, with the server up and listening the whole time.
record.sh gained the guard that would have caught this run's other stall: the
cleanup pkill pattern was built from $BIN's absolute path, but the tape starts
the server off PATH as `duckdb-otlp serve`, so it matched nothing and left a
server holding 4318 for the next run. It now matches the real command line,
and a port check up front turns "recording failed" into a sentence that says
which port and what is on it.
* docs(readme): lead with what it does, not what it is
The old line -- "DuckDB extension for querying and storing OpenTelemetry
traces, logs, and metrics with SQL" -- opened on a category rather than a
benefit, and "storing" is doing a lot of quiet work: the thing that is
actually novel here is that it *receives* live OTLP and OTAP over HTTP and
gRPC and lands it in a lakehouse you own. A reader deciding in fifteen
seconds could not tell there was a server in the box at all.
So: a promise first ("Your telemetry, in your own storage, answerable in
SQL"), then the specifics that back it -- the protocols in, the destinations
out, and the three things you do not have to run to get them. The H1 moves to
`duckdb-otlp` for the same reason "Extension" led the old one: the binary is
half the project.
The "As of v0.6" paragraph went with it. It said what the new opening says,
with the same links, so it had become an echo. In its place, the one thing
the tagline cannot carry: that this ships both as a DuckDB extension and as a
standalone binary, and what each gives you.
Every destination link is preserved, and "DuckDB extension" and
"OpenTelemetry" both still appear above the fold, so nothing that people
search for has been dropped. The single-node and unproven-query-volume
caveats further down are untouched, and keep "no cluster to size" honest.
Also drops the caption under the demo GIF.1 parent fdcaad6 commit 992d9c0
9 files changed
Lines changed: 587 additions & 7 deletions
File tree
- demo
- src/server
- test/server
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | | - | |
| 1 | + | |
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
7 | 7 | | |
8 | | - | |
| 8 | + | |
9 | 9 | | |
10 | | - | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
11 | 15 | | |
12 | 16 | | |
13 | 17 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
Loading
Binary file not shown.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
0 commit comments