Class: OpenCensus::Tags::Formatters::Binary

Inherits:
Object
  • Object
show all
Defined in:
lib/opencensus/tags/formatters/binary.rb

Overview

This formatter serializes and deserializes tags context according to the OpenCensus' BinaryEncoding specification. See documentation.

formatter = OpenCensus::Tags::Formatters::Binary.new

tag_map = OpenCensus::Tags::TagMap.new(=> \"val1") binary = formatter.serialize tag_map # "\x00\x00\x04key1\x04val1"

formatter = OpenCensus::Tags::Formatters::Binary.new

binary = "\x00\x00\x04key1\x04val1" tag_map = formatter.deserialize binary

Examples:

Serialize

Deserialize

Defined Under Namespace

Classes: BinaryFormatterError

Instance Method Summary collapse

Instance Method Details

#deserialize(binary) ⇒ TagMap

Deserialize binary data into a TagMap object.

tag key, value size in varint more then then unsigned int32.

Parameters:

  • binary (String)

Returns:

Raises:



70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# File 'lib/opencensus/tags/formatters/binary.rb', line 70

def deserialize binary
  return TagMap.new if binary.nil? || binary.empty?

  io = StringIO.new binary
  version_id = io.getc.unpack("C").first
  unless version_id == VERSION_ID
    raise BinaryFormatterError, "invalid version id"
  end

  tag_map = TagMap.new

  loop do
    break if io.eof?
    tag_field_id = io.getc.unpack("C").first
    break unless tag_field_id == TAG_FIELD_ID

    key_length = varint_to_int io
    key = io.gets key_length
    value_length = varint_to_int io
    value = io.gets value_length
    tag_map[key] = value
  end

  io.close
  tag_map
end

#serialize(tags_context) ⇒ Object

Serialize TagMap object

Parameters:



48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/opencensus/tags/formatters/binary.rb', line 48

def serialize tags_context
  binary = [int_to_varint(VERSION_ID)]

  tags_context.each do |key, value|
    binary << int_to_varint(TAG_FIELD_ID)
    binary << int_to_varint(key.length)
    binary << key.encode(Encoding::UTF_8)
    binary << int_to_varint(value ? value.length : 0)
    binary << value.to_s.encode(Encoding::UTF_8)
  end

  binary = binary.join
  binary.length > TAG_MAP_SERIALIZED_SIZE_LIMIT ? nil : binary
end