diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/core/lib/channel/channel_trace.cc | 38 | ||||
-rw-r--r-- | src/core/lib/channel/channel_trace.h | 22 | ||||
-rw-r--r-- | src/core/lib/surface/channel.cc | 1 | ||||
-rw-r--r-- | src/proto/grpc/channelz/channelz.proto | 2 |
4 files changed, 42 insertions, 21 deletions
diff --git a/src/core/lib/channel/channel_trace.cc b/src/core/lib/channel/channel_trace.cc index bbbf59cdf9..e0f495284f 100644 --- a/src/core/lib/channel/channel_trace.cc +++ b/src/core/lib/channel/channel_trace.cc @@ -41,17 +41,19 @@ namespace grpc_core { ChannelTrace::TraceEvent::TraceEvent( - grpc_slice data, RefCountedPtr<ChannelTrace> referenced_tracer, - ReferencedType type) - : data_(data), + Severity severity, grpc_slice data, + RefCountedPtr<ChannelTrace> referenced_tracer, ReferencedType type) + : severity_(severity), + data_(data), timestamp_(grpc_millis_to_timespec(grpc_core::ExecCtx::Get()->Now(), GPR_CLOCK_REALTIME)), next_(nullptr), referenced_tracer_(std::move(referenced_tracer)), referenced_type_(type) {} -ChannelTrace::TraceEvent::TraceEvent(grpc_slice data) - : data_(data), +ChannelTrace::TraceEvent::TraceEvent(Severity severity, grpc_slice data) + : severity_(severity), + data_(data), timestamp_(grpc_millis_to_timespec(grpc_core::ExecCtx::Get()->Now(), GPR_CLOCK_REALTIME)), next_(nullptr) {} @@ -107,25 +109,27 @@ void ChannelTrace::AddTraceEventHelper(TraceEvent* new_trace_event) { } } -void ChannelTrace::AddTraceEventReferencingChannel( - grpc_slice data, RefCountedPtr<ChannelTrace> referenced_tracer) { +void ChannelTrace::AddTraceEvent(Severity severity, grpc_slice data) { if (max_list_size_ == 0) return; // tracing is disabled if max_events == 0 - // create and fill up the new event - AddTraceEventHelper( - New<TraceEvent>(data, std::move(referenced_tracer), Channel)); + AddTraceEventHelper(New<TraceEvent>(severity, data)); } -void ChannelTrace::AddTraceEventReferencingSubchannel( - grpc_slice data, RefCountedPtr<ChannelTrace> referenced_tracer) { +void ChannelTrace::AddTraceEventReferencingChannel( + Severity severity, grpc_slice data, + RefCountedPtr<ChannelTrace> referenced_tracer) { if (max_list_size_ == 0) return; // tracing is disabled if max_events == 0 // create and fill up the new event AddTraceEventHelper( - New<TraceEvent>(data, std::move(referenced_tracer), Subchannel)); + New<TraceEvent>(severity, data, std::move(referenced_tracer), Channel)); } -void ChannelTrace::AddTraceEvent(grpc_slice data) { +void ChannelTrace::AddTraceEventReferencingSubchannel( + Severity severity, grpc_slice data, + RefCountedPtr<ChannelTrace> referenced_tracer) { if (max_list_size_ == 0) return; // tracing is disabled if max_events == 0 - AddTraceEventHelper(New<TraceEvent>(data)); + // create and fill up the new event + AddTraceEventHelper(New<TraceEvent>( + severity, data, std::move(referenced_tracer), Subchannel)); } namespace { @@ -147,6 +151,10 @@ void ChannelTrace::TraceEvent::RenderTraceEvent(grpc_json* json) const { json_iterator = grpc_json_create_child(json_iterator, json, "description", grpc_slice_to_c_string(data_), GRPC_JSON_STRING, true); + char* trace_level_str; + gpr_asprintf(&trace_level_str, "%d", static_cast<int32_t>(severity_)); + json_iterator = grpc_json_create_child( + json_iterator, json, "severity", trace_level_str, GRPC_JSON_NUMBER, true); json_iterator = grpc_json_create_child(json_iterator, json, "timestamp", fmt_time(timestamp_), GRPC_JSON_STRING, true); diff --git a/src/core/lib/channel/channel_trace.h b/src/core/lib/channel/channel_trace.h index 0c46ede600..7243096617 100644 --- a/src/core/lib/channel/channel_trace.h +++ b/src/core/lib/channel/channel_trace.h @@ -40,8 +40,15 @@ class ChannelTrace : public RefCounted<ChannelTrace> { // returns the tracer's uuid intptr_t GetUuid() const; + enum Severity { + Unset = 0, // never to be used + Info, // we start at 1 to avoid using proto default values + Warning, + Error + }; + // Adds a new trace event to the tracing object - void AddTraceEvent(grpc_slice data); + void AddTraceEvent(Severity severity, grpc_slice data); // Adds a new trace event to the tracing object. This trace event refers to a // an event on a child of the channel. For example, if this channel has @@ -51,15 +58,18 @@ class ChannelTrace : public RefCounted<ChannelTrace> { // TODO(ncteisen): Once channelz is implemented, the events should reference // the overall channelz object, not just the ChannelTrace object. void AddTraceEventReferencingChannel( - grpc_slice data, RefCountedPtr<ChannelTrace> referenced_tracer); + Severity severity, grpc_slice data, + RefCountedPtr<ChannelTrace> referenced_tracer); void AddTraceEventReferencingSubchannel( - grpc_slice data, RefCountedPtr<ChannelTrace> referenced_tracer); + Severity severity, grpc_slice data, + RefCountedPtr<ChannelTrace> referenced_tracer); // Returns the tracing data rendered as a grpc json string. // The string is owned by the caller and must be freed. char* RenderTrace() const; private: + // Types of objects that can be references by trace events. enum ReferencedType { Channel, Subchannel }; // Private class to encapsulate all the data and bookkeeping needed for a // a trace event. @@ -68,12 +78,13 @@ class ChannelTrace : public RefCounted<ChannelTrace> { // Constructor for a TraceEvent that references a different channel. // TODO(ncteisen): once channelz is implemented, this should reference the // overall channelz object, not just the ChannelTrace object - TraceEvent(grpc_slice data, RefCountedPtr<ChannelTrace> referenced_tracer, + TraceEvent(Severity severity, grpc_slice data, + RefCountedPtr<ChannelTrace> referenced_tracer, ReferencedType type); // Constructor for a TraceEvent that does not reverence a different // channel. - TraceEvent(grpc_slice data); + TraceEvent(Severity severity, grpc_slice data); ~TraceEvent(); @@ -86,6 +97,7 @@ class ChannelTrace : public RefCounted<ChannelTrace> { void set_next(TraceEvent* next) { next_ = next; } private: + Severity severity_; grpc_slice data_; gpr_timespec timestamp_; TraceEvent* next_; diff --git a/src/core/lib/surface/channel.cc b/src/core/lib/surface/channel.cc index 463e6121d0..cecc15b2df 100644 --- a/src/core/lib/surface/channel.cc +++ b/src/core/lib/surface/channel.cc @@ -184,6 +184,7 @@ grpc_channel* grpc_channel_create_with_builder( channel->tracer = grpc_core::MakeRefCounted<grpc_core::ChannelTrace>( channel_tracer_max_nodes); channel->tracer->AddTraceEvent( + grpc_core::ChannelTrace::Severity::Info, grpc_slice_from_static_string("Channel created")); return channel; } diff --git a/src/proto/grpc/channelz/channelz.proto b/src/proto/grpc/channelz/channelz.proto index 532ec7978f..851f301536 100644 --- a/src/proto/grpc/channelz/channelz.proto +++ b/src/proto/grpc/channelz/channelz.proto @@ -98,7 +98,7 @@ message ChannelTraceEvent { // the severity of the trace event. Options are INFO, WARNING, and ERROR, // which are represented by the values 1, 2, and 3, respectively. Any other // value will be treated as ERROR. - int32 trace_level = 2; + int32 severity = 2; // When this event occurred. google.protobuf.Timestamp timestamp = 3; // ref of referenced channel or subchannel. |