Class: OpenCensus::Tags::Formatters::Binary
- Inherits:
-
Object
- Object
- OpenCensus::Tags::Formatters::Binary
- 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
Defined Under Namespace
Classes: BinaryFormatterError
Instance Method Summary collapse
-
#deserialize(binary) ⇒ TagMap
Deserialize binary data into a TagMap object.
-
#serialize(tags_context) ⇒ Object
Serialize TagMap object.
Instance Method Details
#deserialize(binary) ⇒ TagMap
Deserialize binary data into a TagMap object.
tag key, value size in varint more then then unsigned int32.
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
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 binary = [int_to_varint(VERSION_ID)] .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 |