logstash-codec-protobuf 1.2.1 → 1.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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