fluent-plugin-postgresql-csvlog 0.9.2 → 0.10.0

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
  SHA256:
3
- metadata.gz: 5bbac50b30c3a585cf23b58ae413fa4ff40c664346680548e342c70bff796696
4
- data.tar.gz: 25f733282fc1c10704bd8ea0ae2af563f6d569ee2d68e63e3df38b8ea31631f9
3
+ metadata.gz: 2393ec76502b4127cd874027d99eada9e184dba85edfec3c2a9cfe1a88de54ee
4
+ data.tar.gz: 2f61b0b0d4e27a302f90449af833dba0e985406d98f15be773ac379146a958d1
5
5
  SHA512:
6
- metadata.gz: aaaecacfe5ed442dfcec714c29d4e08255bc202b0672f8e4c39e5a0b71303e5ded858b4615085ec3962c7b62d11f576b7c8700758e2217aa15a43dc9a4e491b5
7
- data.tar.gz: 3c17fef4a6f58b9203b125aece0b2d9806af8ce1589b1c4b09c44cfcd12f45fc6e3e9bbd30d0934eef7ab26567b44dd767423e87bcf75914500e9acd6aa750e0
6
+ metadata.gz: b537e7458f9fa38bb0b88672e137a345739f22ab92f8a3d9fe3cf0e26f9e958995c2f7fdb51afc649ac5f55e608ddd431ef904dd757e651f1b223be58703d7d6
7
+ data.tar.gz: 7724c6961993e7e50ef38ebfa22b874fd4578eb8d8057d2cac76fe761f723a5631e1a227c791c7debf24c2631bc4eea1c2febe929f723a5584c52adbb2b91a49
@@ -2,7 +2,7 @@ $:.push File.expand_path('lib', __dir__)
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = 'fluent-plugin-postgresql-csvlog'
5
- s.version = '0.9.2'
5
+ s.version = '0.10.0'
6
6
  s.authors = ['stanhu']
7
7
  s.email = ['stanhu@gmail.com']
8
8
  s.homepage = 'https://gitlab.com/gitlab-org/fluent-plugins/fluent-plugin-postgresql-csvlog'
@@ -16,6 +16,9 @@ module Fluent::Plugin
16
16
  desc 'Name of field to store SQL query fingerprint'
17
17
  config_param :fingerprint_key, :string, default: 'fingerprint'
18
18
 
19
+ desc 'Truncate the query if it exceeds the number of bytes'
20
+ config_param :max_length, :integer, default: 3 * 1024 * 1024
21
+
19
22
  def filter(_tag, _time, record)
20
23
  statement = record[@input_key]
21
24
 
@@ -25,12 +28,23 @@ module Fluent::Plugin
25
28
  record[@fingerprint_key] = PgQuery.fingerprint(normalized) if @fingerprint_key
26
29
 
27
30
  record.delete(@input_key)
28
- record[@output_key] = normalized
31
+ record[@output_key] = truncate_query(record, normalized)
29
32
 
30
33
  record
31
34
  rescue PgQuery::ParseError
32
35
  record['pg_query_error'] = true
33
36
  record
34
37
  end
38
+
39
+ private
40
+
41
+ def truncate_query(record, normalized)
42
+ return normalized if normalized.length < @max_length
43
+
44
+ record['truncated_query'] = true
45
+ # Assume UTF-8 encoding for PostgreSQL queries
46
+ utf8_query = normalized.encode('UTF-8', invalid: :replace, undef: :replace, replace: '')
47
+ utf8_query[0, @max_length]
48
+ end
35
49
  end
36
50
  end
@@ -31,6 +31,26 @@ class PostgreSQLRedactorTest < Test::Unit::TestCase
31
31
  assert_equal('SELECT * FROM projects WHERE id = $1', d.filtered[0].last['sql'])
32
32
  end
33
33
 
34
+ test 'truncates logs' do
35
+ d = create_driver(<<~CONF
36
+ max_length 10
37
+ CONF
38
+ )
39
+
40
+ inputs = [
41
+ { 'message' => 'duration: 2357.1 ms execute <unnamed>: SELECT * FROM projects WHERE id = 1',
42
+ 'query' => %(SELECT * FROM projects WHERE id = 1),
43
+ 'duration_s' => 2.3571 }
44
+ ]
45
+
46
+ d.run(default_tag: @tag) do
47
+ inputs.each { |input| d.feed(input) }
48
+ end
49
+
50
+ assert_equal(%w[duration_s fingerprint message sql truncated_query], d.filtered[0].last.keys.sort)
51
+ assert_equal('SELECT * F', d.filtered[0].last['sql'])
52
+ end
53
+
34
54
  test 'handles parse errors' do
35
55
  d = create_driver
36
56
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-postgresql-csvlog
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.2
4
+ version: 0.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - stanhu
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-09-26 00:00:00.000000000 Z
11
+ date: 2024-10-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fluentd