fluent-plugin-google-cloud 0.6.1 → 0.6.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +9 -8
- data/fluent-plugin-google-cloud.gemspec +1 -1
- data/lib/fluent/plugin/out_google_cloud.rb +32 -1
- data/test/plugin/base_test.rb +58 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 357b0cf2cba57aafc6011c911419b746cc7103b2
|
4
|
+
data.tar.gz: 91941e153f05ff927e8f83d342b651219075ebc8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 10cfc826b705a84b017571b34b759ee9013f416436e6fcd79c632b8e6daa7a016e87c1630a6d5e03a23b7627abb2e46bd32709957a7fdb7589c91af8b2b4f3bc
|
7
|
+
data.tar.gz: 915d378471e6b055f8eef48e73c7d27300d9fcadf420b2029efdf5a73e46eb83f674e3b631e1257986cae43e9e2603148d61707363ad53e4d3cdb81fe575f1ba
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
fluent-plugin-google-cloud (0.6.
|
4
|
+
fluent-plugin-google-cloud (0.6.2)
|
5
5
|
fluentd (~> 0.10)
|
6
6
|
google-api-client (~> 0.9.0)
|
7
7
|
google-cloud-logging (~> 0.23.2)
|
@@ -21,9 +21,9 @@ GEM
|
|
21
21
|
cool.io (1.4.6)
|
22
22
|
crack (0.4.3)
|
23
23
|
safe_yaml (~> 1.0.0)
|
24
|
-
faraday (0.12.
|
24
|
+
faraday (0.12.1)
|
25
25
|
multipart-post (>= 1.2, < 3)
|
26
|
-
fluentd (0.14.
|
26
|
+
fluentd (0.14.15)
|
27
27
|
cool.io (~> 1.4.5)
|
28
28
|
http_parser.rb (>= 0.5.1, < 0.7.0)
|
29
29
|
msgpack (>= 0.7.0, < 2.0.0)
|
@@ -57,7 +57,7 @@ GEM
|
|
57
57
|
googleauth (~> 0.5.1)
|
58
58
|
grpc (~> 1.0)
|
59
59
|
rly (~> 0.2.3)
|
60
|
-
google-protobuf (3.
|
60
|
+
google-protobuf (3.3.0)
|
61
61
|
googleapis-common-protos (1.3.5)
|
62
62
|
google-protobuf (~> 3.2)
|
63
63
|
grpc (~> 1.0)
|
@@ -69,10 +69,10 @@ GEM
|
|
69
69
|
multi_json (~> 1.11)
|
70
70
|
os (~> 0.9)
|
71
71
|
signet (~> 0.7)
|
72
|
-
grpc (1.2.
|
72
|
+
grpc (1.2.5)
|
73
73
|
google-protobuf (~> 3.1)
|
74
74
|
googleauth (~> 0.5.1)
|
75
|
-
hashdiff (0.3.
|
75
|
+
hashdiff (0.3.4)
|
76
76
|
http_parser.rb (0.6.0)
|
77
77
|
httpclient (2.8.3)
|
78
78
|
hurley (0.2)
|
@@ -96,10 +96,11 @@ GEM
|
|
96
96
|
os (0.9.6)
|
97
97
|
parser (2.4.0.0)
|
98
98
|
ast (~> 2.2)
|
99
|
-
power_assert (1.0.
|
99
|
+
power_assert (1.0.2)
|
100
100
|
powerpack (0.1.1)
|
101
101
|
public_suffix (2.0.5)
|
102
|
-
rainbow (2.2.
|
102
|
+
rainbow (2.2.2)
|
103
|
+
rake
|
103
104
|
rake (10.5.0)
|
104
105
|
representable (2.3.0)
|
105
106
|
uber (~> 0.0.7)
|
@@ -10,7 +10,7 @@ eos
|
|
10
10
|
gem.homepage = \
|
11
11
|
'https://github.com/GoogleCloudPlatform/fluent-plugin-google-cloud'
|
12
12
|
gem.license = 'Apache-2.0'
|
13
|
-
gem.version = '0.6.
|
13
|
+
gem.version = '0.6.2'
|
14
14
|
gem.authors = ['Todd Derr', 'Alex Robinson']
|
15
15
|
gem.email = ['salty@google.com']
|
16
16
|
gem.required_ruby_version = Gem::Requirement.new('>= 2.0')
|
@@ -73,7 +73,7 @@ module Fluent
|
|
73
73
|
Fluent::Plugin.register_output('google_cloud', self)
|
74
74
|
|
75
75
|
PLUGIN_NAME = 'Fluentd Google Cloud Logging plugin'
|
76
|
-
PLUGIN_VERSION = '0.6.
|
76
|
+
PLUGIN_VERSION = '0.6.2'
|
77
77
|
|
78
78
|
# Name of the the Google cloud logging write scope.
|
79
79
|
LOGGING_SCOPE = 'https://www.googleapis.com/auth/logging.write'
|
@@ -243,6 +243,8 @@ module Fluent
|
|
243
243
|
(?:\[(?<execution_id>[^\]]+)\])?
|
244
244
|
[ ](?<text>.*)$/x
|
245
245
|
|
246
|
+
@http_latency_regexp = /^\s*(?<seconds>\d+)(?<decimal>\.\d+)?\s*s\s*$/
|
247
|
+
|
246
248
|
# set attributes from metadata (unless overriden by static config)
|
247
249
|
@vm_name = Socket.gethostname if @vm_name.nil?
|
248
250
|
@platform = detect_platform
|
@@ -927,6 +929,8 @@ module Fluent
|
|
927
929
|
end
|
928
930
|
end
|
929
931
|
|
932
|
+
NANOS_IN_A_SECOND = 1000 * 1000 * 1000
|
933
|
+
|
930
934
|
def set_http_request(record, entry)
|
931
935
|
return nil unless record['httpRequest'].is_a?(Hash)
|
932
936
|
input = record['httpRequest']
|
@@ -961,6 +965,33 @@ module Fluent
|
|
961
965
|
output.cache_validated_with_origin_server = \
|
962
966
|
cache_validated_with_origin_server \
|
963
967
|
unless cache_validated_with_origin_server.nil?
|
968
|
+
|
969
|
+
latency = input.delete('latency')
|
970
|
+
unless latency.nil?
|
971
|
+
# Parse latency. If no valid format is detected, skip setting latency.
|
972
|
+
# Format: whitespace (optional) + integer + point & decimal (optional)
|
973
|
+
# + whitespace (optional) + "s" + whitespace (optional)
|
974
|
+
# e.g.: "1.42 s"
|
975
|
+
match = @http_latency_regexp.match(latency)
|
976
|
+
if match
|
977
|
+
# Split the integer and decimal parts in order to calculate seconds
|
978
|
+
# and nanos.
|
979
|
+
latency_seconds = match['seconds'].to_i
|
980
|
+
latency_nanos = (match['decimal'].to_f * NANOS_IN_A_SECOND).round
|
981
|
+
if @use_grpc
|
982
|
+
output.latency = Google::Protobuf::Duration.new(
|
983
|
+
seconds: latency_seconds,
|
984
|
+
nanos: latency_nanos
|
985
|
+
)
|
986
|
+
else
|
987
|
+
output.latency = {
|
988
|
+
seconds: latency_seconds,
|
989
|
+
nanos: latency_nanos
|
990
|
+
}.delete_if { |_, v| v == 0 }
|
991
|
+
end
|
992
|
+
end
|
993
|
+
end
|
994
|
+
|
964
995
|
record.delete('httpRequest') if input.empty?
|
965
996
|
entry.http_request = output
|
966
997
|
end
|
data/test/plugin/base_test.rb
CHANGED
@@ -1368,6 +1368,43 @@ module BaseTest
|
|
1368
1368
|
end
|
1369
1369
|
end
|
1370
1370
|
|
1371
|
+
def test_http_request_with_latency
|
1372
|
+
setup_gce_metadata_stubs
|
1373
|
+
latency_conversion.each do |input, expected|
|
1374
|
+
setup_logging_stubs do
|
1375
|
+
d = create_driver
|
1376
|
+
@logs_sent = []
|
1377
|
+
d.emit('httpRequest' => HTTP_REQUEST_MESSAGE.merge('latency' => input))
|
1378
|
+
d.run
|
1379
|
+
end
|
1380
|
+
verify_log_entries(1, COMPUTE_PARAMS, 'httpRequest') do |entry|
|
1381
|
+
assert_equal HTTP_REQUEST_MESSAGE.merge('latency' => expected),
|
1382
|
+
entry['httpRequest'], entry
|
1383
|
+
assert_nil get_fields(entry['jsonPayload'])['httpRequest'], entry
|
1384
|
+
end
|
1385
|
+
end
|
1386
|
+
end
|
1387
|
+
|
1388
|
+
# Skip setting latency when the field is null or has invalid format.
|
1389
|
+
def test_http_request_skip_setting_latency
|
1390
|
+
setup_gce_metadata_stubs
|
1391
|
+
[
|
1392
|
+
'', ' ', nil, 'null', '123', '1.23 seconds',
|
1393
|
+
' 123 s econds ', '1min', 'abc&^!$*('
|
1394
|
+
].each do |input|
|
1395
|
+
setup_logging_stubs do
|
1396
|
+
d = create_driver
|
1397
|
+
@logs_sent = []
|
1398
|
+
d.emit('httpRequest' => HTTP_REQUEST_MESSAGE.merge('latency' => input))
|
1399
|
+
d.run
|
1400
|
+
end
|
1401
|
+
verify_log_entries(1, COMPUTE_PARAMS, 'httpRequest') do |entry|
|
1402
|
+
assert_equal HTTP_REQUEST_MESSAGE, entry['httpRequest'], entry
|
1403
|
+
assert_nil get_fields(entry['jsonPayload'])['httpRequest'], entry
|
1404
|
+
end
|
1405
|
+
end
|
1406
|
+
end
|
1407
|
+
|
1371
1408
|
private
|
1372
1409
|
|
1373
1410
|
def stub_metadata_request(metadata_path, response_body)
|
@@ -1592,6 +1629,27 @@ module BaseTest
|
|
1592
1629
|
end
|
1593
1630
|
end
|
1594
1631
|
|
1632
|
+
# The conversions from user input to output.
|
1633
|
+
def latency_conversion
|
1634
|
+
{
|
1635
|
+
'32 s' => { 'seconds' => 32 },
|
1636
|
+
'32s' => { 'seconds' => 32 },
|
1637
|
+
'0.32s' => { 'nanos' => 320_000_000 },
|
1638
|
+
' 123 s ' => { 'seconds' => 123 },
|
1639
|
+
'1.3442 s' => { 'seconds' => 1, 'nanos' => 344_200_000 },
|
1640
|
+
|
1641
|
+
# Test whitespace.
|
1642
|
+
# \t: tab. \r: carriage return. \n: line break.
|
1643
|
+
# \v: vertical whitespace. \f: form feed.
|
1644
|
+
"\t123.5\ts\t" => { 'seconds' => 123, 'nanos' => 500_000_000 },
|
1645
|
+
"\r123.5\rs\r" => { 'seconds' => 123, 'nanos' => 500_000_000 },
|
1646
|
+
"\n123.5\ns\n" => { 'seconds' => 123, 'nanos' => 500_000_000 },
|
1647
|
+
"\v123.5\vs\v" => { 'seconds' => 123, 'nanos' => 500_000_000 },
|
1648
|
+
"\f123.5\fs\f" => { 'seconds' => 123, 'nanos' => 500_000_000 },
|
1649
|
+
"\r123.5\ts\f" => { 'seconds' => 123, 'nanos' => 500_000_000 }
|
1650
|
+
}
|
1651
|
+
end
|
1652
|
+
|
1595
1653
|
# This module expects the methods below to be overridden.
|
1596
1654
|
|
1597
1655
|
# Create a Fluentd output test driver with the Google Cloud Output plugin.
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fluent-plugin-google-cloud
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Todd Derr
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2017-
|
12
|
+
date: 2017-05-09 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: fluentd
|
@@ -226,7 +226,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
226
226
|
version: '0'
|
227
227
|
requirements: []
|
228
228
|
rubyforge_project:
|
229
|
-
rubygems_version: 2.
|
229
|
+
rubygems_version: 2.4.8
|
230
230
|
signing_key:
|
231
231
|
specification_version: 4
|
232
232
|
summary: fluentd output plugin for the Stackdriver Logging API
|