pghero_logs 0.1.0 → 0.2.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
- SHA1:
3
- metadata.gz: 8f8b5d851faf229e427810b291ef3a2068216d92
4
- data.tar.gz: fb636212dda98475282259a8db5c41508157e0c6
2
+ SHA256:
3
+ metadata.gz: 88cdc44ddd7ab736d806fce6f11f9cd3546a4f044494a6b30997f48527fe4100
4
+ data.tar.gz: f7e1c289a5218b31c0e24c318cc22c90f3f7917a517d5cfd94b7aac542859d5a
5
5
  SHA512:
6
- metadata.gz: 705475d75a5d635b3b6c2f9884b20b1a2cc06c46d2a24b167cc374e887de6c267a85692537498d625cfb53cb22178e283035b198c4245410885c1308666b96a6
7
- data.tar.gz: 7550be72e4b8b4f924c37236a438911c056b78f3d39be0e5f761e0355bd5b37ef8c811777c4793b772e0bcd64d4522628e57d5865abc9019013fdcc8bf57e7ae
6
+ metadata.gz: 05c2420f1175517bc91134c01813e156ab9368e7daf66b87fa06db0c2dbc3fe11c28f85a54648b55f79c33dec05e73e5b576af78b67232b91dc293fc7c24bc5d
7
+ data.tar.gz: 48b1b35bf3af830c21b66c2337af15b3646d71555abcc8d37db4eb95b3c645bbd9166f8a7703f5ba000edd093b1b424a20eb94672a461086e8f1471fba603a70
data/CHANGELOG.md ADDED
@@ -0,0 +1,10 @@
1
+ ## 0.2.0 (2022-01-14)
2
+
3
+ - Added support for Ruby 3+
4
+ - Improved error messages
5
+ - Improved log parsing
6
+ - Dropped support for Ruby < 2.5
7
+
8
+ ## 0.1.0 (2017-09-27)
9
+
10
+ - Started changelog
data/LICENSE.txt CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2014 Andrew Kane
1
+ Copyright (c) 2014-2022 Andrew Kane
2
2
 
3
3
  MIT License
4
4
 
data/README.md CHANGED
@@ -16,7 +16,7 @@ Total Avg Count Query
16
16
  gem install pghero_logs
17
17
  ```
18
18
 
19
- It can take 10 minutes or more to compile the [query parser](https://pganalyze.com/blog/parse-postgresql-queries-in-ruby.html) :clock2:
19
+ It can take a few minutes to compile the [query parser](https://pganalyze.com/blog/parse-postgresql-queries-in-ruby.html) :clock2:
20
20
 
21
21
  Tell Postgres to log slow queries in `postgresql.conf`
22
22
 
@@ -27,26 +27,26 @@ log_min_duration_statement = 20 # ms
27
27
  Analyze the logs
28
28
 
29
29
  ```sh
30
- cat /usr/local/var/postgres/server.log | pghero_logs
30
+ cat /usr/local/var/log/postgres.log | pghero_logs
31
31
  ```
32
32
 
33
33
  ## Amazon RDS
34
34
 
35
35
  First, download the logs. Create an IAM user with the policy below
36
36
 
37
- ```sh
37
+ ```json
38
38
  {
39
- "Statement": [
40
- {
41
- "Sid": "Stmt1410669817271",
42
- "Action": [
43
- "rds:DescribeDBLogFiles",
44
- "rds:DownloadDBLogFilePortion"
45
- ],
46
- "Effect": "Allow",
47
- "Resource": "*"
48
- }
49
- ]
39
+ "Version": "2012-10-17",
40
+ "Statement": [
41
+ {
42
+ "Action": [
43
+ "rds:DescribeDBLogFiles",
44
+ "rds:DownloadDBLogFilePortion"
45
+ ],
46
+ "Effect": "Allow",
47
+ "Resource": "*"
48
+ }
49
+ ]
50
50
  }
51
51
  ```
52
52
 
@@ -72,7 +72,8 @@ brew install pgbadger
72
72
  And run
73
73
 
74
74
  ```sh
75
- pgbadger --prefix "%t:%r:%u@%d:[%p]:" --outfile pgbadger.html postgresql.log* && open pgbadger.html
75
+ pgbadger --prefix "%t:%r:%u@%d:[%p]:" --outfile pgbadger.html postgresql.log*
76
+ open pgbadger.html
76
77
  ```
77
78
 
78
79
  Thanks to [RDS PgBadger](https://github.com/sportngin/rds-pgbadger) for the prefix.
File without changes
@@ -1,3 +1,3 @@
1
1
  module PgheroLogs
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
data/lib/pghero_logs.rb CHANGED
@@ -1,10 +1,13 @@
1
- require "pghero_logs/version"
1
+ # dependencies
2
+ require "aws-sdk-rds"
2
3
  require "pg_query"
3
- require "aws-sdk"
4
+
5
+ # modules
6
+ require "pghero_logs/version"
4
7
 
5
8
  module PgHeroLogs
6
9
  class << self
7
- REGEX = /duration: (\d+\.\d+) ms execute <unnamed>: (.+)?/i
10
+ REGEX = /duration: (\d+\.\d+) ms (?:statement|execute [^:]+): (.+)/
8
11
 
9
12
  def run(args)
10
13
  command = args[0]
@@ -16,14 +19,16 @@ module PgHeroLogs
16
19
  else
17
20
  abort "Unknown command: #{command}"
18
21
  end
22
+ rescue Aws::RDS::Errors::AccessDenied, Aws::RDS::Errors::DBInstanceNotFound => e
23
+ abort e.message
19
24
  end
20
25
 
21
26
  protected
22
27
 
23
28
  def download(db_instance_identifier)
24
29
  db_instance_identifier ||= ENV["AWS_DB_INSTANCE_IDENTIFIER"]
25
- rds = AWS::RDS.new
26
- resp = rds.client.describe_db_log_files(db_instance_identifier: db_instance_identifier)
30
+ rds = Aws::RDS::Client.new
31
+ resp = rds.describe_db_log_files(db_instance_identifier: db_instance_identifier)
27
32
  files = resp[:describe_db_log_files].map{|f| f[:log_file_name] }
28
33
  files.each do |log_file_name|
29
34
  local_file_name = log_file_name.sub("error/", "")
@@ -38,10 +43,10 @@ module PgHeroLogs
38
43
  log_file_name: log_file_name
39
44
  }
40
45
  options.merge!(marker: marker) if marker
41
- resp = rds.client.download_db_log_file_portion(options)
46
+ resp = rds.download_db_log_file_portion(options)
42
47
  data << resp[:log_file_data].to_s
43
48
  end while resp[:additional_data_pending] && (marker = resp[:marker])
44
- File.open(local_file_name, "w") { |file| file.write(data) }
49
+ File.write(local_file_name, data)
45
50
  puts "DOWNLOADED #{local_file_name}"
46
51
  end
47
52
  end
@@ -96,6 +101,5 @@ module PgHeroLogs
96
101
  def squish(str)
97
102
  str.gsub(/\A[[:space:]]+/, '').gsub(/[[:space:]]+\z/, '').gsub(/[[:space:]]+/, ' ')
98
103
  end
99
-
100
104
  end
101
105
  end
metadata CHANGED
@@ -1,17 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pghero_logs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Kane
8
- autorequire:
9
- bindir: bin
8
+ autorequire:
9
+ bindir: exe
10
10
  cert_chain: []
11
- date: 2017-08-28 00:00:00.000000000 Z
11
+ date: 2022-01-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: pg_query
14
+ name: aws-sdk-rds
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ">="
@@ -25,69 +25,37 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: aws-sdk
28
+ name: pg_query
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '1'
33
+ version: '0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: '1'
41
- - !ruby/object:Gem::Dependency
42
- name: bundler
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: '1.7'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: '1.7'
55
- - !ruby/object:Gem::Dependency
56
- name: rake
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: '10.0'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
38
+ - - ">="
67
39
  - !ruby/object:Gem::Version
68
- version: '10.0'
69
- description: Slow query log parser for Postgres
70
- email:
71
- - andrew@chartkick.com
40
+ version: '0'
41
+ description:
42
+ email: andrew@ankane.org
72
43
  executables:
73
44
  - pghero_logs
74
45
  extensions: []
75
46
  extra_rdoc_files: []
76
47
  files:
77
- - ".gitignore"
78
- - Gemfile
48
+ - CHANGELOG.md
79
49
  - LICENSE.txt
80
50
  - README.md
81
- - Rakefile
82
- - bin/pghero_logs
51
+ - exe/pghero_logs
83
52
  - lib/pghero_logs.rb
84
53
  - lib/pghero_logs/version.rb
85
- - pghero_logs.gemspec
86
54
  homepage: https://github.com/ankane/pghero_logs
87
55
  licenses:
88
56
  - MIT
89
57
  metadata: {}
90
- post_install_message:
58
+ post_install_message:
91
59
  rdoc_options: []
92
60
  require_paths:
93
61
  - lib
@@ -95,16 +63,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
95
63
  requirements:
96
64
  - - ">="
97
65
  - !ruby/object:Gem::Version
98
- version: '0'
66
+ version: '2.5'
99
67
  required_rubygems_version: !ruby/object:Gem::Requirement
100
68
  requirements:
101
69
  - - ">="
102
70
  - !ruby/object:Gem::Version
103
71
  version: '0'
104
72
  requirements: []
105
- rubyforge_project:
106
- rubygems_version: 2.6.11
107
- signing_key:
73
+ rubygems_version: 3.3.3
74
+ signing_key:
108
75
  specification_version: 4
109
76
  summary: Slow query log parser for Postgres
110
77
  test_files: []
data/.gitignore DELETED
@@ -1,14 +0,0 @@
1
- /.bundle/
2
- /.yardoc
3
- /Gemfile.lock
4
- /_yardoc/
5
- /coverage/
6
- /doc/
7
- /pkg/
8
- /spec/reports/
9
- /tmp/
10
- *.bundle
11
- *.so
12
- *.o
13
- *.a
14
- mkmf.log
data/Gemfile DELETED
@@ -1,4 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- # Specify your gem's dependencies in pghero_logs.gemspec
4
- gemspec
data/Rakefile DELETED
@@ -1,2 +0,0 @@
1
- require "bundler/gem_tasks"
2
-
data/pghero_logs.gemspec DELETED
@@ -1,26 +0,0 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
3
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'pghero_logs/version'
5
-
6
- Gem::Specification.new do |spec|
7
- spec.name = "pghero_logs"
8
- spec.version = PgheroLogs::VERSION
9
- spec.authors = ["Andrew Kane"]
10
- spec.email = ["andrew@chartkick.com"]
11
- spec.summary = %q{Slow query log parser for Postgres}
12
- spec.description = %q{Slow query log parser for Postgres}
13
- spec.homepage = "https://github.com/ankane/pghero_logs"
14
- spec.license = "MIT"
15
-
16
- spec.files = `git ls-files -z`.split("\x0")
17
- spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
- spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
- spec.require_paths = ["lib"]
20
-
21
- spec.add_dependency "pg_query"
22
- spec.add_dependency "aws-sdk", "~> 1"
23
-
24
- spec.add_development_dependency "bundler", "~> 1.7"
25
- spec.add_development_dependency "rake", "~> 10.0"
26
- end