Skip to content
9 changes: 9 additions & 0 deletions src/workerd/io/trace-stream.c++
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ namespace {
V(OK, "ok") \
V(ONSET, "onset") \
V(OUTCOME, "outcome") \
V(PREVIEW, "preview") \
V(QUEUE, "queue") \
V(QUEUENAME, "queueName") \
V(RAWSIZE, "rawSize") \
Expand All @@ -81,6 +82,7 @@ namespace {
V(SPANOPEN, "spanOpen") \
V(STACK, "stack") \
V(STATUSCODE, "statusCode") \
V(SLUG, "slug") \
V(STREAMDIAGEVENT, "streamDiagEvent") \
V(STREAMDIAGNOSTIC, "streamDiagnostic") \
V(TAG, "tag") \
Expand Down Expand Up @@ -366,6 +368,13 @@ jsg::JsValue ToJs(jsg::Lock& js, const Onset& onset, StringCache& cache) {
}
obj.set(js, SCRIPTVERSION_STR, vobj);
}
KJ_IF_SOME(preview, onset.workerInfo.preview) {
auto pobj = js.obj();
pobj.set(js, ID_STR, js.str(preview.id));
pobj.set(js, SLUG_STR, js.str(preview.slug));
pobj.set(js, NAME_STR, js.str(preview.name));
obj.set(js, PREVIEW_STR, pobj);
}

KJ_SWITCH_ONEOF(onset.info) {
KJ_CASE_ONEOF(fetch, FetchEventInfo) {
Expand Down
10 changes: 10 additions & 0 deletions src/workerd/io/trace-test.c++
Original file line number Diff line number Diff line change
Expand Up @@ -481,6 +481,8 @@ KJ_TEST("Read/Write Onset works") {
Onset info(staticSpanId, Onset::Info(kj::mv(fetchInfo)),
{
.scriptName = kj::str("foo"),
.preview = TracePreview(kj::str("63bafce9179948688866bb22268eb1c6"),
kj::str("feature-my-branch"), kj::str("feature/my-branch")),
},
nullptr);
info.copyTo(infoBuilder);
Expand All @@ -491,12 +493,20 @@ KJ_TEST("Read/Write Onset works") {
KJ_ASSERT(fetchInfo2.method == kj::HttpMethod::GET);
KJ_ASSERT(fetchInfo2.url == "https://example.com"_kj);
KJ_ASSERT(info2.workerInfo.executionModel == ExecutionModel::STATELESS);
auto& preview2 = KJ_ASSERT_NONNULL(info2.workerInfo.preview);
KJ_ASSERT(preview2.id == "63bafce9179948688866bb22268eb1c6"_kj);
KJ_ASSERT(preview2.slug == "feature-my-branch"_kj);
KJ_ASSERT(preview2.name == "feature/my-branch"_kj);

Onset info3 = info.clone();
FetchEventInfo& fetchInfo3 = KJ_ASSERT_NONNULL(info3.info.tryGet<FetchEventInfo>());
KJ_ASSERT(fetchInfo3.method == kj::HttpMethod::GET);
KJ_ASSERT(fetchInfo3.url == "https://example.com"_kj);
KJ_ASSERT(info3.workerInfo.executionModel == ExecutionModel::STATELESS);
auto& preview3 = KJ_ASSERT_NONNULL(info3.workerInfo.preview);
KJ_ASSERT(preview3.id == "63bafce9179948688866bb22268eb1c6"_kj);
KJ_ASSERT(preview3.slug == "feature-my-branch"_kj);
KJ_ASSERT(preview3.name == "feature/my-branch"_kj);
}

KJ_TEST("Read/Write Outcome works") {
Expand Down
13 changes: 13 additions & 0 deletions src/workerd/io/trace.c++
Original file line number Diff line number Diff line change
Expand Up @@ -1265,11 +1265,20 @@ kj::Maybe<kj::String> getEntrypointFromReader(const rpc::Trace::Onset::Reader& r
}
return kj::none;
}

kj::Maybe<tracing::TracePreview> getPreviewFromReader(const rpc::Trace::Onset::Reader& reader) {
if (reader.hasPreview()) {
return tracing::TracePreview(reader.getPreview());
}
return kj::none;
}

Onset::WorkerInfo getWorkerInfoFromReader(const rpc::Trace::Onset::Reader& reader) {
return Onset::WorkerInfo{
.executionModel = reader.getExecutionModel(),
.scriptName = getScriptNameFromReader(reader),
.scriptVersion = getScriptVersionFromReader(reader),
.preview = getPreviewFromReader(reader),
.dispatchNamespace = getDispatchNamespaceFromReader(reader),
.scriptId = getScriptIdFromReader(reader),
.scriptTags = getScriptTagsFromReader(reader),
Expand Down Expand Up @@ -1315,6 +1324,9 @@ void Onset::copyTo(rpc::Trace::Onset::Builder builder) const {
KJ_IF_SOME(e, workerInfo.entrypoint) {
builder.setEntryPoint(e);
}
KJ_IF_SOME(p, workerInfo.preview) {
p.copyTo(builder.initPreview());
}
auto infoBuilder = builder.initInfo();
writeOnsetInfo(info, infoBuilder);

Expand All @@ -1329,6 +1341,7 @@ Onset::WorkerInfo Onset::WorkerInfo::clone() const {
.executionModel = executionModel,
.scriptName = mapCopyString(scriptName),
.scriptVersion = scriptVersion.map([](auto& version) { return capnp::clone(*version); }),
.preview = preview.map([](auto& preview) { return preview.clone(); }),
.dispatchNamespace = mapCopyString(dispatchNamespace),
.scriptId = mapCopyString(scriptId),
.scriptTags =
Expand Down
1 change: 1 addition & 0 deletions src/workerd/io/trace.h
Original file line number Diff line number Diff line change
Expand Up @@ -782,6 +782,7 @@ struct Onset final {
ExecutionModel executionModel = ExecutionModel::STATELESS;
kj::Maybe<kj::String> scriptName;
kj::Maybe<kj::Own<ScriptVersion::Reader>> scriptVersion;
kj::Maybe<TracePreview> preview;
kj::Maybe<kj::String> dispatchNamespace;
kj::Maybe<kj::String> scriptId;
kj::Maybe<kj::Array<kj::String>> scriptTags;
Expand Down
1 change: 1 addition & 0 deletions src/workerd/io/tracer.c++
Original file line number Diff line number Diff line change
Expand Up @@ -363,6 +363,7 @@ void WorkerTracer::setEventInfoInternal(
trace->scriptVersion.map([](auto& scriptVersion) -> kj::Own<ScriptVersion::Reader> {
return capnp::clone(*scriptVersion);
}),
.preview = trace->preview.map([](auto& preview) { return preview.clone(); }),
.dispatchNamespace = mapCopyString(trace->dispatchNamespace),
.scriptId = mapCopyString(trace->scriptId),
.scriptTags = KJ_MAP(tag, trace->scriptTags) { return kj::str(tag); },
Expand Down
1 change: 1 addition & 0 deletions src/workerd/io/worker-interface.capnp
Original file line number Diff line number Diff line change
Expand Up @@ -271,6 +271,7 @@ struct Trace @0x8e8d911203762d34 {
scriptId @4 :Text;
scriptTags @5 :List(Text);
entryPoint @6 :Text;
preview @10 :TracePreviewInfo;

struct Info { union {
fetch @0 :FetchEventInfo;
Expand Down
Loading