pghero_logs 0.1.0 → 0.2.0
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 +5 -5
- data/CHANGELOG.md +10 -0
- data/LICENSE.txt +1 -1
- data/README.md +16 -15
- data/{bin → exe}/pghero_logs +0 -0
- data/lib/pghero_logs/version.rb +1 -1
- data/lib/pghero_logs.rb +12 -8
- metadata +18 -51
- data/.gitignore +0 -14
- data/Gemfile +0 -4
- data/Rakefile +0 -2
- data/pghero_logs.gemspec +0 -26
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 88cdc44ddd7ab736d806fce6f11f9cd3546a4f044494a6b30997f48527fe4100
|
4
|
+
data.tar.gz: f7e1c289a5218b31c0e24c318cc22c90f3f7917a517d5cfd94b7aac542859d5a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 05c2420f1175517bc91134c01813e156ab9368e7daf66b87fa06db0c2dbc3fe11c28f85a54648b55f79c33dec05e73e5b576af78b67232b91dc293fc7c24bc5d
|
7
|
+
data.tar.gz: 48b1b35bf3af830c21b66c2337af15b3646d71555abcc8d37db4eb95b3c645bbd9166f8a7703f5ba000edd093b1b424a20eb94672a461086e8f1471fba603a70
|
data/CHANGELOG.md
ADDED
data/LICENSE.txt
CHANGED
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
|
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
|
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
|
-
```
|
37
|
+
```json
|
38
38
|
{
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
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*
|
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.
|
data/{bin → exe}/pghero_logs
RENAMED
File without changes
|
data/lib/pghero_logs/version.rb
CHANGED
data/lib/pghero_logs.rb
CHANGED
@@ -1,10 +1,13 @@
|
|
1
|
-
|
1
|
+
# dependencies
|
2
|
+
require "aws-sdk-rds"
|
2
3
|
require "pg_query"
|
3
|
-
|
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
|
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 =
|
26
|
-
resp = rds.
|
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.
|
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.
|
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.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Kane
|
8
|
-
autorequire:
|
9
|
-
bindir:
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-01-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
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:
|
28
|
+
name: pg_query
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
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: '
|
69
|
-
description:
|
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
|
-
-
|
78
|
-
- Gemfile
|
48
|
+
- CHANGELOG.md
|
79
49
|
- LICENSE.txt
|
80
50
|
- README.md
|
81
|
-
-
|
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: '
|
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
|
-
|
106
|
-
|
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
data/Gemfile
DELETED
data/Rakefile
DELETED
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
|