Module: Gruf::StackdriverTrace::Label

Included in:
ClientInterceptor, ServerInterceptor
Defined in:
lib/gruf/stackdriver_trace/label.rb

Instance Method Summary collapse

Instance Method Details

#get_host(request) ⇒ Object



44
45
46
47
48
49
50
51
# File 'lib/gruf/stackdriver_trace/label.rb', line 44

def get_host(request)
  if request_context?(request)
    # get request host from GRPC::ActiveCall::InterceptableView
    request.call.instance_variable_get(:@wrapped).try(:peer)
  else
    request.active_call.peer
  end
end

#get_ua(request) ⇒ Object



39
40
41
42
# File 'lib/gruf/stackdriver_trace/label.rb', line 39

def get_ua(request)
   = request_context?(request) ? request. : request.active_call.
  ['user-agent'] || nil
end

#label_keyObject



11
12
13
# File 'lib/gruf/stackdriver_trace/label.rb', line 11

def label_key
  Google::Cloud::Trace::LabelKey
end

#request_context?(request) ⇒ Boolean

Returns:

  • (Boolean)


53
54
55
# File 'lib/gruf/stackdriver_trace/label.rb', line 53

def request_context?(request)
  request.is_a?(Gruf::Outbound::RequestContext)
end

#set_basic_labels(labels, request, method_name) ⇒ Object



19
20
21
22
23
24
25
26
27
# File 'lib/gruf/stackdriver_trace/label.rb', line 19

def set_basic_labels(labels, request, method_name)
  set_label(labels, label_key::AGENT, Gruf::StackdriverTrace::AGENT_NAME)
  set_label(labels, label_key::HTTP_HOST, get_host(request))
  set_label(labels, label_key::HTTP_CLIENT_PROTOCOL, 'http2')
  set_label(labels, label_key::HTTP_USER_AGENT, get_ua(request))
  set_label(labels, label_key::HTTP_URL, method_name)
  set_label(labels, label_key::PID, ::Process.pid)
  set_label(labels, label_key::TID, ::Thread.current.object_id)
end

#set_grpc_status_code(labels, status_code) ⇒ Object



35
36
37
# File 'lib/gruf/stackdriver_trace/label.rb', line 35

def set_grpc_status_code(labels, status_code)
  set_label(labels, label_key::RPC_STATUS_CODE, status_code_to_label(status_code))
end

#set_label(labels, key, value) ⇒ Object



15
16
17
# File 'lib/gruf/stackdriver_trace/label.rb', line 15

def set_label(labels, key, value)
  labels[key] = value.to_s
end

#set_stack_trace(span, skip_frames) ⇒ Object



29
30
31
32
33
# File 'lib/gruf/stackdriver_trace/label.rb', line 29

def set_stack_trace(span, skip_frames)
  tc = span.trace.trace_context
  return unless tc.capture_stack?
  label_key.set_stack_trace(span.labels, skip_frames: skip_frames)
end

#status_code_to_label(code) ⇒ Object



4
5
6
7
8
9
# File 'lib/gruf/stackdriver_trace/label.rb', line 4

def status_code_to_label(code)
  @lookup ||= Hash[GRPC::Core::StatusCodes.constants.map do |c|
    [GRPC::Core::StatusCodes.const_get(c), c.to_s]
  end]
  @lookup[code]
end