fluent-plugin-input-static-file 0.1.0 → 0.2.1

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.
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