logstash-input-google_cloud_storage 0.9.0-java

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.
Files changed (65) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +9 -0
  3. data/CONTRIBUTING.md +7 -0
  4. data/CONTRIBUTORS +11 -0
  5. data/Gemfile +10 -0
  6. data/LICENSE +11 -0
  7. data/README.md +95 -0
  8. data/docs/configuration.asciidoc +112 -0
  9. data/docs/examples.asciidoc +84 -0
  10. data/docs/index.asciidoc +43 -0
  11. data/docs/metadata.asciidoc +20 -0
  12. data/docs/resources.asciidoc +6 -0
  13. data/lib/logstash-input-google_cloud_storage_jars.rb +38 -0
  14. data/lib/logstash/inputs/cloud_storage/blob_adapter.rb +92 -0
  15. data/lib/logstash/inputs/cloud_storage/blob_filter.rb +99 -0
  16. data/lib/logstash/inputs/cloud_storage/client.rb +87 -0
  17. data/lib/logstash/inputs/cloud_storage/file_reader.rb +59 -0
  18. data/lib/logstash/inputs/cloud_storage/processed_db.rb +53 -0
  19. data/lib/logstash/inputs/google_cloud_storage.rb +130 -0
  20. data/logstash-input-google_cloud_storage.gemspec +49 -0
  21. data/spec/fixtures/credentials.json +8 -0
  22. data/spec/fixtures/helloworld.log +2 -0
  23. data/spec/fixtures/helloworld.log.gz +0 -0
  24. data/spec/inputs/cloud_storage/blob_adapter_spec.rb +95 -0
  25. data/spec/inputs/cloud_storage/blob_filter_spec.rb +92 -0
  26. data/spec/inputs/cloud_storage/client_spec.rb +33 -0
  27. data/spec/inputs/cloud_storage/file_reader_spec.rb +76 -0
  28. data/spec/inputs/cloud_storage/processed_db_spec.rb +82 -0
  29. data/spec/inputs/google_cloud_storage_spec.rb +127 -0
  30. data/vendor/jar-dependencies/com/fasterxml/jackson/core/jackson-core/2.1.3/jackson-core-2.1.3.jar +0 -0
  31. data/vendor/jar-dependencies/com/google/api-client/google-api-client/1.23.0/google-api-client-1.23.0.jar +0 -0
  32. data/vendor/jar-dependencies/com/google/api/api-common/1.5.0/api-common-1.5.0.jar +0 -0
  33. data/vendor/jar-dependencies/com/google/api/gax-httpjson/0.40.0/gax-httpjson-0.40.0.jar +0 -0
  34. data/vendor/jar-dependencies/com/google/api/gax/1.23.0/gax-1.23.0.jar +0 -0
  35. data/vendor/jar-dependencies/com/google/api/grpc/proto-google-common-protos/1.7.0/proto-google-common-protos-1.7.0.jar +0 -0
  36. data/vendor/jar-dependencies/com/google/api/grpc/proto-google-iam-v1/0.8.0/proto-google-iam-v1-0.8.0.jar +0 -0
  37. data/vendor/jar-dependencies/com/google/apis/google-api-services-storage/v1-rev114-1.23.0/google-api-services-storage-v1-rev114-1.23.0.jar +0 -0
  38. data/vendor/jar-dependencies/com/google/auth/google-auth-library-credentials/0.9.0/google-auth-library-credentials-0.9.0.jar +0 -0
  39. data/vendor/jar-dependencies/com/google/auth/google-auth-library-oauth2-http/0.9.0/google-auth-library-oauth2-http-0.9.0.jar +0 -0
  40. data/vendor/jar-dependencies/com/google/cloud/google-cloud-core-http/1.25.0/google-cloud-core-http-1.25.0.jar +0 -0
  41. data/vendor/jar-dependencies/com/google/cloud/google-cloud-core/1.25.0/google-cloud-core-1.25.0.jar +0 -0
  42. data/vendor/jar-dependencies/com/google/cloud/google-cloud-storage/1.25.0/google-cloud-storage-1.25.0.jar +0 -0
  43. data/vendor/jar-dependencies/com/google/code/findbugs/jsr305/3.0.1/jsr305-3.0.1.jar +0 -0
  44. data/vendor/jar-dependencies/com/google/code/gson/gson/2.7/gson-2.7.jar +0 -0
  45. data/vendor/jar-dependencies/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar +0 -0
  46. data/vendor/jar-dependencies/com/google/guava/guava-jdk5/17.0/guava-jdk5-17.0.jar +0 -0
  47. data/vendor/jar-dependencies/com/google/guava/guava/20.0/guava-20.0.jar +0 -0
  48. data/vendor/jar-dependencies/com/google/http-client/google-http-client-appengine/1.23.0/google-http-client-appengine-1.23.0.jar +0 -0
  49. data/vendor/jar-dependencies/com/google/http-client/google-http-client-jackson/1.23.0/google-http-client-jackson-1.23.0.jar +0 -0
  50. data/vendor/jar-dependencies/com/google/http-client/google-http-client-jackson2/1.23.0/google-http-client-jackson2-1.23.0.jar +0 -0
  51. data/vendor/jar-dependencies/com/google/http-client/google-http-client/1.23.0/google-http-client-1.23.0.jar +0 -0
  52. data/vendor/jar-dependencies/com/google/oauth-client/google-oauth-client/1.23.0/google-oauth-client-1.23.0.jar +0 -0
  53. data/vendor/jar-dependencies/com/google/protobuf/protobuf-java-util/3.5.1/protobuf-java-util-3.5.1.jar +0 -0
  54. data/vendor/jar-dependencies/com/google/protobuf/protobuf-java/3.5.1/protobuf-java-3.5.1.jar +0 -0
  55. data/vendor/jar-dependencies/commons-codec/commons-codec/1.3/commons-codec-1.3.jar +0 -0
  56. data/vendor/jar-dependencies/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar +0 -0
  57. data/vendor/jar-dependencies/io/grpc/grpc-context/1.9.0/grpc-context-1.9.0.jar +0 -0
  58. data/vendor/jar-dependencies/io/opencensus/opencensus-api/0.11.1/opencensus-api-0.11.1.jar +0 -0
  59. data/vendor/jar-dependencies/io/opencensus/opencensus-contrib-http-util/0.11.1/opencensus-contrib-http-util-0.11.1.jar +0 -0
  60. data/vendor/jar-dependencies/joda-time/joda-time/2.9.2/joda-time-2.9.2.jar +0 -0
  61. data/vendor/jar-dependencies/org/apache/httpcomponents/httpclient/4.0.1/httpclient-4.0.1.jar +0 -0
  62. data/vendor/jar-dependencies/org/apache/httpcomponents/httpcore/4.0.1/httpcore-4.0.1.jar +0 -0
  63. data/vendor/jar-dependencies/org/codehaus/jackson/jackson-core-asl/1.9.11/jackson-core-asl-1.9.11.jar +0 -0
  64. data/vendor/jar-dependencies/org/threeten/threetenbp/1.3.3/threetenbp-1.3.3.jar +0 -0
  65. metadata +191 -0
@@ -0,0 +1,127 @@
1
+ # encoding: utf-8
2
+
3
+ # Copyright 2018 Google LLC
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # https://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ require 'logstash/devutils/rspec/spec_helper'
18
+ require 'logstash/inputs/google_cloud_storage'
19
+ require 'logstash/inputs/cloud_storage/client'
20
+ require 'logstash/inputs/cloud_storage/blob_filter'
21
+ require 'logstash/inputs/cloud_storage/blob_adapter'
22
+ require 'stud/temporary'
23
+
24
+ describe LogStash::Inputs::GoogleCloudStorage do
25
+
26
+ let(:processed_db_dir) { Stud::Temporary.pathname }
27
+ let(:download_dir) { Stud::Temporary.pathname }
28
+
29
+ let(:config) {
30
+ {
31
+ 'bucket_id' => 'test-bucket-id',
32
+ 'json_key_file' => ::File.join('spec', 'fixtures', 'credentials.json'),
33
+ 'file_matches' => '.*log',
34
+ 'file_exclude' => 'bak-.*',
35
+ 'metadata_key' => 'test-metadata',
36
+ 'processed_db_path' => processed_db_dir,
37
+ 'temp_directory' => download_dir,
38
+ 'delete' => true,
39
+ 'unpack_gzip' => false
40
+ }
41
+ }
42
+
43
+ describe '#register' do
44
+ it 'accepts valid configuration' do
45
+ subject = LogStash::Inputs::GoogleCloudStorage.new(config)
46
+ expect { subject.register }.to_not raise_error(RuntimeError)
47
+ end
48
+
49
+ it 'fails with invalid configuration' do
50
+ bad = config.merge({'file_matches' => ')'})
51
+ subject = LogStash::Inputs::GoogleCloudStorage.new(bad)
52
+ expect { subject.register }.to raise_error(RuntimeError)
53
+ end
54
+ end
55
+
56
+ describe '#list_download_process' do
57
+ let(:blobs) { mock_blob_list('match.log', 'mismatch.log.xz', 'bak-log.log') }
58
+ let(:client) do
59
+ dbl = double('client')
60
+
61
+ allow(dbl).to receive(:list_blobs).and_yield(blobs[0]).and_yield(blobs[1]).and_yield(blobs[2])
62
+
63
+ dbl
64
+ end
65
+
66
+ subject { LogStash::Inputs::GoogleCloudStorage.new(config) }
67
+
68
+ before :each do
69
+ expect(LogStash::Inputs::CloudStorage::Client).to receive(:new).and_return(client)
70
+ subject.event_output_queue = []
71
+ subject.register
72
+ end
73
+
74
+
75
+ it 'lists files' do
76
+ expect(subject.processed_db).to receive(:already_processed?).exactly(3).times
77
+ subject.list_download_process
78
+ end
79
+
80
+ it 'produces events for matching files' do
81
+ subject.list_download_process
82
+
83
+ events = subject.event_output_queue
84
+
85
+ messages = events.map { |e| e.get('message') }
86
+ expect(messages).to eq(['match.log1', 'match.log2'])
87
+
88
+ filenames = events.map { |e| e.get('[@metadata][gcs][name]') }
89
+ expect(filenames).to eq(['match.log', 'match.log'])
90
+ end
91
+
92
+ it 'post-processes matching files' do
93
+ matching = blobs[0]
94
+
95
+ expect(matching).to receive(:set_metadata!)
96
+ expect(matching).to receive(:delete!)
97
+
98
+ subject.list_download_process
99
+
100
+ expect(subject.processed_db.already_processed?(matching)).to eq(true)
101
+ end
102
+ end
103
+
104
+ def mock_blob_list(*names)
105
+ names.map { |name| mock_blob(name) }
106
+ end
107
+
108
+ def mock_blob(name)
109
+ generation = rand 2**64
110
+
111
+ java_blob = double('Blob',
112
+ :getBucket => 'bucket',
113
+ :getMetadata => { 'some-tag' => 'true' },
114
+ :getName => name,
115
+ :getMd5 => 'md5',
116
+ :getCrc32c => 'crc',
117
+ :getGeneration => generation)
118
+
119
+ java_blob.stub_chain(:toBuilder, :setMetadata, :build, :update).and_return(true)
120
+ java_blob.stub(:downloadTo) do |path|
121
+ File.open(path.toString, 'w') { |file| file.write("#{name}1\r\n#{name}2") }
122
+ end
123
+ java_blob.stub(:delete).and_return(true)
124
+
125
+ LogStash::Inputs::CloudStorage::BlobAdapter.new(java_blob)
126
+ end
127
+ end
metadata ADDED
@@ -0,0 +1,191 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: logstash-input-google_cloud_storage
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.9.0
5
+ platform: java
6
+ authors:
7
+ - Elastic
8
+ - Joseph Lewis III
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2018-05-25 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ name: logstash-codec-plain
21
+ prerelease: false
22
+ type: :runtime
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ version: '0'
28
+ - !ruby/object:Gem::Dependency
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '2.0'
34
+ name: logstash-core-plugin-api
35
+ prerelease: false
36
+ type: :runtime
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: '2.0'
42
+ - !ruby/object:Gem::Dependency
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: 0.0.22
48
+ name: stud
49
+ prerelease: false
50
+ type: :runtime
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: 0.0.22
56
+ - !ruby/object:Gem::Dependency
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: 0.0.16
62
+ name: logstash-devutils
63
+ prerelease: false
64
+ type: :development
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: 0.0.16
70
+ - !ruby/object:Gem::Dependency
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 0.3.4
76
+ name: jar-dependencies
77
+ prerelease: false
78
+ type: :development
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - "~>"
82
+ - !ruby/object:Gem::Version
83
+ version: 0.3.4
84
+ description: This gem is a Logstash plugin required to be installed on top of the
85
+ Logstash core pipeline using $LS_HOME/bin/logstash-plugin install gemname. This
86
+ gem is not a stand-alone program
87
+ email: info@elastic.co
88
+ executables: []
89
+ extensions: []
90
+ extra_rdoc_files: []
91
+ files:
92
+ - CHANGELOG.md
93
+ - CONTRIBUTING.md
94
+ - CONTRIBUTORS
95
+ - Gemfile
96
+ - LICENSE
97
+ - README.md
98
+ - docs/configuration.asciidoc
99
+ - docs/examples.asciidoc
100
+ - docs/index.asciidoc
101
+ - docs/metadata.asciidoc
102
+ - docs/resources.asciidoc
103
+ - lib/logstash-input-google_cloud_storage_jars.rb
104
+ - lib/logstash/inputs/cloud_storage/blob_adapter.rb
105
+ - lib/logstash/inputs/cloud_storage/blob_filter.rb
106
+ - lib/logstash/inputs/cloud_storage/client.rb
107
+ - lib/logstash/inputs/cloud_storage/file_reader.rb
108
+ - lib/logstash/inputs/cloud_storage/processed_db.rb
109
+ - lib/logstash/inputs/google_cloud_storage.rb
110
+ - logstash-input-google_cloud_storage.gemspec
111
+ - spec/fixtures/credentials.json
112
+ - spec/fixtures/helloworld.log
113
+ - spec/fixtures/helloworld.log.gz
114
+ - spec/inputs/cloud_storage/blob_adapter_spec.rb
115
+ - spec/inputs/cloud_storage/blob_filter_spec.rb
116
+ - spec/inputs/cloud_storage/client_spec.rb
117
+ - spec/inputs/cloud_storage/file_reader_spec.rb
118
+ - spec/inputs/cloud_storage/processed_db_spec.rb
119
+ - spec/inputs/google_cloud_storage_spec.rb
120
+ - vendor/jar-dependencies/com/fasterxml/jackson/core/jackson-core/2.1.3/jackson-core-2.1.3.jar
121
+ - vendor/jar-dependencies/com/google/api-client/google-api-client/1.23.0/google-api-client-1.23.0.jar
122
+ - vendor/jar-dependencies/com/google/api/api-common/1.5.0/api-common-1.5.0.jar
123
+ - vendor/jar-dependencies/com/google/api/gax-httpjson/0.40.0/gax-httpjson-0.40.0.jar
124
+ - vendor/jar-dependencies/com/google/api/gax/1.23.0/gax-1.23.0.jar
125
+ - vendor/jar-dependencies/com/google/api/grpc/proto-google-common-protos/1.7.0/proto-google-common-protos-1.7.0.jar
126
+ - vendor/jar-dependencies/com/google/api/grpc/proto-google-iam-v1/0.8.0/proto-google-iam-v1-0.8.0.jar
127
+ - vendor/jar-dependencies/com/google/apis/google-api-services-storage/v1-rev114-1.23.0/google-api-services-storage-v1-rev114-1.23.0.jar
128
+ - vendor/jar-dependencies/com/google/auth/google-auth-library-credentials/0.9.0/google-auth-library-credentials-0.9.0.jar
129
+ - vendor/jar-dependencies/com/google/auth/google-auth-library-oauth2-http/0.9.0/google-auth-library-oauth2-http-0.9.0.jar
130
+ - vendor/jar-dependencies/com/google/cloud/google-cloud-core-http/1.25.0/google-cloud-core-http-1.25.0.jar
131
+ - vendor/jar-dependencies/com/google/cloud/google-cloud-core/1.25.0/google-cloud-core-1.25.0.jar
132
+ - vendor/jar-dependencies/com/google/cloud/google-cloud-storage/1.25.0/google-cloud-storage-1.25.0.jar
133
+ - vendor/jar-dependencies/com/google/code/findbugs/jsr305/3.0.1/jsr305-3.0.1.jar
134
+ - vendor/jar-dependencies/com/google/code/gson/gson/2.7/gson-2.7.jar
135
+ - vendor/jar-dependencies/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar
136
+ - vendor/jar-dependencies/com/google/guava/guava-jdk5/17.0/guava-jdk5-17.0.jar
137
+ - vendor/jar-dependencies/com/google/guava/guava/20.0/guava-20.0.jar
138
+ - vendor/jar-dependencies/com/google/http-client/google-http-client-appengine/1.23.0/google-http-client-appengine-1.23.0.jar
139
+ - vendor/jar-dependencies/com/google/http-client/google-http-client-jackson/1.23.0/google-http-client-jackson-1.23.0.jar
140
+ - vendor/jar-dependencies/com/google/http-client/google-http-client-jackson2/1.23.0/google-http-client-jackson2-1.23.0.jar
141
+ - vendor/jar-dependencies/com/google/http-client/google-http-client/1.23.0/google-http-client-1.23.0.jar
142
+ - vendor/jar-dependencies/com/google/oauth-client/google-oauth-client/1.23.0/google-oauth-client-1.23.0.jar
143
+ - vendor/jar-dependencies/com/google/protobuf/protobuf-java-util/3.5.1/protobuf-java-util-3.5.1.jar
144
+ - vendor/jar-dependencies/com/google/protobuf/protobuf-java/3.5.1/protobuf-java-3.5.1.jar
145
+ - vendor/jar-dependencies/commons-codec/commons-codec/1.3/commons-codec-1.3.jar
146
+ - vendor/jar-dependencies/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar
147
+ - vendor/jar-dependencies/io/grpc/grpc-context/1.9.0/grpc-context-1.9.0.jar
148
+ - vendor/jar-dependencies/io/opencensus/opencensus-api/0.11.1/opencensus-api-0.11.1.jar
149
+ - vendor/jar-dependencies/io/opencensus/opencensus-contrib-http-util/0.11.1/opencensus-contrib-http-util-0.11.1.jar
150
+ - vendor/jar-dependencies/joda-time/joda-time/2.9.2/joda-time-2.9.2.jar
151
+ - vendor/jar-dependencies/org/apache/httpcomponents/httpclient/4.0.1/httpclient-4.0.1.jar
152
+ - vendor/jar-dependencies/org/apache/httpcomponents/httpcore/4.0.1/httpcore-4.0.1.jar
153
+ - vendor/jar-dependencies/org/codehaus/jackson/jackson-core-asl/1.9.11/jackson-core-asl-1.9.11.jar
154
+ - vendor/jar-dependencies/org/threeten/threetenbp/1.3.3/threetenbp-1.3.3.jar
155
+ homepage: http://www.elastic.co/guide/en/logstash/current/index.html
156
+ licenses:
157
+ - Apache-2.0
158
+ metadata:
159
+ logstash_plugin: 'true'
160
+ logstash_group: input
161
+ post_install_message:
162
+ rdoc_options: []
163
+ require_paths:
164
+ - lib
165
+ - vendor/jar-dependencies
166
+ required_ruby_version: !ruby/object:Gem::Requirement
167
+ requirements:
168
+ - - ">="
169
+ - !ruby/object:Gem::Version
170
+ version: '0'
171
+ required_rubygems_version: !ruby/object:Gem::Requirement
172
+ requirements:
173
+ - - ">="
174
+ - !ruby/object:Gem::Version
175
+ version: '0'
176
+ requirements: []
177
+ rubyforge_project:
178
+ rubygems_version: 2.6.13
179
+ signing_key:
180
+ specification_version: 4
181
+ summary: Plugin to import log data from Google Cloud Storage (GCS).
182
+ test_files:
183
+ - spec/fixtures/credentials.json
184
+ - spec/fixtures/helloworld.log
185
+ - spec/fixtures/helloworld.log.gz
186
+ - spec/inputs/cloud_storage/blob_adapter_spec.rb
187
+ - spec/inputs/cloud_storage/blob_filter_spec.rb
188
+ - spec/inputs/cloud_storage/client_spec.rb
189
+ - spec/inputs/cloud_storage/file_reader_spec.rb
190
+ - spec/inputs/cloud_storage/processed_db_spec.rb
191
+ - spec/inputs/google_cloud_storage_spec.rb