diff --git a/src/workerd/api/trace.c++ b/src/workerd/api/trace.c++ index f8bb9b66eee..19021db39b0 100644 --- a/src/workerd/api/trace.c++ +++ b/src/workerd/api/trace.c++ @@ -175,6 +175,10 @@ kj::Maybe TraceItem::getScriptName() { return trace->scriptName; } +jsg::Optional TraceItem::getDispatchNamespace() { + return trace->dispatchNamespace; +} + kj::StringPtr TraceItem::getOutcome() { // TODO(cleanup): Add to enumToStr() to capnp? auto enums = capnp::Schema::from().getEnumerants(); diff --git a/src/workerd/api/trace.h b/src/workerd/api/trace.h index 345803c0291..1571a589b11 100644 --- a/src/workerd/api/trace.h +++ b/src/workerd/api/trace.h @@ -61,6 +61,7 @@ class TraceItem final: public jsg::Object { kj::Array> getLogs(); kj::Array> getExceptions(); kj::Maybe getScriptName(); + jsg::Optional getDispatchNamespace(); kj::StringPtr getOutcome(); uint getCpuTime(); @@ -72,6 +73,7 @@ class TraceItem final: public jsg::Object { JSG_READONLY_INSTANCE_PROPERTY(logs, getLogs); JSG_READONLY_INSTANCE_PROPERTY(exceptions, getExceptions); JSG_READONLY_INSTANCE_PROPERTY(scriptName, getScriptName); + JSG_READONLY_INSTANCE_PROPERTY(dispatchNamespace, getDispatchNamespace); JSG_READONLY_INSTANCE_PROPERTY(outcome, getOutcome); } diff --git a/src/workerd/io/trace.c++ b/src/workerd/io/trace.c++ index 6798d53f94f..41eeca3a173 100644 --- a/src/workerd/io/trace.c++ +++ b/src/workerd/io/trace.c++ @@ -100,8 +100,11 @@ Trace::Log::Log(kj::Date timestamp, LogLevel logLevel, kj::String message) Trace::Exception::Exception(kj::Date timestamp, kj::String name, kj::String message) : timestamp(timestamp), name(kj::mv(name)), message(kj::mv(message)) {} -Trace::Trace(kj::Maybe stableId, kj::Maybe scriptName) - : stableId(kj::mv(stableId)), scriptName(kj::mv(scriptName)) {} +Trace::Trace(kj::Maybe stableId, kj::Maybe scriptName, + kj::Maybe dispatchNamespace) + : stableId(kj::mv(stableId)), + scriptName(kj::mv(scriptName)), + dispatchNamespace(kj::mv(dispatchNamespace)) {} Trace::Trace(rpc::Trace::Reader reader) { mergeFrom(reader, PipelineLogLevel::FULL); } @@ -129,6 +132,9 @@ void Trace::copyTo(rpc::Trace::Builder builder) { KJ_IF_MAYBE(s, scriptName) { builder.setScriptName(*s); } + KJ_IF_MAYBE(s, dispatchNamespace) { + builder.setDispatchNamespace(*s); + } builder.setEventTimestampNs((eventTimestamp - kj::UNIX_EPOCH) / kj::NANOSECONDS); auto eventInfoBuilder = builder.initEventInfo(); @@ -189,6 +195,10 @@ void Trace::mergeFrom(rpc::Trace::Reader reader, PipelineLogLevel pipelineLogLev scriptName = kj::str(reader.getScriptName()); } + if (reader.hasDispatchNamespace()) { + dispatchNamespace = kj::str(reader.getDispatchNamespace()); + } + eventTimestamp = kj::UNIX_EPOCH + reader.getEventTimestampNs() * kj::NANOSECONDS; if (pipelineLogLevel == PipelineLogLevel::NONE) { @@ -328,8 +338,8 @@ kj::Promise>> PipelineTracer::onComplete() { kj::Own PipelineTracer::makeWorkerTracer( PipelineLogLevel pipelineLogLevel, kj::Maybe stableId, - kj::Maybe scriptName) { - auto trace = kj::refcounted(kj::mv(stableId), kj::mv(scriptName)); + kj::Maybe scriptName, kj::Maybe dispatchNamespace) { + auto trace = kj::refcounted(kj::mv(stableId), kj::mv(scriptName), kj::mv(dispatchNamespace)); traces.add(kj::addRef(*trace)); return kj::refcounted(kj::addRef(*this), kj::mv(trace), pipelineLogLevel); } @@ -340,7 +350,7 @@ WorkerTracer::WorkerTracer(kj::Own parentPipeline, parentPipeline(kj::mv(parentPipeline)) {} WorkerTracer::WorkerTracer(PipelineLogLevel pipelineLogLevel) : pipelineLogLevel(pipelineLogLevel), - trace(kj::refcounted(nullptr, nullptr)) {} + trace(kj::refcounted(nullptr, nullptr, nullptr)) {} void WorkerTracer::log(kj::Date timestamp, LogLevel logLevel, kj::String message) { if (trace->exceededLogLimit) { diff --git a/src/workerd/io/trace.h b/src/workerd/io/trace.h index 834858c6172..3191a4f3d02 100644 --- a/src/workerd/io/trace.h +++ b/src/workerd/io/trace.h @@ -44,7 +44,7 @@ enum class PipelineLogLevel { class Trace final : public kj::Refcounted { // Collects trace information about the handling of a worker/pipline fetch event. public: - explicit Trace(kj::Maybe stableId, kj::Maybe scriptName); + explicit Trace(kj::Maybe stableId, kj::Maybe scriptName, kj::Maybe dispatchNamespace); Trace(rpc::Trace::Reader reader); ~Trace() noexcept(false); KJ_DISALLOW_COPY(Trace); @@ -157,6 +157,7 @@ class Trace final : public kj::Refcounted { // trace, if any. kj::Maybe scriptName; + kj::Maybe dispatchNamespace; kj::Vector logs; kj::Vector exceptions; @@ -403,7 +404,8 @@ class PipelineTracer final : public kj::Refcounted { kj::Own makeWorkerTracer(PipelineLogLevel pipelineLogLevel, kj::Maybe stableId, - kj::Maybe scriptName); + kj::Maybe scriptName, + kj::Maybe dispatchNamespace); // Makes a tracer for a worker stage. private: diff --git a/src/workerd/io/worker-interface.capnp b/src/workerd/io/worker-interface.capnp index 36c8cb864f6..91b8db7e066 100644 --- a/src/workerd/io/worker-interface.capnp +++ b/src/workerd/io/worker-interface.capnp @@ -74,6 +74,8 @@ struct Trace @0x8e8d911203762d34 { cpuTime @10 :UInt64; wallTime @11 :UInt64; + + dispatchNamespace @12 :Text; } struct ScheduledRun @0xd98fc1ae5c8095d0 {