fluent-plugin-windows-eventlog 0.1.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 182e98e93e8d43f333025671ae6698ccddefd580
4
- data.tar.gz: fdeda6fa7866b56938cfa714a0025aae635453ef
3
+ metadata.gz: 44561910d111a16a85de6b5d9faee8cf052fed71
4
+ data.tar.gz: 2bc58308403d20000efe50f2b6f73e86a9a6585a
5
5
  SHA512:
6
- metadata.gz: 7e46f28f6814ed735edb7db078a5784614f4e620457f1082737496b6ae80188168ed8dd5f3a5233e0ec66a261fb26a5519fc172f6821ab170c11d45ebd9568c1
7
- data.tar.gz: dcb0c4be720f231921fb7dfa5430563c96cf31b392661086e2e328e2c3d4e42412328258cceb3b062b5ab4db7563a159874c4b9d75f5b159cbd474e7b8b6a627
6
+ metadata.gz: 194172daa6b8dd788a785d89e392e3698fe7ed6b8ffa0de360ddc89bf2bd9d37818d8abd43bf5c6e71434cffdd603a91126f674ab80c45455aeffe969a5101c2
7
+ data.tar.gz: 2b45ac6f8ce1c4d142ce1aae21104945c2bdb706db26c57eb6f9a0e2ef90ba468a7b3fd5172242817c6e43f3b1575b2167bcd5f65ebd52600f4f461f3c0780ad
data/README.md CHANGED
@@ -2,65 +2,62 @@
2
2
 
3
3
  ## Component
4
4
 
5
- #### fluentd Input plugin for Windows Event Log
5
+ #### fluentd Input plugin for the Windows Event Log
6
6
 
7
- [Fluentd](http://fluentd.org) plugin to read Windows Event Log.
8
- You must use fluentd 'Windows' brach to use me, and it doesn't work on Linux of course.
7
+ [Fluentd](http://fluentd.org) plugin to read the Windows Event Log.
9
8
 
10
9
  ## Installation
11
10
  gem install fluent-plugin-windows-eventlog
12
11
 
13
12
  ## Configuration
14
- #### fluentd Input plugin for Windows Event Log
13
+ #### fluentd Input plugin for the Windows Event Log
15
14
 
16
15
  <source>
17
- type windows_eventlog
16
+ @type windows_eventlog
17
+ @id windows_eventlog
18
18
  channels application,system
19
- pos_file c:\temp\mypos
20
19
  read_interval 2
21
20
  tag winevt.raw
21
+ <storage>
22
+ @type local # @type local is the default.
23
+ persistent true # default is true. Set to false to use in-memory storage.
24
+ path ./tmp/storage.json # This is required when persistent is true.
25
+ # Or, please consider using <system> section's `root_dir` parameter.
26
+ </storage>
22
27
  </source>
23
28
 
24
-
25
29
  #### parameters
26
30
 
27
31
  |name | description |
28
32
  |:----- |:----- |
29
- |channels | (option) 'applicaion' as default. one or combination of {application, system, setup, security}. If you want to read setup or security, administrator priv is required to launch fluentd. |
30
- |pos_file | (option, but higly recommended) a path of position file to save record numbers. |
31
- |read_interval | (option) a read interval in second. 2 seconds as default.|
32
- |from_encoding | (option) an input characters encoding. nil as default.|
33
- |encoding | (option) an output characters encoding. nil as default.|
34
-
33
+ |`channels` | (option) 'application' as default. One or more of {'application', 'system', 'setup', 'security'}. If you want to read 'setup' or 'security' logs, you must launch fluentd with administrator privileges.|
34
+ |`keys` | (option) A subset of [keys](#read-keys) to read. Defaults to all keys.|
35
+ |`read_interval` | (option) Read interval in seconds. 2 seconds as default.|
36
+ |`from_encoding` | (option) Input character encoding. `nil` as default.|
37
+ |`encoding` | (option) Output character encoding. `nil` as default.|
38
+ |`read_from_head`| (option) Start to read the entries from the oldest, not from when fluentd is started. Defaults to `false`.|
39
+ |`<storage>` | Setting for `storage` plugin for recording read position like `in_tail`'s `pos_file`.|
35
40
 
36
41
  #### read keys
37
- This plugin reads follows from Windws Event Log. No customization is allowed currently.
42
+ This plugin reads the following fields from Windows Event Log entries. Use the `keys` configuration option to select a subset. No other customization is allowed for now.
38
43
 
39
44
  |key|
40
45
  |:----- |
41
- |record_number |
42
- |time_generated|
43
- |time_written |
44
- |event_id |
45
- |event_type |
46
- |event_category |
47
- |source_name |
48
- |computer_name |
49
- |user |
50
- |description |
51
-
52
-
53
-
54
- ## Etc.
55
- 'read_from_head' is not supporeted currently.You can read newer records after you start first.
56
- No customize to read information keys.
57
-
58
-
59
-
46
+ |`record_number` |
47
+ |`time_generated`|
48
+ |`time_written` |
49
+ |`event_id` |
50
+ |`event_type` |
51
+ |`event_category`|
52
+ |`source_name` |
53
+ |`computer_name` |
54
+ |`user` |
55
+ |`description` |
56
+ |`string_inserts`|
60
57
 
61
58
  ## Copyright
62
- ####Copyright
59
+ #### Copyright
63
60
  Copyright(C) 2014- @okahashi117
64
- ####License
61
+ #### License
65
62
  Apache License, Version 2.0
66
63
 
data/appveyor.yml ADDED
@@ -0,0 +1,27 @@
1
+ version: '{build}'
2
+
3
+ # init:
4
+ # - ps: iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1'))
5
+
6
+ install:
7
+ - SET PATH=C:\Ruby%ruby_version%\bin;%PATH%
8
+ - "%devkit%\\devkitvars.bat"
9
+ - ruby --version
10
+ - gem --version
11
+ - bundle install
12
+ build: off
13
+ test_script:
14
+ - bundle exec rake test
15
+ # - bundle exec rake test TESTOPTS=-v
16
+
17
+ branches:
18
+ only:
19
+ - master
20
+
21
+ # https://www.appveyor.com/docs/installed-software/#ruby
22
+ environment:
23
+ matrix:
24
+ - ruby_version: "23-x64"
25
+ devkit: C:\Ruby23-x64\DevKit
26
+ - ruby_version: "23"
27
+ devkit: C:\Ruby23\DevKit
@@ -4,9 +4,9 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = "fluent-plugin-windows-eventlog"
7
- spec.version = "0.1.0"
7
+ spec.version = "0.2.1"
8
8
  spec.authors = ["okahashi117", "Hiroshi Hatake", "Masahiro Nakagawa"]
9
- spec.email = ["naruki_okahashi@jbat.co.jp", "cosmo0920.wp@gmail.com", "repeatedly@gmail.com"]
9
+ spec.email = ["naruki_okahashi@jbat.co.jp", "cosmo0920.oucc@gmail.com", "repeatedly@gmail.com"]
10
10
  spec.summary = %q{Fluentd Input plugin to read windows event log.}
11
11
  spec.description = %q{Fluentd Input plugin to read windwos event log.}
12
12
  spec.homepage = "https://github.com/fluent/fluent-plugin-windows-eventlog"
@@ -20,6 +20,6 @@ Gem::Specification.new do |spec|
20
20
  spec.add_development_dependency "bundler"
21
21
  spec.add_development_dependency "rake"
22
22
  spec.add_development_dependency "test-unit", "~> 3.2.0"
23
- spec.add_runtime_dependency "fluentd", [">= 0.14.11", "< 2"]
23
+ spec.add_runtime_dependency "fluentd", [">= 0.14.12", "< 2"]
24
24
  spec.add_runtime_dependency "win32-eventlog"
25
25
  end
@@ -6,28 +6,37 @@ module Fluent::Plugin
6
6
  class WindowsEventLogInput < Input
7
7
  Fluent::Plugin.register_input('windows_eventlog', self)
8
8
 
9
- helpers :timer
10
-
11
- KEY_MAP = {"record_number" => :record_number,
12
- "time_generated" => :time_generated,
13
- "time_written" => :time_written,
14
- "event_id" => :event_id,
15
- "event_type" => :event_type,
16
- "event_category" => :category,
17
- "source_name" => :source,
18
- "computer_name" => :computer,
19
- "user" => :user,
20
- "description" => :description}
9
+ helpers :timer, :storage
10
+
11
+ DEFAULT_STORAGE_TYPE = 'local'
12
+ KEY_MAP = {"record_number" => [:record_number, :string],
13
+ "time_generated" => [:time_generated, :string],
14
+ "time_written" => [:time_written, :string],
15
+ "event_id" => [:event_id, :string],
16
+ "event_type" => [:event_type, :string],
17
+ "event_category" => [:category, :string],
18
+ "source_name" => [:source, :string],
19
+ "computer_name" => [:computer, :string],
20
+ "user" => [:user, :string],
21
+ "description" => [:description, :string],
22
+ "string_inserts" => [:string_inserts, :array]}
21
23
 
22
24
  config_param :tag, :string
23
25
  config_param :read_interval, :time, default: 2
24
- config_param :pos_file, :string, default: nil
25
- config_param :channels, :array, default: ['Application']
26
- config_param :keys, :string, default: []
26
+ config_param :pos_file, :string, default: nil,
27
+ obsoleted: "This section is not used anymore. Use 'store_pos' instead."
28
+ config_param :channels, :array, default: ['application']
29
+ config_param :keys, :array, default: []
27
30
  config_param :read_from_head, :bool, default: false
28
31
  config_param :from_encoding, :string, default: nil
29
32
  config_param :encoding, :string, default: nil
30
33
 
34
+ config_section :storage do
35
+ config_set_default :usage, "positions"
36
+ config_set_default :@type, DEFAULT_STORAGE_TYPE
37
+ config_set_default :persistent, true
38
+ end
39
+
31
40
  attr_reader :chs
32
41
 
33
42
  def initialize
@@ -55,6 +64,7 @@ module Fluent::Plugin
55
64
  else
56
65
  method(:no_encode_record)
57
66
  end
67
+ @pos_storage = storage_create(usage: "positions")
58
68
  end
59
69
 
60
70
  def configure_encoding
@@ -92,229 +102,86 @@ module Fluent::Plugin
92
102
 
93
103
  def start
94
104
  super
95
- if @pos_file
96
- @pf_file = File.open(@pos_file, File::RDWR|File::CREAT|File::BINARY)
97
- @pf_file.sync = true
98
- @pf = PositionFile.parse(@pf_file)
99
- end
100
- start_watchers(@chs)
101
- end
102
-
103
- def shutdown
104
- stop_watchers(@tails.keys, true)
105
- @pf_file.close if @pf_file
106
- super
107
- end
108
-
109
- def setup_wacther(ch, pe)
110
- wlw = WindowsLogWatcher.new(ch, pe, &method(:receive_lines))
111
- wlw.attach do |watcher|
112
- wlw.timer_trigger = timer_execute(:in_winevtlog, @read_interval, &watcher.method(:on_notify))
113
- end
114
- wlw
115
- end
116
-
117
- def start_watchers(chs)
118
- chs.each { |ch|
119
- pe = nil
120
- if @pf
121
- pe = @pf[ch]
122
- if @read_from_head && pe.read_num.zero?
123
- el = Win32::EventLog.open(ch)
124
- pe.update(el.oldest_record_number-1,1)
125
- el.close
126
- end
105
+ @chs.each do |ch|
106
+ start, num = @pos_storage.get(ch)
107
+ if @read_from_head || (!num || num.zero?)
108
+ el = Win32::EventLog.open(ch)
109
+ @pos_storage.put(ch, [el.oldest_record_number - 1, 1])
110
+ el.close
127
111
  end
128
- @tails[ch] = setup_wacther(ch, pe)
129
- }
130
- end
131
-
132
- def stop_watchers(chs, unwatched = false)
133
- chs.each { |ch|
134
- wlw = @tails.delete(ch)
135
- if wlw
136
- wlw.unwatched = unwatched
137
- close_watcher(wlw)
112
+ timer_execute("in_windows_eventlog_#{escape_channel(ch)}".to_sym, @read_interval) do
113
+ on_notify(ch)
138
114
  end
139
- }
115
+ end
140
116
  end
141
117
 
142
- def close_watcher(wlw)
143
- wlw.close
144
- # flush_buffer(wlw)
118
+ def escape_channel(ch)
119
+ ch.gsub(/[^a-zA-Z0-9]/, '_')
145
120
  end
146
121
 
147
- def receive_lines(ch, lines, pe)
122
+ def receive_lines(ch, lines)
148
123
  return if lines.empty?
149
124
  begin
150
125
  for r in lines
151
126
  h = {"channel" => ch}
152
- @keynames.each {|k| h[k]=@receive_handlers.call(r.send(KEY_MAP[k]).to_s)}
153
- #h = Hash[@keynames.map {|k| [k, r.send(KEY_MAP[k]).to_s]}]
127
+ @keynames.each do |k|
128
+ type = KEY_MAP[k][1]
129
+ value = r.send(KEY_MAP[k][0])
130
+ h[k]=case type
131
+ when :string
132
+ @receive_handlers.call(value.to_s)
133
+ when :array
134
+ value.map {|v| @receive_handlers.call(v.to_s)}
135
+ else
136
+ raise "Unknown value type: #{type}"
137
+ end
138
+ end
139
+ #h = Hash[@keynames.map {|k| [k, r.send(KEY_MAP[k][0]).to_s]}]
154
140
  router.emit(@tag, Fluent::Engine.now, h)
155
- pe[1] +=1
156
141
  end
157
- rescue
158
- $log.error "unexpected error", error: $!.to_s
159
- $log.error_backtrace
142
+ rescue => e
143
+ log.error "unexpected error", error: e
144
+ log.error_backtrace
160
145
  end
161
146
  end
162
147
 
148
+ def on_notify(ch)
149
+ el = Win32::EventLog.open(ch)
163
150
 
164
- class WindowsLogWatcher
165
- def initialize(ch, pe, &receive_lines)
166
- @ch = ch
167
- @pe = pe || MemoryPositionEntry.new
168
- @receive_lines = receive_lines
169
- @timer_trigger = nil
170
- end
151
+ current_oldest_record_number = el.oldest_record_number
152
+ current_total_records = el.total_records
171
153
 
172
- attr_reader :ch
173
- attr_accessor :unwatched
174
- attr_accessor :pe
175
- attr_accessor :timer_trigger
154
+ read_start, read_num = @pos_storage.get(ch)
176
155
 
177
- def attach
178
- yield self
179
- on_notify
156
+ # if total_records is zero, oldest_record_number has no meaning.
157
+ if current_total_records == 0
158
+ return
180
159
  end
181
160
 
182
- def detach
183
- @timer_trigger.detach if @timer_trigger.attached?
161
+ if read_start == 0 && read_num == 0
162
+ @pos_storage.put(ch, [current_oldest_record_number, current_total_records])
163
+ return
184
164
  end
185
165
 
186
- def close
187
- detach
188
- end
189
-
190
- def on_notify
191
- el = Win32::EventLog.open(@ch)
192
- rl_sn = [el.oldest_record_number, el.total_records]
193
- pe_sn = [@pe.read_start, @pe.read_num]
194
- # if total_records is zero, oldest_record_number has no meaning.
195
- if rl_sn[1] == 0
196
- return
197
- end
198
-
199
- if pe_sn[0] == 0 && pe_sn[1] == 0
200
- @pe.update(rl_sn[0], rl_sn[1])
201
- return
202
- end
203
-
204
- cur_end = rl_sn[0] + rl_sn[1] -1
205
- old_end = pe_sn[0] + pe_sn[1] -1
206
-
207
- if (rl_sn[0] < pe_sn[0])
208
- # may be a record number rotated.
209
- cur_end += 0xFFFFFFFF
210
- end
211
-
212
- if (cur_end < old_end)
213
- # something occured.
214
- @pe.update(rl_sn[0], rl_sn[1])
215
- return
216
- end
166
+ current_end = current_oldest_record_number + current_total_records - 1
167
+ old_end = read_start + read_num - 1
217
168
 
218
- read_more = false
219
- begin
220
- numlines = cur_end - old_end
221
-
222
- winlogs = el.read(Win32::EventLog::SEEK_READ | Win32::EventLog::FORWARDS_READ, old_end + 1)
223
- @receive_lines.call(@ch, winlogs, pe_sn)
224
-
225
- @pe.update(pe_sn[0], pe_sn[1])
226
- old_end = pe_sn[0] + pe_sn[1] -1
227
- end while read_more
228
- el.close
169
+ if current_oldest_record_number < read_start
170
+ # may be a record number rotated.
171
+ current_end += 0xFFFFFFFF
229
172
  end
230
- end
231
173
 
232
- class PositionFile
233
- def initialize(file, map, last_pos)
234
- @file = file
235
- @map = map
236
- @last_pos = last_pos
174
+ if current_end < old_end
175
+ # something occured.
176
+ @pos_storage.put(ch, [current_oldest_record_number, current_total_records])
177
+ return
237
178
  end
238
179
 
239
- def [](ch)
240
- if m = @map[ch]
241
- return m
242
- end
243
- @file.pos = @last_pos
244
- @file.write ch
245
- @file.write "\t"
246
- seek = @file.pos
247
- @file.write "00000000\t00000000\n"
248
- @last_pos = @file.pos
249
- @map[ch] = FilePositionEntry.new(@file, seek)
250
- end
251
-
252
- # parsing file and rebuild mysself
253
- def self.parse(file)
254
- map = {}
255
- file.pos = 0
256
- file.each_line {|line|
257
- # check and get a matched line as m
258
- m = /^([^\t]+)\t([0-9a-fA-F]+)\t([0-9a-fA-F]+)/.match(line)
259
- next unless m
260
- ch = m[1]
261
- pos = m[2].to_i(16)
262
- seek = file.pos - line.bytesize + ch.bytesize + 1
263
- map[ch] = FilePositionEntry.new(file, seek)
264
- }
265
- new(file, map, file.pos)
266
- end
180
+ winlogs = el.read(Win32::EventLog::SEEK_READ | Win32::EventLog::FORWARDS_READ, old_end + 1)
181
+ receive_lines(ch, winlogs)
182
+ @pos_storage.put(ch, [read_start, read_num + winlogs.size])
183
+ ensure
184
+ el.close
267
185
  end
268
-
269
- class FilePositionEntry
270
- START_SIZE = 8
271
- NUM_OFFSET = 9
272
- NUM_SIZE = 8
273
- LN_OFFSET = 17
274
- SIZE = 18
275
-
276
- def initialize(file, seek)
277
- @file = file
278
- @seek = seek
279
- end
280
-
281
- def update(start, num)
282
- @file.pos = @seek
283
- @file.write "%08x\t%08x" % [start, num]
284
- end
285
-
286
- def read_start
287
- @file.pos = @seek
288
- raw = @file.read(START_SIZE)
289
- raw ? raw.to_i(16) : 0
290
- end
291
-
292
- def read_num
293
- @file.pos = @seek + NUM_OFFSET
294
- raw = @file.read(NUM_SIZE)
295
- raw ? raw.to_i(16) : 0
296
- end
297
- end
298
-
299
- class MemoryPositionEntry
300
- def initialize
301
- @start = 0
302
- @num = 0
303
- end
304
-
305
- def update(start, num)
306
- @start = start
307
- @num = num
308
- end
309
-
310
- def read_start
311
- @start
312
- end
313
-
314
- def read_num
315
- @num
316
- end
317
- end
318
-
319
186
  end
320
187
  end
@@ -0,0 +1,47 @@
1
+ require 'win32/eventlog'
2
+
3
+ class EventLog
4
+ def initialize
5
+ @logger = Win32::EventLog.new
6
+ @app_source = "fluent-plugins"
7
+ end
8
+
9
+ def info(event_id, message)
10
+ @logger.report_event(
11
+ source: @app_source,
12
+ event_type: Win32::EventLog::INFO_TYPE,
13
+ event_id: event_id,
14
+ data: message
15
+ )
16
+ end
17
+
18
+ def warn(event_id, message)
19
+ @logger.report_event(
20
+ source: @app_source,
21
+ event_type: Win32::EventLog::WARN_TYPE,
22
+ event_id: event_id,
23
+ data: message
24
+ )
25
+ end
26
+
27
+ def crit(event_id, message)
28
+ @logger.report_event(
29
+ source: @app_source,
30
+ event_type: Win32::EventLog::ERROR_TYPE,
31
+ event_id: event_id,
32
+ data: message
33
+ )
34
+ end
35
+
36
+ end
37
+
38
+ module Fluent
39
+ module Plugin
40
+ class EventService
41
+ def run
42
+ eventlog = EventLog.new()
43
+ eventlog.info(65500, "Hi, from fluentd-plugins!! at " + Time.now.strftime("%Y/%m/%d %H:%M:%S "))
44
+ end
45
+ end
46
+ end
47
+ end
data/test/helper.rb CHANGED
@@ -27,3 +27,6 @@ require 'fluent/plugin/in_windows_eventlog'
27
27
 
28
28
  class Test::Unit::TestCase
29
29
  end
30
+ require 'fluent/test/helpers'
31
+
32
+ include Fluent::Test::Helpers
@@ -1,13 +1,18 @@
1
1
  require 'helper'
2
+ require 'generate-windows-event'
2
3
 
3
4
  class WindowsEventLogInputTest < Test::Unit::TestCase
5
+
4
6
  def setup
5
7
  Fluent::Test.setup
6
8
  end
7
9
 
8
- CONFIG = %[
9
- tag fluent.eventlog
10
- ]
10
+ CONFIG = config_element("ROOT", "", {"tag" => "fluent.eventlog"}, [
11
+ config_element("storage", "", {
12
+ '@type' => 'local',
13
+ 'persistent' => false
14
+ })
15
+ ])
11
16
 
12
17
  def create_driver(conf = CONFIG)
13
18
  Fluent::Test::Driver::Input.new(Fluent::Plugin::WindowsEventLogInput).configure(conf)
@@ -18,34 +23,26 @@ class WindowsEventLogInputTest < Test::Unit::TestCase
18
23
  assert_equal 'fluent.eventlog', d.instance.tag
19
24
  assert_equal 2, d.instance.read_interval
20
25
  assert_nil d.instance.pos_file
21
- assert_equal ['Application'], d.instance.channels
26
+ assert_equal ['application'], d.instance.channels
22
27
  assert_true d.instance.keys.empty?
23
28
  assert_false d.instance.read_from_head
24
29
  end
25
30
 
26
- def test_format
27
- d = create_driver
28
-
29
- # time = Time.parse("2011-01-02 13:14:15 UTC").to_i
30
- # d.emit({"a"=>1}, time)
31
- # d.emit({"a"=>2}, time)
32
-
33
- # d.expect_format %[2011-01-02T13:14:15Z\ttest\t{"a":1}\n]
34
- # d.expect_format %[2011-01-02T13:14:15Z\ttest\t{"a":2}\n]
35
-
36
- # d.run
37
- end
38
-
39
31
  def test_write
40
32
  d = create_driver
41
33
 
42
- # time = Time.parse("2011-01-02 13:14:15 UTC").to_i
43
- # d.emit({"a"=>1}, time)
44
- # d.emit({"a"=>2}, time)
34
+ service = Fluent::Plugin::EventService.new
35
+
36
+ d.run(expect_emits: 1) do
37
+ service.run
38
+ end
45
39
 
46
- # ### FileOutput#write returns path
47
- # path = d.run
48
- # expect_path = "#{TMP_DIR}/out_file_test._0.log.gz"
49
- # assert_equal expect_path, path
40
+ assert(d.events.length >= 1)
41
+ event = d.events.last
42
+ record = event.last
43
+ assert_equal("application", record["channel"])
44
+ assert_equal("65500", record["event_id"])
45
+ assert_equal("information", record["event_type"])
46
+ assert_equal("fluent-plugins", record["source_name"])
50
47
  end
51
48
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-windows-eventlog
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - okahashi117
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2017-01-23 00:00:00.000000000 Z
13
+ date: 2017-06-06 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: bundler
@@ -60,7 +60,7 @@ dependencies:
60
60
  requirements:
61
61
  - - ">="
62
62
  - !ruby/object:Gem::Version
63
- version: 0.14.11
63
+ version: 0.14.12
64
64
  - - "<"
65
65
  - !ruby/object:Gem::Version
66
66
  version: '2'
@@ -70,7 +70,7 @@ dependencies:
70
70
  requirements:
71
71
  - - ">="
72
72
  - !ruby/object:Gem::Version
73
- version: 0.14.11
73
+ version: 0.14.12
74
74
  - - "<"
75
75
  - !ruby/object:Gem::Version
76
76
  version: '2'
@@ -91,7 +91,7 @@ dependencies:
91
91
  description: Fluentd Input plugin to read windwos event log.
92
92
  email:
93
93
  - naruki_okahashi@jbat.co.jp
94
- - cosmo0920.wp@gmail.com
94
+ - cosmo0920.oucc@gmail.com
95
95
  - repeatedly@gmail.com
96
96
  executables: []
97
97
  extensions: []
@@ -102,8 +102,10 @@ files:
102
102
  - LICENSE.txt
103
103
  - README.md
104
104
  - Rakefile
105
+ - appveyor.yml
105
106
  - fluent-plugin-winevtlog.gemspec
106
107
  - lib/fluent/plugin/in_windows_eventlog.rb
108
+ - test/generate-windows-event.rb
107
109
  - test/helper.rb
108
110
  - test/plugin/test_in_winevtlog.rb
109
111
  homepage: https://github.com/fluent/fluent-plugin-windows-eventlog
@@ -126,10 +128,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
126
128
  version: '0'
127
129
  requirements: []
128
130
  rubyforge_project:
129
- rubygems_version: 2.6.8
131
+ rubygems_version: 2.6.11
130
132
  signing_key:
131
133
  specification_version: 4
132
134
  summary: Fluentd Input plugin to read windows event log.
133
135
  test_files:
136
+ - test/generate-windows-event.rb
134
137
  - test/helper.rb
135
138
  - test/plugin/test_in_winevtlog.rb