Method: TraceView::API::Logging#log_event

Defined in:
lib/traceview/api/logging.rb

#log_event(layer, label, event, opts = {}) ⇒ Object

Internal: Report an event.

Attributes

  • layer - The layer the reported event belongs to

  • label - The label for the reported event. See API documentation for reserved labels and usage.

  • event - The pre-existing TraceView context event. See TraceView::Context.createEvent

  • opts - A hash containing key/value pairs that will be reported along with this event (optional).

Example

entry = TraceView::Context.createEvent
TraceView::API.log_event(:layer_name, 'entry',  entry_event, { :id => @user.id })

exit_event = TraceView::Context.createEvent
exit_event.addEdge(entry.)
TraceView::API.log_event(:layer_name, 'exit',  exit_event, { :id => @user.id })


246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
# File 'lib/traceview/api/logging.rb', line 246

def log_event(layer, label, event, opts = {})
  return unless TraceView.loaded

  event.addInfo(TV_STR_LAYER, layer.to_s.freeze) if layer
  event.addInfo(TV_STR_LABEL, label.to_s.freeze)

  TraceView.layer = layer.to_sym if label == :entry
  TraceView.layer = nil          if label == :exit

  opts.each do |k, v|
    value = nil

    next unless valid_key? k

    if [Integer, Float, Fixnum, NilClass, String].include?(v.class)
      value = v
    elsif v.class == Set
      value = v.to_a.to_s
    else
      value = v.to_s if v.respond_to?(:to_s)
    end

    begin
      event.addInfo(k.to_s, value)
    rescue ArgumentError => e
      TraceView.logger.debug "[TraceView/debug] Couldn't add event KV: #{k} => #{v.class}"
      TraceView.logger.debug "[TraceView/debug] #{e.message}"
    end
  end if !opts.nil? && opts.any?

  TraceView::Reporter.sendReport(event)
end