Skip to content

Commit c848ed4

Browse files
committed
Add preview metadata to streaming tail onset events
1 parent 4dddab3 commit c848ed4

7 files changed

Lines changed: 39 additions & 1 deletion

File tree

src/workerd/api/trace.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -669,7 +669,8 @@ class TraceCustomEvent final: public WorkerInterface::CustomEvent {
669669
};
670670

671671
#define EW_TRACE_ISOLATE_TYPES \
672-
api::ScriptVersion, api::TailEvent, api::TraceItem, api::TraceItem::AlarmEventInfo, \
672+
api::Preview, api::ScriptVersion, api::TailEvent, api::TraceItem, \
673+
api::TraceItem::AlarmEventInfo, \
673674
api::TraceItem::CustomEventInfo, api::TraceItem::ScheduledEventInfo, \
674675
api::TraceItem::QueueEventInfo, api::TraceItem::EmailEventInfo, \
675676
api::TraceItem::TailEventInfo, api::TraceItem::TailEventInfo::TailItem, \

src/workerd/io/trace-stream.c++

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ namespace {
6161
V(OK, "ok") \
6262
V(ONSET, "onset") \
6363
V(OUTCOME, "outcome") \
64+
V(PREVIEW, "preview") \
6465
V(QUEUE, "queue") \
6566
V(QUEUENAME, "queueName") \
6667
V(RAWSIZE, "rawSize") \
@@ -80,6 +81,7 @@ namespace {
8081
V(SPANOPEN, "spanOpen") \
8182
V(STACK, "stack") \
8283
V(STATUSCODE, "statusCode") \
84+
V(SLUG, "slug") \
8385
V(STREAMDIAGEVENT, "streamDiagEvent") \
8486
V(STREAMDIAGNOSTIC, "streamDiagnostic") \
8587
V(TAG, "tag") \
@@ -359,6 +361,13 @@ jsg::JsValue ToJs(jsg::Lock& js, const Onset& onset, StringCache& cache) {
359361
}
360362
obj.set(js, SCRIPTVERSION_STR, vobj);
361363
}
364+
KJ_IF_SOME(preview, onset.workerInfo.preview) {
365+
auto pobj = js.obj();
366+
pobj.set(js, ID_STR, js.str(preview.id));
367+
pobj.set(js, SLUG_STR, js.str(preview.slug));
368+
pobj.set(js, NAME_STR, js.str(preview.name));
369+
obj.set(js, PREVIEW_STR, pobj);
370+
}
362371

363372
KJ_SWITCH_ONEOF(onset.info) {
364373
KJ_CASE_ONEOF(fetch, FetchEventInfo) {

src/workerd/io/trace-test.c++

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -481,6 +481,10 @@ KJ_TEST("Read/Write Onset works") {
481481
Onset info(staticSpanId, Onset::Info(kj::mv(fetchInfo)),
482482
{
483483
.scriptName = kj::str("foo"),
484+
.preview = TracePreview(
485+
kj::str("63bafce9179948688866bb22268eb1c6"),
486+
kj::str("feature-my-branch"),
487+
kj::str("feature/my-branch")),
484488
},
485489
nullptr);
486490
info.copyTo(infoBuilder);
@@ -491,12 +495,20 @@ KJ_TEST("Read/Write Onset works") {
491495
KJ_ASSERT(fetchInfo2.method == kj::HttpMethod::GET);
492496
KJ_ASSERT(fetchInfo2.url == "https://example.com"_kj);
493497
KJ_ASSERT(info2.workerInfo.executionModel == ExecutionModel::STATELESS);
498+
auto& preview2 = KJ_ASSERT_NONNULL(info2.workerInfo.preview);
499+
KJ_ASSERT(preview2.id == "63bafce9179948688866bb22268eb1c6"_kj);
500+
KJ_ASSERT(preview2.slug == "feature-my-branch"_kj);
501+
KJ_ASSERT(preview2.name == "feature/my-branch"_kj);
494502

495503
Onset info3 = info.clone();
496504
FetchEventInfo& fetchInfo3 = KJ_ASSERT_NONNULL(info3.info.tryGet<FetchEventInfo>());
497505
KJ_ASSERT(fetchInfo3.method == kj::HttpMethod::GET);
498506
KJ_ASSERT(fetchInfo3.url == "https://example.com"_kj);
499507
KJ_ASSERT(info3.workerInfo.executionModel == ExecutionModel::STATELESS);
508+
auto& preview3 = KJ_ASSERT_NONNULL(info3.workerInfo.preview);
509+
KJ_ASSERT(preview3.id == "63bafce9179948688866bb22268eb1c6"_kj);
510+
KJ_ASSERT(preview3.slug == "feature-my-branch"_kj);
511+
KJ_ASSERT(preview3.name == "feature/my-branch"_kj);
500512
}
501513

502514
KJ_TEST("Read/Write Outcome works") {

src/workerd/io/trace.c++

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1242,11 +1242,20 @@ kj::Maybe<kj::String> getEntrypointFromReader(const rpc::Trace::Onset::Reader& r
12421242
}
12431243
return kj::none;
12441244
}
1245+
1246+
kj::Maybe<tracing::TracePreview> getPreviewFromReader(const rpc::Trace::Onset::Reader& reader) {
1247+
if (reader.hasPreview()) {
1248+
return tracing::TracePreview(reader.getPreview());
1249+
}
1250+
return kj::none;
1251+
}
1252+
12451253
Onset::WorkerInfo getWorkerInfoFromReader(const rpc::Trace::Onset::Reader& reader) {
12461254
return Onset::WorkerInfo{
12471255
.executionModel = reader.getExecutionModel(),
12481256
.scriptName = getScriptNameFromReader(reader),
12491257
.scriptVersion = getScriptVersionFromReader(reader),
1258+
.preview = getPreviewFromReader(reader),
12501259
.dispatchNamespace = getDispatchNamespaceFromReader(reader),
12511260
.scriptId = getScriptIdFromReader(reader),
12521261
.scriptTags = getScriptTagsFromReader(reader),
@@ -1292,6 +1301,9 @@ void Onset::copyTo(rpc::Trace::Onset::Builder builder) const {
12921301
KJ_IF_SOME(e, workerInfo.entrypoint) {
12931302
builder.setEntryPoint(e);
12941303
}
1304+
KJ_IF_SOME(p, workerInfo.preview) {
1305+
p.copyTo(builder.initPreview());
1306+
}
12951307
auto infoBuilder = builder.initInfo();
12961308
writeOnsetInfo(info, infoBuilder);
12971309

@@ -1306,6 +1318,7 @@ Onset::WorkerInfo Onset::WorkerInfo::clone() const {
13061318
.executionModel = executionModel,
13071319
.scriptName = mapCopyString(scriptName),
13081320
.scriptVersion = scriptVersion.map([](auto& version) { return capnp::clone(*version); }),
1321+
.preview = preview.map([](auto& preview) { return preview.clone(); }),
13091322
.dispatchNamespace = mapCopyString(dispatchNamespace),
13101323
.scriptId = mapCopyString(scriptId),
13111324
.scriptTags =

src/workerd/io/trace.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -772,6 +772,7 @@ struct Onset final {
772772
ExecutionModel executionModel = ExecutionModel::STATELESS;
773773
kj::Maybe<kj::String> scriptName;
774774
kj::Maybe<kj::Own<ScriptVersion::Reader>> scriptVersion;
775+
kj::Maybe<TracePreview> preview;
775776
kj::Maybe<kj::String> dispatchNamespace;
776777
kj::Maybe<kj::String> scriptId;
777778
kj::Maybe<kj::Array<kj::String>> scriptTags;

src/workerd/io/tracer.c++

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -363,6 +363,7 @@ void WorkerTracer::setEventInfoInternal(
363363
trace->scriptVersion.map([](auto& scriptVersion) -> kj::Own<ScriptVersion::Reader> {
364364
return capnp::clone(*scriptVersion);
365365
}),
366+
.preview = trace->preview.map([](auto& preview) { return preview.clone(); }),
366367
.dispatchNamespace = mapCopyString(trace->dispatchNamespace),
367368
.scriptId = mapCopyString(trace->scriptId),
368369
.scriptTags = KJ_MAP(tag, trace->scriptTags) { return kj::str(tag); },

src/workerd/io/worker-interface.capnp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,7 @@ struct Trace @0x8e8d911203762d34 {
267267
scriptId @4 :Text;
268268
scriptTags @5 :List(Text);
269269
entryPoint @6 :Text;
270+
preview @10 :Preview;
270271

271272
struct Info { union {
272273
fetch @0 :FetchEventInfo;

0 commit comments

Comments
 (0)