logstash-input-google_cloud_storage 0.9.0-java

Sign up to get free protection for your applications and to get access to all the features.
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