fluent-plugin-input-static-file 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: 4859ef4b60d4298e26fe8ad4aa30f5d9adc3ee11
4
- data.tar.gz: d9aca614c7c03071409094f0a6b234808f82a46a
3
+ metadata.gz: 5bdfe4c08f457eded785a80862beb1104cf8fd95
4
+ data.tar.gz: b8ccfdb81d8ad125d346fdc50824e35640d50fc1
5
5
  SHA512:
6
- metadata.gz: c85bdcec33cd1f65f6867ebc2b6f881ed98f5e9d8f9160df5e9370b9e1f7b890c5c50cbd87eb5fc61b1185a967bd1d84b08413b99502d7e8c9a258239bfedf23
7
- data.tar.gz: 6e0f362a15d9844f7ed60efce3901c064e5e7ba41881b05d26440ad9a217ba9ce45ed967f60a3b6152b672fcfef39ba6e622bb89bfab00b6b27096b9197234e7
6
+ metadata.gz: 206998e202d008ca737b018457afa8fff1ea9e50a994cd172a0e23f4b4cfc521707894ca786a2be519d31bcd18595ae9e4d8dbb4cba7a14d6460bf04fbd6418a
7
+ data.tar.gz: ccbbb8af45d63974d19de472c8d3137a17d743596fda76a5f2d0b2dfbcf0dd74952b294c73da50f3ae431f21b656187716924e6ab3d8892906387fbf9ea016c9
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.4.10
@@ -77,7 +77,7 @@ module Fluent
77
77
 
78
78
  @file.pos = 0
79
79
  @file.truncate(0)
80
- @file.write(@cache.values.maps(&:to_file_tracker_entry_format).join)
80
+ @file.write(@cache.values.map(&:to_file_tracker_entry_format).join)
81
81
  end
82
82
  end
83
83
  end
@@ -3,7 +3,7 @@
3
3
  require "fluent/plugin/input"
4
4
  require "fluent/config/error"
5
5
 
6
- require "lib/fluent/plugin/in_static_file/file_tracker"
6
+ require "fluent/plugin/in_static_file/file_tracker"
7
7
 
8
8
  if Fluent.windows?
9
9
  require "fluent/plugin/file_wrapper"
@@ -15,14 +15,14 @@ module Fluent
15
15
  module Plugin
16
16
  # InStaticFile is an input plugin for file with static content
17
17
  class InStaticFile < Fluent::Plugin::Input
18
- Fluent::Plugin.register_input("static_file", self)
18
+ PLUGIN_NAME = "static_file"
19
+
20
+ Fluent::Plugin.register_input(PLUGIN_NAME, self)
19
21
 
20
22
  helpers :timer, :compat_parameters, :parser
21
23
 
22
24
  RESERVED_CHARS = ["/", "*", "%"].freeze
23
25
 
24
- # FIXME: path_key
25
-
26
26
  desc "The paths to read. Multiple paths can be specified, separated by comma."
27
27
  config_param :path, :string
28
28
  desc "path delimiter used for spliting path config"
@@ -40,12 +40,17 @@ module Fluent
40
40
 
41
41
  desc "The tag of the event."
42
42
  config_param :tag, :string
43
+ desc "Add the log path being tailed to records. Specify the field name to be used."
44
+ config_param :path_key, :string, default: nil
43
45
 
44
46
  desc "Fluentd will record the position it last read into this file."
45
47
  config_param :pos_file, :string, default: nil
46
48
  desc "Follow inodes instead of following file names. Guarantees more stable delivery and allows to use * in path pattern with rotating files"
47
49
  config_param :follow_inodes, :bool, default: false
48
50
 
51
+ desc "When processed move to another location"
52
+ config_param :archive_to, :string, default: nil
53
+
49
54
  def initialize
50
55
  super
51
56
 
@@ -70,19 +75,22 @@ module Fluent
70
75
  end
71
76
 
72
77
  @paths = @path.split(@path_delimiter).map(&:strip).uniq
73
- raise Fluent::ConfigError, "static_file: 'path' parameter is required on static_file input" if @paths.empty?
78
+ if @paths.empty?
79
+ raise Fluent::ConfigError,
80
+ "#{PLUGIN_NAME}: 'path' parameter is required on #{PLUGIN_NAME} input"
81
+ end
74
82
 
75
83
  if @pos_file
76
84
  if @variable_store.key?(@pos_file) && !called_in_test?
77
85
  plugin_id_using_this_path = @variable_store[@pos_file]
78
86
  raise Fluent::ConfigError,
79
- "Other 'in_static_file' plugin already use same pos_file path: plugin_id = #{plugin_id_using_this_path}, pos_file path = #{@pos_file}"
87
+ "Other '#{PLUGIN_NAME}' plugin already use same pos_file path: plugin_id = #{plugin_id_using_this_path}, pos_file path = #{@pos_file}"
80
88
  end
81
89
  @variable_store[@pos_file] = plugin_id
82
90
  else
83
91
  raise Fluent::ConfigError, "Can't follow inodes without pos_file configuration parameter" if @follow_inodes
84
92
 
85
- log.warn "'pos_file PATH' parameter is not set to a 'static_file' source."
93
+ log.warn "'pos_file PATH' parameter is not set to a '#{PLUGIN_NAME}' source."
86
94
  log.warn "this parameter is highly recommended to save the file status."
87
95
  end
88
96
 
@@ -188,31 +196,56 @@ module Fluent
188
196
  end
189
197
 
190
198
  def untrack_files(files_info)
191
- log.debug("static_file: untrack files: #{files_info.keys}")
199
+ log.debug("#{PLUGIN_NAME}: untrack files: #{files_info.keys}")
192
200
  files_info.each do |_id, file_info|
193
201
  @file_tracker.remove(file_info)
194
202
  end
195
203
  end
196
204
 
197
205
  def process_files(files_info)
198
- log.debug("static_file: process files: #{files_info.keys}")
206
+ log.debug("#{PLUGIN_NAME}: process files: #{files_info.keys}")
199
207
  files_info.each do |_id, file_info|
200
208
  process_file(file_info)
201
209
  end
202
210
  end
203
211
 
204
212
  def process_file(file_info)
205
- log.debug("static_file: process file: #{file_info.path}")
213
+ log.debug("#{PLUGIN_NAME}: process file: #{file_info.path}")
206
214
 
207
215
  return if @file_tracker.has?(file_info)
208
216
 
209
217
  File.open(file_info.path, "rb") do |f|
210
218
  @parser.parse(f) do |time, record|
219
+ record[@path_key] ||= file_info.path unless @path_key.nil?
211
220
  router.emit(tag, time, record)
212
221
  end
213
222
  end
214
223
 
215
224
  @file_tracker.add(file_info)
225
+
226
+ archive(file_info)
227
+ rescue StandardError => e
228
+ log.error "#{PLUGIN_NAME}: trying to process unparsable file #{file_info.path}: #{e}"
229
+ log.debug_backtrace(e.backtrace)
230
+ end
231
+
232
+ def archive(file_info)
233
+ return if @archive_to.nil?
234
+
235
+ file_name = File.basename(file_info.path)
236
+ target_path = format(@archive_to, file_name)
237
+
238
+ target_path_basedir = if target_path.end_with?("/")
239
+ target_path
240
+ else
241
+ File.dirname(target_path)
242
+ end
243
+ FileUtils.mkdir_p(target_path_basedir, mode: @dir_perm)
244
+
245
+ log.debug("#{PLUGIN_NAME}: archiving #{file_info.path} to #{target_path}")
246
+ FileUtils.mv(file_info.path, target_path)
247
+ rescue StandardError => e
248
+ log.warn("#{PLUGIN_NAME}: can't archive #{file_info.path} to #{target_path}: #{e}")
216
249
  end
217
250
  end
218
251
  end
@@ -3,7 +3,7 @@
3
3
  module Fluent
4
4
  module Plugin
5
5
  module InputStaticFile
6
- VERSION = "0.1.0"
6
+ VERSION = "0.2.1"
7
7
  end
8
8
  end
9
9
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-input-static-file
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
  - Thomas Tych
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-05-30 00:00:00.000000000 Z
11
+ date: 2022-06-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bump
@@ -226,6 +226,7 @@ extra_rdoc_files: []
226
226
  files:
227
227
  - ".gitignore"
228
228
  - ".rubocop.yml"
229
+ - ".ruby-version"
229
230
  - CHANGELOG.md
230
231
  - CODE_OF_CONDUCT.md
231
232
  - Gemfile