logstash-output-kusto 1.0.0-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +31 -0
  3. data/CONTRIBUTORS +10 -0
  4. data/Gemfile +20 -0
  5. data/LICENSE +201 -0
  6. data/README.md +79 -0
  7. data/lib/com/fasterxml/jackson/core/jackson-annotations/2.9.10/jackson-annotations-2.9.10.jar +0 -0
  8. data/lib/com/fasterxml/jackson/core/jackson-core/2.9.4/jackson-core-2.9.4.jar +0 -0
  9. data/lib/com/fasterxml/jackson/core/jackson-databind/2.9.10.7/jackson-databind-2.9.10.7.jar +0 -0
  10. data/lib/com/github/stephenc/jcip/jcip-annotations/1.0-1/jcip-annotations-1.0-1.jar +0 -0
  11. data/lib/com/google/code/gson/gson/2.8.0/gson-2.8.0.jar +0 -0
  12. data/lib/com/google/guava/guava/20.0/guava-20.0.jar +0 -0
  13. data/lib/com/microsoft/azure/adal4j/1.6.5/adal4j-1.6.5.jar +0 -0
  14. data/lib/com/microsoft/azure/azure-keyvault-core/1.0.0/azure-keyvault-core-1.0.0.jar +0 -0
  15. data/lib/com/microsoft/azure/azure-storage/8.3.0/azure-storage-8.3.0.jar +0 -0
  16. data/lib/com/microsoft/azure/kusto/kusto-data/2.1.2/kusto-data-2.1.2.jar +0 -0
  17. data/lib/com/microsoft/azure/kusto/kusto-ingest/2.1.2/kusto-ingest-2.1.2.jar +0 -0
  18. data/lib/com/nimbusds/lang-tag/1.5/lang-tag-1.5.jar +0 -0
  19. data/lib/com/nimbusds/nimbus-jose-jwt/9.3/nimbus-jose-jwt-9.3.jar +0 -0
  20. data/lib/com/nimbusds/oauth2-oidc-sdk/6.5/oauth2-oidc-sdk-6.5.jar +0 -0
  21. data/lib/com/sun/mail/javax.mail/1.6.1/javax.mail-1.6.1.jar +0 -0
  22. data/lib/com/univocity/univocity-parsers/2.1.1/univocity-parsers-2.1.1.jar +0 -0
  23. data/lib/commons-codec/commons-codec/1.14/commons-codec-1.14.jar +0 -0
  24. data/lib/commons-logging/commons-logging/1.2/commons-logging-1.2.jar +0 -0
  25. data/lib/javax/activation/activation/1.1/activation-1.1.jar +0 -0
  26. data/lib/logstash-output-kusto_jars.rb +64 -0
  27. data/lib/logstash/outputs/kusto.rb +413 -0
  28. data/lib/logstash/outputs/kusto/ingestor.rb +123 -0
  29. data/lib/logstash/outputs/kusto/interval.rb +81 -0
  30. data/lib/net/minidev/accessors-smart/1.2/accessors-smart-1.2.jar +0 -0
  31. data/lib/net/minidev/json-smart/2.3/json-smart-2.3.jar +0 -0
  32. data/lib/org/apache/commons/commons-lang3/3.9/commons-lang3-3.9.jar +0 -0
  33. data/lib/org/apache/httpcomponents/httpclient/4.5.8/httpclient-4.5.8.jar +0 -0
  34. data/lib/org/apache/httpcomponents/httpcore/4.4.11/httpcore-4.4.11.jar +0 -0
  35. data/lib/org/jetbrains/annotations/17.0.0/annotations-17.0.0.jar +0 -0
  36. data/lib/org/json/json/20190722/json-20190722.jar +0 -0
  37. data/lib/org/ow2/asm/asm/5.0.4/asm-5.0.4.jar +0 -0
  38. data/lib/org/slf4j/slf4j-api/1.8.0-beta4/slf4j-api-1.8.0-beta4.jar +0 -0
  39. data/logstash-output-kusto.gemspec +35 -0
  40. data/spec/outputs/kusto/ingestor_spec.rb +109 -0
  41. data/spec/outputs/kusto_spec.rb +54 -0
  42. data/spec/spec_helpers.rb +21 -0
  43. metadata +203 -0
@@ -0,0 +1,81 @@
1
+ # encoding: utf-8
2
+
3
+ require 'logstash/outputs/base'
4
+ require 'logstash/namespace'
5
+ require 'logstash/errors'
6
+
7
+ class LogStash::Outputs::Kusto < LogStash::Outputs::Base
8
+ ##
9
+ # Bare-bones utility for running a block of code at an interval.
10
+ #
11
+ class Interval
12
+ ##
13
+ # Initializes a new Interval with the given arguments and starts it
14
+ # before returning it.
15
+ #
16
+ # @param interval [Integer] (see: Interval#initialize)
17
+ # @param procsy [#call] (see: Interval#initialize)
18
+ #
19
+ # @return [Interval]
20
+ #
21
+ def self.start(interval, procsy)
22
+ new(interval, procsy).tap(&:start)
23
+ end
24
+
25
+ ##
26
+ # @param interval [Integer]: time in seconds to wait between calling the given proc
27
+ # @param procsy [#call]: proc or lambda to call periodically; must not raise exceptions.
28
+ def initialize(interval, procsy)
29
+ @interval = interval
30
+ @procsy = procsy
31
+
32
+ # Mutex, ConditionVariable, etc.
33
+ @mutex = Mutex.new
34
+ @sleeper = ConditionVariable.new
35
+ end
36
+
37
+ ##
38
+ # Starts the interval, or returns if it has already been started.
39
+ #
40
+ # @return [void]
41
+ def start
42
+ @mutex.synchronize do
43
+ return if @thread && @thread.alive?
44
+
45
+ @thread = Thread.new { run }
46
+ end
47
+ end
48
+
49
+ ##
50
+ # Stop the interval.
51
+ # Does not interrupt if execution is in-progress.
52
+ def stop
53
+ @mutex.synchronize do
54
+ @stopped = true
55
+ end
56
+
57
+ @thread && @thread.join
58
+ end
59
+
60
+ ##
61
+ # @return [Boolean]
62
+ def alive?
63
+ @thread && @thread.alive?
64
+ end
65
+
66
+ private
67
+
68
+ def run
69
+ @mutex.synchronize do
70
+ loop do
71
+ @sleeper.wait(@mutex, @interval)
72
+ break if @stopped
73
+
74
+ @procsy.call
75
+ end
76
+ end
77
+ ensure
78
+ @sleeper.broadcast
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,35 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = 'logstash-output-kusto' #WATCH OUT: we hardcoded usage of this name in one of the classes.
3
+ s.version = '1.0.0'
4
+ s.licenses = ['Apache-2.0']
5
+ s.summary = 'Writes events to Azure Data Explorer (Kusto)'
6
+ s.description = 'This is a logstash output plugin used to write events to an Azure Data Explorer (a.k.a Kusto)'
7
+ s.homepage = 'https://github.com/Azure/logstash-output-kusto'
8
+ s.authors = ['Tamir Kamara', 'Asaf Mahlev']
9
+ s.email = 'nugetkusto@microsoft.com'
10
+ s.require_paths = ['lib']
11
+ s.platform = 'java'
12
+
13
+ # Files
14
+ s.files = Dir['lib/**/*', 'spec/**/*', 'vendor/**/*', '*.gemspec', '*.md', 'CONTRIBUTORS', 'Gemfile', 'LICENSE', 'NOTICE.TXT']
15
+
16
+ # Tests
17
+ s.test_files = s.files.grep(%r{^(test|spec|features)/})
18
+
19
+ # Special flag to let us know this is actually a logstash plugin
20
+ s.metadata = { "logstash_plugin" => "true", "logstash_group" => "output" }
21
+
22
+ # Gem dependencies
23
+ s.add_runtime_dependency 'logstash-core-plugin-api', '~> 2.0'
24
+ s.add_runtime_dependency 'logstash-codec-json_lines'
25
+ s.add_runtime_dependency 'logstash-codec-line'
26
+
27
+ s.add_development_dependency 'logstash-devutils'
28
+ s.add_development_dependency 'flores'
29
+ s.add_development_dependency 'logstash-input-generator'
30
+ s.add_development_dependency 'ruby-maven', '~> 3.3.11'
31
+
32
+ # Jar dependencies
33
+ s.requirements << "jar 'com.microsoft.azure.kusto, kusto-ingest, 2.1.2"
34
+ s.add_runtime_dependency 'jar-dependencies'
35
+ end
@@ -0,0 +1,109 @@
1
+ # encoding: utf-8
2
+ require_relative "../../spec_helpers.rb"
3
+ require 'logstash/outputs/kusto'
4
+ require 'logstash/outputs/kusto/ingestor'
5
+
6
+ describe LogStash::Outputs::Kusto::Ingestor do
7
+
8
+ let(:ingest_url) { "mycluster" }
9
+ let(:app_id) { "myid" }
10
+ let(:app_key) { LogStash::Util::Password.new("mykey") }
11
+ let(:app_tenant) { "mytenant" }
12
+ let(:database) { "mydatabase" }
13
+ let(:table) { "mytable" }
14
+ let(:json_mapping) { "mymapping" }
15
+ let(:delete_local) { false }
16
+ let(:logger) { spy('logger') }
17
+
18
+ describe '#initialize' do
19
+
20
+ it 'does not throw an error when initializing' do
21
+ # note that this will cause an internal error since connection is being tried.
22
+ # however we still want to test that all the java stuff is working as expected
23
+ expect {
24
+ ingestor = described_class.new(ingest_url, app_id, app_key, app_tenant, database, table, json_mapping, delete_local, logger)
25
+ ingestor.stop
26
+ }.not_to raise_error
27
+ end
28
+
29
+ dynamic_name_array = ['/a%{name}/', '/a %{name}/', '/a- %{name}/', '/a- %{name}']
30
+
31
+ context 'doesnt allow database to have some dynamic part' do
32
+ dynamic_name_array.each do |test_database|
33
+ it "with database: #{test_database}" do
34
+ expect {
35
+ ingestor = described_class.new(ingest_url, app_id, app_key, app_tenant, test_database, table, json_mapping, delete_local, logger)
36
+ ingestor.stop
37
+ }.to raise_error(LogStash::ConfigurationError)
38
+ end
39
+ end
40
+ end
41
+
42
+ context 'doesnt allow table to have some dynamic part' do
43
+ dynamic_name_array.each do |test_table|
44
+ it "with database: #{test_table}" do
45
+ expect {
46
+ ingestor = described_class.new(ingest_url, app_id, app_key, app_tenant, database, test_table, json_mapping, delete_local, logger)
47
+ ingestor.stop
48
+ }.to raise_error(LogStash::ConfigurationError)
49
+ end
50
+ end
51
+ end
52
+
53
+ context 'doesnt allow mapping to have some dynamic part' do
54
+ dynamic_name_array.each do |test_json_mapping|
55
+ it "with database: #{test_json_mapping}" do
56
+ expect {
57
+ ingestor = described_class.new(ingest_url, app_id, app_key, app_tenant, database, table, test_json_mapping, delete_local, logger)
58
+ ingestor.stop
59
+ }.to raise_error(LogStash::ConfigurationError)
60
+ end
61
+ end
62
+ end
63
+
64
+ end
65
+
66
+ # describe 'receiving events' do
67
+
68
+ # context 'with non-zero flush interval' do
69
+ # let(:temporary_output_file) { Stud::Temporary.pathname }
70
+
71
+ # let(:event_count) { 100 }
72
+ # let(:flush_interval) { 5 }
73
+
74
+ # let(:events) do
75
+ # event_count.times.map do |idx|
76
+ # LogStash::Event.new('subject' => idx)
77
+ # end
78
+ # end
79
+
80
+ # let(:output) { described_class.new(options.merge( {'path' => temporary_output_file, 'flush_interval' => flush_interval, 'delete_temp_files' => false } )) }
81
+
82
+ # before(:each) { output.register }
83
+
84
+ # after(:each) do
85
+ # output.close
86
+ # File.exist?(temporary_output_file) && File.unlink(temporary_output_file)
87
+ # File.exist?(temporary_output_file + '.kusto') && File.unlink(temporary_output_file + '.kusto')
88
+ # end
89
+
90
+ # it 'eventually flushes without receiving additional events' do
91
+ # output.multi_receive_encoded(events)
92
+
93
+ # # events should not all be flushed just yet...
94
+ # expect(File.read(temporary_output_file)).to satisfy("have less than #{event_count} lines") do |contents|
95
+ # contents && contents.lines.count < event_count
96
+ # end
97
+
98
+ # # wait for the flusher to run...
99
+ # sleep(flush_interval + 1)
100
+
101
+ # # events should all be flushed
102
+ # expect(File.read(temporary_output_file)).to satisfy("have exactly #{event_count} lines") do |contents|
103
+ # contents && contents.lines.count == event_count
104
+ # end
105
+ # end
106
+ # end
107
+
108
+ # end
109
+ end
@@ -0,0 +1,54 @@
1
+ # encoding: utf-8
2
+ require 'logstash/devutils/rspec/spec_helper'
3
+ require 'logstash/outputs/kusto'
4
+ require 'logstash/codecs/plain'
5
+ require 'logstash/event'
6
+
7
+ describe LogStash::Outputs::Kusto do
8
+
9
+ let(:options) { { "path" => "./kusto_tst/%{+YYYY-MM-dd-HH-mm}",
10
+ "ingest_url" => "mycluster",
11
+ "app_id" => "myid",
12
+ "app_key" => "mykey",
13
+ "app_tenant" => "mytenant",
14
+ "database" => "mydatabase",
15
+ "table" => "mytable",
16
+ "json_mapping" => "mymapping"
17
+ } }
18
+
19
+ describe '#register' do
20
+
21
+ it 'doesnt allow the path to start with a dynamic string' do
22
+ kusto = described_class.new(options.merge( {'path' => '/%{name}'} ))
23
+ expect { kusto.register }.to raise_error(LogStash::ConfigurationError)
24
+ kusto.close
25
+ end
26
+
27
+ it 'path must include a dynamic string to allow file rotation' do
28
+ kusto = described_class.new(options.merge( {'path' => '/{name}'} ))
29
+ expect { kusto.register }.to raise_error(LogStash::ConfigurationError)
30
+ kusto.close
31
+ end
32
+
33
+
34
+ dynamic_name_array = ['/a%{name}/', '/a %{name}/', '/a- %{name}/', '/a- %{name}']
35
+
36
+ context 'doesnt allow the root directory to have some dynamic part' do
37
+ dynamic_name_array.each do |test_path|
38
+ it "with path: #{test_path}" do
39
+ kusto = described_class.new(options.merge( {'path' => test_path} ))
40
+ expect { kusto.register }.to raise_error(LogStash::ConfigurationError)
41
+ kusto.close
42
+ end
43
+ end
44
+ end
45
+
46
+ it 'allow to have dynamic part after the file root' do
47
+ kusto = described_class.new(options.merge({'path' => '/tmp/%{name}'}))
48
+ expect { kusto.register }.not_to raise_error
49
+ kusto.close
50
+ end
51
+
52
+ end
53
+
54
+ end
@@ -0,0 +1,21 @@
1
+ # encoding: utf-8
2
+ require "logstash/devutils/rspec/spec_helper"
3
+ require "logstash/logging/logger"
4
+
5
+ LogStash::Logging::Logger::configure_logging("debug")
6
+
7
+ RSpec.configure do |config|
8
+ # register around filter that captures stdout and stderr
9
+ config.around(:each) do |example|
10
+ $stdout = StringIO.new
11
+ $stderr = StringIO.new
12
+
13
+ example.run
14
+
15
+ example.metadata[:stdout] = $stdout.string
16
+ example.metadata[:stderr] = $stderr.string
17
+
18
+ $stdout = STDOUT
19
+ $stderr = STDERR
20
+ end
21
+ end
metadata ADDED
@@ -0,0 +1,203 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: logstash-output-kusto
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: java
6
+ authors:
7
+ - Tamir Kamara
8
+ - Asaf Mahlev
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2020-12-27 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: '2.0'
20
+ name: logstash-core-plugin-api
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "~>"
26
+ - !ruby/object:Gem::Version
27
+ version: '2.0'
28
+ - !ruby/object:Gem::Dependency
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ name: logstash-codec-json_lines
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ - !ruby/object:Gem::Dependency
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ name: logstash-codec-line
49
+ type: :runtime
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ - !ruby/object:Gem::Dependency
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ name: logstash-devutils
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ - !ruby/object:Gem::Dependency
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ name: flores
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ - !ruby/object:Gem::Dependency
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ name: logstash-input-generator
91
+ type: :development
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
98
+ - !ruby/object:Gem::Dependency
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 3.3.11
104
+ name: ruby-maven
105
+ type: :development
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - "~>"
110
+ - !ruby/object:Gem::Version
111
+ version: 3.3.11
112
+ - !ruby/object:Gem::Dependency
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ name: jar-dependencies
119
+ type: :runtime
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - ">="
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ description: This is a logstash output plugin used to write events to an Azure Data
127
+ Explorer (a.k.a Kusto)
128
+ email: nugetkusto@microsoft.com
129
+ executables: []
130
+ extensions: []
131
+ extra_rdoc_files: []
132
+ files:
133
+ - CHANGELOG.md
134
+ - CONTRIBUTORS
135
+ - Gemfile
136
+ - LICENSE
137
+ - README.md
138
+ - lib/com/fasterxml/jackson/core/jackson-annotations/2.9.10/jackson-annotations-2.9.10.jar
139
+ - lib/com/fasterxml/jackson/core/jackson-core/2.9.4/jackson-core-2.9.4.jar
140
+ - lib/com/fasterxml/jackson/core/jackson-databind/2.9.10.7/jackson-databind-2.9.10.7.jar
141
+ - lib/com/github/stephenc/jcip/jcip-annotations/1.0-1/jcip-annotations-1.0-1.jar
142
+ - lib/com/google/code/gson/gson/2.8.0/gson-2.8.0.jar
143
+ - lib/com/google/guava/guava/20.0/guava-20.0.jar
144
+ - lib/com/microsoft/azure/adal4j/1.6.5/adal4j-1.6.5.jar
145
+ - lib/com/microsoft/azure/azure-keyvault-core/1.0.0/azure-keyvault-core-1.0.0.jar
146
+ - lib/com/microsoft/azure/azure-storage/8.3.0/azure-storage-8.3.0.jar
147
+ - lib/com/microsoft/azure/kusto/kusto-data/2.1.2/kusto-data-2.1.2.jar
148
+ - lib/com/microsoft/azure/kusto/kusto-ingest/2.1.2/kusto-ingest-2.1.2.jar
149
+ - lib/com/nimbusds/lang-tag/1.5/lang-tag-1.5.jar
150
+ - lib/com/nimbusds/nimbus-jose-jwt/9.3/nimbus-jose-jwt-9.3.jar
151
+ - lib/com/nimbusds/oauth2-oidc-sdk/6.5/oauth2-oidc-sdk-6.5.jar
152
+ - lib/com/sun/mail/javax.mail/1.6.1/javax.mail-1.6.1.jar
153
+ - lib/com/univocity/univocity-parsers/2.1.1/univocity-parsers-2.1.1.jar
154
+ - lib/commons-codec/commons-codec/1.14/commons-codec-1.14.jar
155
+ - lib/commons-logging/commons-logging/1.2/commons-logging-1.2.jar
156
+ - lib/javax/activation/activation/1.1/activation-1.1.jar
157
+ - lib/logstash-output-kusto_jars.rb
158
+ - lib/logstash/outputs/kusto.rb
159
+ - lib/logstash/outputs/kusto/ingestor.rb
160
+ - lib/logstash/outputs/kusto/interval.rb
161
+ - lib/net/minidev/accessors-smart/1.2/accessors-smart-1.2.jar
162
+ - lib/net/minidev/json-smart/2.3/json-smart-2.3.jar
163
+ - lib/org/apache/commons/commons-lang3/3.9/commons-lang3-3.9.jar
164
+ - lib/org/apache/httpcomponents/httpclient/4.5.8/httpclient-4.5.8.jar
165
+ - lib/org/apache/httpcomponents/httpcore/4.4.11/httpcore-4.4.11.jar
166
+ - lib/org/jetbrains/annotations/17.0.0/annotations-17.0.0.jar
167
+ - lib/org/json/json/20190722/json-20190722.jar
168
+ - lib/org/ow2/asm/asm/5.0.4/asm-5.0.4.jar
169
+ - lib/org/slf4j/slf4j-api/1.8.0-beta4/slf4j-api-1.8.0-beta4.jar
170
+ - logstash-output-kusto.gemspec
171
+ - spec/outputs/kusto/ingestor_spec.rb
172
+ - spec/outputs/kusto_spec.rb
173
+ - spec/spec_helpers.rb
174
+ homepage: https://github.com/Azure/logstash-output-kusto
175
+ licenses:
176
+ - Apache-2.0
177
+ metadata:
178
+ logstash_plugin: 'true'
179
+ logstash_group: output
180
+ post_install_message:
181
+ rdoc_options: []
182
+ require_paths:
183
+ - lib
184
+ required_ruby_version: !ruby/object:Gem::Requirement
185
+ requirements:
186
+ - - ">="
187
+ - !ruby/object:Gem::Version
188
+ version: '0'
189
+ required_rubygems_version: !ruby/object:Gem::Requirement
190
+ requirements:
191
+ - - ">="
192
+ - !ruby/object:Gem::Version
193
+ version: '0'
194
+ requirements:
195
+ - jar 'com.microsoft.azure.kusto, kusto-ingest, 2.1.2
196
+ rubygems_version: 3.0.6
197
+ signing_key:
198
+ specification_version: 4
199
+ summary: Writes events to Azure Data Explorer (Kusto)
200
+ test_files:
201
+ - spec/outputs/kusto/ingestor_spec.rb
202
+ - spec/outputs/kusto_spec.rb
203
+ - spec/spec_helpers.rb