logstash-codec-protobuf 1.2.1 → 1.2.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,7 +1,7 @@
1
1
  Gem::Specification.new do |s|
2
2
 
3
3
  s.name = 'logstash-codec-protobuf'
4
- s.version = '1.2.1'
4
+ s.version = '1.2.2'
5
5
  s.licenses = ['Apache License (2.0)']
6
6
  s.summary = "Reads protobuf messages and converts to Logstash Events"
7
7
  s.description = "This gem is a logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/plugin install gemname. This gem is not a stand-alone program"
@@ -82,7 +82,7 @@ describe LogStash::Codecs::Protobuf do
82
82
  "class_name" => "Unicorn", "include_path" => [pb_include_path + '/pb3/unicorn_pb.rb'], "protobuf_version" => 3)
83
83
  }
84
84
 
85
- it "should return an event from protobuf encoded data" do
85
+ it "should return an event from protobuf data" do
86
86
 
87
87
  unicorn_class = Google::Protobuf::DescriptorPool.generated_pool.lookup("Unicorn").msgclass
88
88
  data = {:name => 'Pinkie', :age => 18, :is_pegasus => false, :favourite_numbers => [4711,23], :fur_colour => Colour::PINK,
@@ -107,7 +107,7 @@ describe LogStash::Codecs::Protobuf do
107
107
  #### Test case 2: decode nested protobuf ####################################################################################################################
108
108
  let(:plugin_unicorn) { LogStash::Codecs::Protobuf.new("class_name" => "Unicorn", "include_path" => [pb_include_path + '/pb3/unicorn_pb.rb'], "protobuf_version" => 3) }
109
109
 
110
- it "should return an event from protobuf encoded data with nested classes" do
110
+ it "should return an event from protobuf data with nested classes" do
111
111
  father = unicorn_class.new({:name=> "Sparkle", :age => 50, :fur_colour => 3 })
112
112
  data = {:name => 'Glitter', :fur_colour => Colour::GLITTER, :father => father}
113
113
 
@@ -134,7 +134,7 @@ describe LogStash::Codecs::Protobuf do
134
134
  plugin_3.register
135
135
  end
136
136
 
137
- it "should return an event from protobuf encoded data with nested classes" do
137
+ it "should return an event from protobuf data with nested classes" do
138
138
 
139
139
  probe_result_class = Google::Protobuf::DescriptorPool.generated_pool.lookup("ProbeResult").msgclass
140
140
  ping_result_class = Google::Protobuf::DescriptorPool.generated_pool.lookup("PingIPv4Result").msgclass
@@ -166,7 +166,7 @@ describe LogStash::Codecs::Protobuf do
166
166
  plugin_4.register
167
167
  end
168
168
 
169
- it "should return an event from protobuf encoded data with nested classes" do
169
+ it "should return an event from protobuf data with nested classes" do
170
170
 
171
171
 
172
172
  pbdns_message_class = Google::Protobuf::DescriptorPool.generated_pool.lookup("PBDNSMessage").msgclass
@@ -247,7 +247,7 @@ describe LogStash::Codecs::Protobuf do
247
247
  plugin_5.register
248
248
  end
249
249
 
250
- it "should return an event from protobuf encoded data with nested classes" do
250
+ it "should return an event from protobuf data with nested classes" do
251
251
  integertest_class = Google::Protobuf::DescriptorPool.generated_pool.lookup("com.foo.bar.IntegerTestMessage").msgclass
252
252
  integertest_object = integertest_class.new({:response_time => 500})
253
253
  bin = integertest_class.encode(integertest_object)
@@ -283,7 +283,7 @@ describe LogStash::Codecs::Protobuf do
283
283
  plugin.execution_context = execution_context
284
284
  end
285
285
 
286
- it "should return an event from protobuf encoded data" do
286
+ it "should return an event from protobuf data" do
287
287
 
288
288
  header_class = Google::Protobuf::DescriptorPool.generated_pool.lookup("Header").msgclass
289
289
  header_data = {:name => {'a' => 'b'}}
@@ -303,75 +303,7 @@ describe LogStash::Codecs::Protobuf do
303
303
  end # context
304
304
 
305
305
 
306
- context "#encodePB3-a" do
307
306
 
308
- #### Test case 3: encode simple protobuf ####################################################################################################################
309
-
310
- require_relative '../helpers/pb3/unicorn_pb.rb'
311
-
312
- subject do
313
- next LogStash::Codecs::Protobuf.new("class_name" => "Unicorn", "include_path" => [pb_include_path + '/pb3/unicorn_pb.rb'], "protobuf_version" => 3)
314
- end
315
-
316
- event3 = LogStash::Event.new("name" => "Pinkie", "age" => 18, "is_pegasus" => false, "favourite_numbers" => [1,2,3], "fur_colour" => Colour::PINK, "favourite_colours" => [1,5] )
317
-
318
- it "should return protobuf encoded data for testcase 3" do
319
-
320
- subject.on_event do |event, data|
321
- insist { data.is_a? String }
322
-
323
- pb_builder = Google::Protobuf::DescriptorPool.generated_pool.lookup("Unicorn").msgclass
324
- decoded_data = pb_builder.decode(data)
325
- expect(decoded_data.name ).to eq(event.get("name") )
326
- expect(decoded_data.age ).to eq(event.get("age") )
327
- expect(decoded_data.is_pegasus ).to eq(event.get("is_pegasus") )
328
- expect(decoded_data.fur_colour ).to eq(:PINK)
329
- expect(decoded_data.favourite_numbers ).to eq(event.get("favourite_numbers") )
330
- expect(decoded_data.favourite_colours ).to eq([:BLUE,:WHITE] )
331
- end # subject.on_event
332
-
333
- subject.encode(event3)
334
- end # it
335
-
336
- end # context
337
-
338
- context "#encodePB3-b" do
339
-
340
- #### Test case 4: encode nested protobuf ####################################################################################################################
341
-
342
- require_relative '../helpers/pb3/unicorn_pb.rb'
343
-
344
- subject do
345
- next LogStash::Codecs::Protobuf.new("class_name" => "Unicorn", "include_path" => [pb_include_path + '/pb3/unicorn_pb.rb'], "protobuf_version" => 3)
346
- end
347
-
348
- event4 = LogStash::Event.new("name" => "Horst", "age" => 23, "is_pegasus" => true, "mother" => \
349
- {"name" => "Mom", "age" => 47}, "father" => {"name"=> "Daddy", "age"=> 50, "fur_colour" => 3 } # 3 == SILVER
350
- )
351
-
352
- it "should return protobuf encoded data for testcase 4" do
353
-
354
- subject.on_event do |event, data|
355
- insist { data.is_a? String }
356
-
357
- pb_builder = Google::Protobuf::DescriptorPool.generated_pool.lookup("Unicorn").msgclass
358
- decoded_data = pb_builder.decode(data)
359
-
360
- expect(decoded_data.name ).to eq(event.get("name") )
361
- expect(decoded_data.age ).to eq(event.get("age") )
362
- expect(decoded_data.is_pegasus ).to eq(event.get("is_pegasus") )
363
- expect(decoded_data.mother.name ).to eq(event.get("mother")["name"] )
364
- expect(decoded_data.mother.age ).to eq(event.get("mother")["age"] )
365
- expect(decoded_data.father.name ).to eq(event.get("father")["name"] )
366
- expect(decoded_data.father.age ).to eq(event.get("father")["age"] )
367
- expect(decoded_data.father.fur_colour ).to eq(:SILVER)
368
-
369
-
370
- end # subject4.on_event
371
- subject.encode(event4)
372
- end # it
373
-
374
- end # context #encodePB3
375
307
 
376
308
 
377
309
 
@@ -383,7 +315,7 @@ describe LogStash::Codecs::Protobuf do
383
315
  plugin_7.register
384
316
  end
385
317
 
386
- it "should return an event from protobuf encoded data with repeated top level objects" do
318
+ it "should return an event from protobuf data with repeated top level objects" do
387
319
  event_class = Google::Protobuf::DescriptorPool.generated_pool.lookup("RepeatedEvent").msgclass # TODO this shouldnt be necessary because the classes are already
388
320
  # specified at the end of the _pb.rb files
389
321
  events_class = Google::Protobuf::DescriptorPool.generated_pool.lookup("RepeatedEvents").msgclass
@@ -0,0 +1,220 @@
1
+
2
+
3
+
4
+
5
+ # encoding: utf-8
6
+ require "logstash/devutils/rspec/spec_helper"
7
+ require "logstash/codecs/protobuf"
8
+ require "logstash/event"
9
+ require "insist"
10
+
11
+ require 'google/protobuf' # for protobuf3
12
+
13
+ # absolute path to the protobuf helpers directory
14
+ pb_include_path = File.expand_path(".") + "/spec/helpers"
15
+
16
+ describe LogStash::Codecs::Protobuf do
17
+
18
+ context "#encodePB3-a" do
19
+
20
+ #### Test case 1: encode simple protobuf ####################################################################################################################
21
+
22
+ require_relative '../helpers/pb3/unicorn_pb.rb'
23
+
24
+ subject do
25
+ next LogStash::Codecs::Protobuf.new("class_name" => "Unicorn", "include_path" => [pb_include_path + '/pb3/unicorn_pb.rb'], "protobuf_version" => 3)
26
+ end
27
+
28
+ event1 = LogStash::Event.new("name" => "Pinkie", "age" => 18, "is_pegasus" => false, "favourite_numbers" => [1,2,3], "fur_colour" => Colour::PINK, "favourite_colours" => [1,5] )
29
+
30
+ it "should return protobuf encoded data for testcase 1" do
31
+
32
+ subject.on_event do |event, data|
33
+ insist { data.is_a? String }
34
+
35
+ pb_builder = Google::Protobuf::DescriptorPool.generated_pool.lookup("Unicorn").msgclass
36
+ decoded_data = pb_builder.decode(data)
37
+ expect(decoded_data.name ).to eq(event.get("name") )
38
+ expect(decoded_data.age ).to eq(event.get("age") )
39
+ expect(decoded_data.is_pegasus ).to eq(event.get("is_pegasus") )
40
+ expect(decoded_data.fur_colour ).to eq(:PINK)
41
+ expect(decoded_data.favourite_numbers ).to eq(event.get("favourite_numbers") )
42
+ expect(decoded_data.favourite_colours ).to eq([:BLUE,:WHITE] )
43
+ end # subject.on_event
44
+
45
+ subject.encode(event1)
46
+ end # it
47
+
48
+ end # context
49
+
50
+ context "#encodePB3-b" do
51
+
52
+ #### Test case 2: encode nested protobuf ####################################################################################################################
53
+
54
+ require_relative '../helpers/pb3/unicorn_pb.rb'
55
+
56
+ subject do
57
+ next LogStash::Codecs::Protobuf.new("class_name" => "Unicorn", "include_path" => [pb_include_path + '/pb3/unicorn_pb.rb'], "protobuf_version" => 3)
58
+ end
59
+
60
+ event = LogStash::Event.new("name" => "Horst", "age" => 23, "is_pegasus" => true, "mother" => \
61
+ {"name" => "Mom", "age" => 47}, "father" => {"name"=> "Daddy", "age"=> 50, "fur_colour" => 3 } # 3 == SILVER
62
+ )
63
+
64
+ it "should return protobuf encoded data for testcase 2" do
65
+
66
+ subject.on_event do |event, data|
67
+ insist { data.is_a? String }
68
+
69
+ pb_builder = Google::Protobuf::DescriptorPool.generated_pool.lookup("Unicorn").msgclass
70
+ decoded_data = pb_builder.decode(data)
71
+
72
+ expect(decoded_data.name ).to eq(event.get("name") )
73
+ expect(decoded_data.age ).to eq(event.get("age") )
74
+ expect(decoded_data.is_pegasus ).to eq(event.get("is_pegasus") )
75
+ expect(decoded_data.mother.name ).to eq(event.get("mother")["name"] )
76
+ expect(decoded_data.mother.age ).to eq(event.get("mother")["age"] )
77
+ expect(decoded_data.father.name ).to eq(event.get("father")["name"] )
78
+ expect(decoded_data.father.age ).to eq(event.get("father")["age"] )
79
+ expect(decoded_data.father.fur_colour ).to eq(:SILVER)
80
+
81
+
82
+ end # subject4.on_event
83
+ subject.encode(event)
84
+ end # it
85
+
86
+ end # context #encodePB3
87
+
88
+ context "encodePB3-c" do
89
+
90
+ #### Test case 3: encode nested protobuf ####################################################################################################################
91
+
92
+
93
+ subject do
94
+ next LogStash::Codecs::Protobuf.new("class_name" => "something.rum_akamai.ProtoAkamaiRum", "include_path" => [pb_include_path + '/pb3/rum_pb.rb' ], "protobuf_version" => 3)
95
+ end
96
+
97
+ event = LogStash::Event.new(
98
+ "user_agent"=>{"os"=>"Android OS", "family"=>"Chrome Mobile", "major"=>74, "mobile"=>"1", "minor"=>0, "manufacturer"=>"Samsung", "osversion"=>"8",
99
+ "model"=>"Galaxy S7 Edge", "type"=>"Mobile",
100
+ "raw"=>"Mozilla/5.0 (Linux; Android 8.0.0; SM-G935F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.157 Mobile Safari/537.36"},
101
+ "dom"=>{"script"=>65, "ln"=>2063, "ext"=>47}, "page_group"=>"SEO-Pages",
102
+ "active_ctests"=>["1443703219", "47121", "47048", "46906"], "timestamp"=>"1559566982508",
103
+ "geo"=>{"isp"=>"Telecom Italia Mobile", "lat"=>45.4643, "postalcode"=>"20123", "netspeed"=>"Cellular", "rg"=>"MI", "cc"=>"IT",
104
+ "organisation"=>"Telecom Italia Mobile", "ovr"=>false, "city"=>"Milan", "lon"=>9.1895},
105
+ "header"=>{"sender_id"=>"0"}, "domain"=>"something.com", "url"=>"https://www.something.it/",
106
+ "timers"=>{"tti"=>4544, "ttvr"=>3657, "fcp"=>2683, "ttfi"=>4280, "fid"=>31, "longtasks"=>2519, "t_resp"=>1748}
107
+ )
108
+
109
+ it "should return protobuf encoded data for testcase 3" do
110
+
111
+ subject.on_event do |event, data|
112
+ insist { data.is_a? String }
113
+
114
+ pb_builder = Google::Protobuf::DescriptorPool.generated_pool.lookup("something.rum_akamai.ProtoAkamaiRum").msgclass
115
+ decoded_data = pb_builder.decode(data)
116
+
117
+ expect(decoded_data.domain ).to eq(event.get("domain") )
118
+ expect(decoded_data.dom.ext ).to eq(event.get("dom")["ext"] )
119
+ expect(decoded_data.user_agent.type ).to eq(event.get("user_agent")["type"] )
120
+ expect(decoded_data.geo.rg ).to eq(event.get("geo")["rg"] )
121
+
122
+
123
+ end # subject4.on_event
124
+ subject.encode(event)
125
+ end # it
126
+ end # context #encodePB3-c
127
+
128
+
129
+ context "encodePB3-d" do
130
+
131
+ #### Test case 3: autoconvert data types ####################################################################################################################
132
+
133
+
134
+ subject do
135
+ next LogStash::Codecs::Protobuf.new("class_name" => "something.rum_akamai.ProtoAkamai2Rum",
136
+ "pb3_encoder_autoconvert_types" => true,
137
+ "include_path" => [pb_include_path + '/pb3/rum2_pb.rb' ], "protobuf_version" => 3)
138
+ end
139
+
140
+ event = LogStash::Event.new(
141
+
142
+ # major should autoconvert to float
143
+ "user_agent"=>{"minor"=>0,"major"=>"74"},
144
+
145
+ # ext should autoconvert to int. script being empty should be ignored.
146
+ "dom"=>{"script"=>nil, "ln"=>2063, "ext"=>47.0},
147
+
148
+ # ovr should autoconvert to Boolean
149
+ "geo"=>{"ovr"=>"false"},
150
+
151
+ # sender_id should autoconvert to string
152
+ "header"=>{"sender_id"=>1},
153
+ "domain" => "www",
154
+
155
+ # should autoconvert to string
156
+ "http_referer" => 1234,
157
+ )
158
+
159
+
160
+ it "should fix datatypes to match the protobuf definition" do
161
+
162
+ subject.on_event do |event, data|
163
+ insist { data.is_a? String }
164
+
165
+ pb_builder = Google::Protobuf::DescriptorPool.generated_pool.lookup("something.rum_akamai.ProtoAkamai2Rum").msgclass
166
+ decoded_data = pb_builder.decode(data)
167
+ expect(decoded_data.domain ).to eq(event.get("domain") )
168
+ expect(decoded_data.user_agent.major).to eq(74)
169
+ expect(decoded_data.dom.ext).to eq(47)
170
+ expect(decoded_data.geo.ovr).to eq(false)
171
+ expect(decoded_data.header.sender_id).to eq("1")
172
+ expect(decoded_data.http_referer).to eq("1234")
173
+
174
+ end
175
+ subject.encode(event)
176
+ end # it
177
+
178
+ end # context #encodePB3-d
179
+
180
+
181
+ context "encodePB3-e" do
182
+
183
+ #### Test case 4: handle nil data ####################################################################################################################
184
+
185
+
186
+
187
+ subject do
188
+ next LogStash::Codecs::Protobuf.new("class_name" => "something.rum_akamai.ProtoAkamai3Rum",
189
+ "pb3_encoder_autoconvert_types" => false,
190
+ "include_path" => [pb_include_path + '/pb3/rum3_pb.rb' ], "protobuf_version" => 3)
191
+ end
192
+
193
+ event = LogStash::Event.new(
194
+ "domain" => nil,
195
+ "header" => {"sender_id" => "23"},
196
+ "geo"=>{"organisation"=>"Jio", "rg"=>"DL", "netspeed"=>nil, "city"=>nil, "cc"=>"IN", "ovr"=>false, "postalcode"=>"110012", "isp"=>"Jio"}
197
+ )
198
+
199
+ it "should ignore empty fields" do
200
+
201
+ subject.on_event do |event, data|
202
+ insist { data.is_a? String }
203
+
204
+ pb_builder = Google::Protobuf::DescriptorPool.generated_pool.lookup("something.rum_akamai.ProtoAkamai3Rum").msgclass
205
+ decoded_data = pb_builder.decode(data)
206
+ expect(decoded_data.geo.organisation ).to eq(event.get("geo")["organisation"])
207
+ expect(decoded_data.geo.ovr ).to eq(event.get("geo")["ovr"])
208
+ expect(decoded_data.geo.postalcode ).to eq(event.get("geo")["postalcode"])
209
+ expect(decoded_data.header.sender_id ).to eq(event.get("header")['sender_id'] )
210
+
211
+ end
212
+ subject.encode(event)
213
+ end # it
214
+
215
+ end # context #encodePB3-e
216
+
217
+
218
+
219
+
220
+ end # describe
@@ -0,0 +1,64 @@
1
+ require 'google/protobuf'
2
+
3
+ Google::Protobuf::DescriptorPool.generated_pool.build do
4
+ add_message "bk.sk.pk.reservations.proto.types.v0.ReservationEntry" do
5
+ optional :id, :string, 1
6
+ optional :internalAccountId, :string, 2
7
+ optional :state, :enum, 3, "bk.sk.pk.reservations.proto.types.v0.ReservationState"
8
+ optional :instructedAmount, :message, 4, "bk.sk.pk.reservations.proto.types.v0.InstructedAmount"
9
+ optional :lifetime, :message, 5, "bk.sk.pk.reservations.proto.types.v0.Lifetime"
10
+ optional :requestor, :message, 6, "bk.sk.pk.reservations.proto.types.v0.Requestor"
11
+ optional :description, :message, 7, "bk.sk.pk.reservations.proto.types.v0.Description"
12
+ optional :forceMarker, :bool, 8
13
+ optional :creationTimestamp, :string, 9
14
+ end
15
+ add_message "bk.sk.pk.reservations.proto.types.v0.Requestor" do
16
+ optional :productCode, :string, 1
17
+ optional :systemCode, :string, 2
18
+ optional :init, :string, 3
19
+ end
20
+ add_message "bk.sk.pk.reservations.proto.types.v0.Lifetime" do
21
+ optional :startDateTime, :string, 1
22
+ optional :endDateTime, :string, 2
23
+ end
24
+ add_message "bk.sk.pk.reservations.proto.types.v0.InstructedAmount" do
25
+ optional :amount, :message, 1, "bk.sk.pk.reservations.proto.types.v0.DecimalNumber"
26
+ optional :currency, :string, 2
27
+ end
28
+ add_message "bk.sk.pk.reservations.proto.types.v0.DecimalNumber" do
29
+ optional :unscaledValue, :int64, 1
30
+ optional :scale, :int32, 2
31
+ end
32
+ add_message "bk.sk.pk.reservations.proto.types.v0.Description" do
33
+ optional :text1, :string, 1
34
+ optional :text2, :string, 2
35
+ end
36
+ add_enum "bk.sk.pk.reservations.proto.types.v0.ReservationState" do
37
+ value :RESERVED, 0
38
+ value :CANCELED, 1
39
+ value :CONSUMED, 2
40
+ value :EXPIRED, 3
41
+ end
42
+ end
43
+
44
+ module Bk
45
+ module Sk
46
+ module Pk
47
+ module Reservations
48
+ module Proto
49
+ module Types
50
+ module V0
51
+ ReservationEntry = Google::Protobuf::DescriptorPool.generated_pool.lookup("bk.sk.pk.reservations.proto.types.v0.ReservationEntry").msgclass
52
+ Requestor = Google::Protobuf::DescriptorPool.generated_pool.lookup("bk.sk.pk.reservations.proto.types.v0.Requestor").msgclass
53
+ Lifetime = Google::Protobuf::DescriptorPool.generated_pool.lookup("bk.sk.pk.reservations.proto.types.v0.Lifetime").msgclass
54
+ InstructedAmount = Google::Protobuf::DescriptorPool.generated_pool.lookup("bk.sk.pk.reservations.proto.types.v0.InstructedAmount").msgclass
55
+ DecimalNumber = Google::Protobuf::DescriptorPool.generated_pool.lookup("bk.sk.pk.reservations.proto.types.v0.DecimalNumber").msgclass
56
+ Description = Google::Protobuf::DescriptorPool.generated_pool.lookup("bk.sk.pk.reservations.proto.types.v0.Description").msgclass
57
+ ReservationState = Google::Protobuf::DescriptorPool.generated_pool.lookup("bk.sk.pk.reservations.proto.types.v0.ReservationState").enummodule
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,87 @@
1
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
2
+ # source: something/rum_akamai/AkamaiRum.proto
3
+
4
+ begin; require 'google/protobuf'; rescue LoadError; end
5
+
6
+ Google::Protobuf::DescriptorPool.generated_pool.build do
7
+ add_message "something.logging.ProtoHeader2" do
8
+ optional :unix_timestamp, :int64, 1
9
+ optional :sender_id, :string, 2
10
+ end
11
+ end
12
+
13
+ module Something
14
+ module Logging
15
+ ProtoHeader2 = Google::Protobuf::DescriptorPool.generated_pool.lookup("something.logging.ProtoHeader2").msgclass
16
+ end
17
+ end
18
+
19
+
20
+
21
+ Google::Protobuf::DescriptorPool.generated_pool.build do
22
+ add_message "something.rum_akamai.ProtoAkamai2Rum" do
23
+ optional :header, :message, 1, "something.logging.ProtoHeader2"
24
+ optional :version, :string, 2
25
+ optional :url, :string, 3
26
+ optional :http_referer, :string, 4
27
+ optional :session_id, :string, 5
28
+ optional :tracking_id, :string, 6
29
+ optional :locale, :string, 7
30
+ optional :user_agent, :message, 8, "something.rum_akamai.ProtoAkamai2Rum.ProtoUserAgent"
31
+ optional :geo, :message, 9, "something.rum_akamai.ProtoAkamai2Rum.ProtoGeoLocation"
32
+ optional :timers, :message, 10, "something.rum_akamai.ProtoAkamai2Rum.ProtoTimers"
33
+ optional :page_group, :string, 11
34
+ repeated :active_ctests, :string, 12
35
+ optional :dom, :message, 13, "something.rum_akamai.ProtoAkamai2Rum.ProtoDom"
36
+ optional :domain, :string, 14
37
+ optional :timestamp, :string, 15
38
+ end
39
+ add_message "something.rum_akamai.ProtoAkamai2Rum.ProtoUserAgent" do
40
+ optional :family, :string, 1
41
+ optional :major, :float, 2
42
+ optional :manufacturer, :string, 3
43
+ optional :minor, :float, 4
44
+ optional :mobile, :string, 5
45
+ optional :model, :string, 6
46
+ optional :os, :string, 7
47
+ optional :osversion, :string, 8
48
+ optional :raw, :string, 9
49
+ optional :type, :string, 10
50
+ end
51
+ add_message "something.rum_akamai.ProtoAkamai2Rum.ProtoGeoLocation" do
52
+ optional :cc, :string, 1
53
+ optional :city, :string, 2
54
+ optional :isp, :string, 3
55
+ optional :lat, :float, 4
56
+ optional :lon, :float, 5
57
+ optional :netspeed, :string, 6
58
+ optional :organisation, :string, 7
59
+ optional :ovr, :bool, 8
60
+ optional :postalcode, :string, 9
61
+ optional :rg, :string, 10
62
+ end
63
+ add_message "something.rum_akamai.ProtoAkamai2Rum.ProtoTimers" do
64
+ optional :t_resp, :int32, 1
65
+ optional :fid, :int32, 2
66
+ optional :fcp, :int32, 3
67
+ optional :tti, :int32, 4
68
+ optional :ttfi, :int32, 5
69
+ optional :ttvr, :int32, 6
70
+ optional :longtasks, :float, 7
71
+ end
72
+ add_message "something.rum_akamai.ProtoAkamai2Rum.ProtoDom" do
73
+ optional :script, :int32, 1
74
+ optional :ext, :int32, 2
75
+ optional :ln, :int32, 3
76
+ end
77
+ end
78
+
79
+ module Something
80
+ module RumAkamai
81
+ ProtoAkamai2Rum = Google::Protobuf::DescriptorPool.generated_pool.lookup("something.rum_akamai.ProtoAkamai2Rum").msgclass
82
+ ProtoAkamai2Rum::ProtoUserAgent = Google::Protobuf::DescriptorPool.generated_pool.lookup("something.rum_akamai.ProtoAkamai2Rum.ProtoUserAgent").msgclass
83
+ ProtoAkamai2Rum::ProtoGeoLocation = Google::Protobuf::DescriptorPool.generated_pool.lookup("something.rum_akamai.ProtoAkamai2Rum.ProtoGeoLocation").msgclass
84
+ ProtoAkamai2Rum::ProtoTimers = Google::Protobuf::DescriptorPool.generated_pool.lookup("something.rum_akamai.ProtoAkamai2Rum.ProtoTimers").msgclass
85
+ ProtoAkamai2Rum::ProtoDom = Google::Protobuf::DescriptorPool.generated_pool.lookup("something.rum_akamai.ProtoAkamai2Rum.ProtoDom").msgclass
86
+ end
87
+ end