slack_webhook_logger 0.4.0 → 0.5.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 +4 -4
- data/.github/dependabot.yml +17 -0
- data/.github/workflows/automerge.yml +14 -0
- data/.github/workflows/lint.yml +12 -10
- data/.github/workflows/release.yml +19 -0
- data/.github/workflows/test.yml +22 -0
- data/.rubocop.yml +0 -3
- data/.ruby-version +1 -0
- data/.vscode/settings.json +3 -0
- data/CHANGELOG.md +2 -0
- data/Gemfile +10 -7
- data/Gemfile.lock +66 -40
- data/README.md +27 -3
- data/Rakefile +12 -8
- data/lib/generators/slack_webhook_logger/install_generator.rb +3 -3
- data/lib/generators/templates/slack_webhook_logger.rb +1 -1
- data/lib/slack_webhook_logger/formatter.rb +26 -26
- data/lib/slack_webhook_logger/logger.rb +9 -3
- data/lib/slack_webhook_logger/request_io.rb +21 -10
- data/lib/slack_webhook_logger/version.rb +1 -1
- data/lib/slack_webhook_logger.rb +23 -21
- data/slack_webhook_logger.gemspec +16 -16
- metadata +13 -8
- data/.github/workflows/ci.yml +0 -28
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: a8aca45921ee3b9d9bcecb993e4b4ef9f30b7853e802babce6e0f5b208ddd2ca
|
|
4
|
+
data.tar.gz: abaf6b83376d4e412d6971b6885f2c3de02a3191f07a6ea7909aa77c5f0c99e1
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: db1edd27e70437d26658f21caf2424b02ff3d0ca1436e56fea8888f608e8f9799b179fd61f2e63e8c3c17134d865d6796d5f66a48ac9ea3c3225152f5681630f
|
|
7
|
+
data.tar.gz: 2702fd661d5bf78050cf82033e2ea60ce65a201fa4cc28ae63bb8f8013abeac6ed7a452725231a83568c01d4032067c5e0d87b010573ac64b0beaaf37719d0d8
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
version: 2
|
|
2
|
+
updates:
|
|
3
|
+
- package-ecosystem: "github-actions"
|
|
4
|
+
directory: "/"
|
|
5
|
+
schedule:
|
|
6
|
+
interval: daily
|
|
7
|
+
time: "09:00"
|
|
8
|
+
timezone: "Etc/UTC"
|
|
9
|
+
open-pull-requests-limit: 10
|
|
10
|
+
|
|
11
|
+
- package-ecosystem: "bundler"
|
|
12
|
+
directory: "/"
|
|
13
|
+
schedule:
|
|
14
|
+
interval: daily
|
|
15
|
+
time: "09:00"
|
|
16
|
+
timezone: "Etc/UTC"
|
|
17
|
+
open-pull-requests-limit: 10
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
name: "Bot auto-{approve,merge}"
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_dispatch:
|
|
5
|
+
pull_request_target:
|
|
6
|
+
|
|
7
|
+
permissions:
|
|
8
|
+
pull-requests: write
|
|
9
|
+
contents: write
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
dependabot:
|
|
13
|
+
uses: yettoapp/actions/.github/workflows/automerge_dependabot.yml@main
|
|
14
|
+
secrets: inherit
|
data/.github/workflows/lint.yml
CHANGED
|
@@ -2,20 +2,22 @@ name: Linting
|
|
|
2
2
|
|
|
3
3
|
on:
|
|
4
4
|
pull_request:
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
paths:
|
|
6
|
+
- "**/*.rb"
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: read
|
|
9
10
|
|
|
10
11
|
jobs:
|
|
11
|
-
|
|
12
|
+
lint:
|
|
12
13
|
runs-on: ubuntu-latest
|
|
13
14
|
steps:
|
|
14
|
-
- uses: actions/checkout@
|
|
15
|
-
|
|
15
|
+
- uses: actions/checkout@v3
|
|
16
|
+
|
|
17
|
+
- name: Set up Ruby
|
|
18
|
+
uses: yettoapp/actions/setup-languages@main
|
|
16
19
|
with:
|
|
17
|
-
ruby
|
|
18
|
-
|
|
19
|
-
- run: bundle install
|
|
20
|
+
ruby: true
|
|
21
|
+
|
|
20
22
|
- name: Rubocop
|
|
21
23
|
run: bundle exec rake rubocop
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_dispatch:
|
|
5
|
+
push:
|
|
6
|
+
branches:
|
|
7
|
+
- main
|
|
8
|
+
paths:
|
|
9
|
+
- "lib/slack_webhook_logger/version.rb"
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
ruby:
|
|
13
|
+
uses: yettoapp/actions/.github/workflows/ruby_gem_release.yml@main
|
|
14
|
+
secrets:
|
|
15
|
+
rubygems_api_key: ${{ secrets.RUBYGEMS_API_BOT_KEY }}
|
|
16
|
+
gh_token: ${{ secrets.PUBLIC_PUSH_TO_PROTECTED_BRANCH }}
|
|
17
|
+
with:
|
|
18
|
+
gem_name: slack_webhook_logger
|
|
19
|
+
version_filepath: lib/slack_webhook_logger/version.rb
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
|
|
6
|
+
permissions:
|
|
7
|
+
contents: read
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
test:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
|
|
13
|
+
steps:
|
|
14
|
+
- uses: actions/checkout@v3
|
|
15
|
+
|
|
16
|
+
- name: Set up Ruby
|
|
17
|
+
uses: yettoapp/actions/setup-languages@main
|
|
18
|
+
with:
|
|
19
|
+
ruby: true
|
|
20
|
+
|
|
21
|
+
- name: Run tests
|
|
22
|
+
run: bundle exec rake test
|
data/.rubocop.yml
CHANGED
data/.ruby-version
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.2.1
|
data/.vscode/settings.json
CHANGED
data/CHANGELOG.md
ADDED
data/Gemfile
CHANGED
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
source
|
|
3
|
+
source "https://rubygems.org"
|
|
4
4
|
|
|
5
5
|
# Specify your gem's dependencies in slack-webhooklogger.gemspec
|
|
6
6
|
gemspec
|
|
7
7
|
|
|
8
|
-
gem '
|
|
9
|
-
gem '
|
|
10
|
-
gem 'rake', '~> 12.0'
|
|
8
|
+
gem 'minitest', '~> 5.18'
|
|
9
|
+
gem 'rake', '~> 13.0'
|
|
11
10
|
gem 'rubocop', '~> 1.6'
|
|
12
|
-
gem
|
|
13
|
-
gem 'rubocop-standard', '~> 5.1'
|
|
11
|
+
gem "rubocop-standard"
|
|
14
12
|
|
|
15
|
-
gem
|
|
13
|
+
gem "webmock", "~> 3.11"
|
|
14
|
+
# mocking lib
|
|
15
|
+
gem "mocha", "~> 2.0"
|
|
16
|
+
|
|
17
|
+
gem "amazing_print", require: false
|
|
18
|
+
gem "debug", require: false
|
data/Gemfile.lock
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
slack_webhook_logger (0.
|
|
4
|
+
slack_webhook_logger (0.5.0)
|
|
5
5
|
activesupport (>= 5.0, < 8.0)
|
|
6
6
|
httpx (~> 0.20)
|
|
7
7
|
railties (>= 5.0, < 8.0)
|
|
@@ -9,103 +9,127 @@ PATH
|
|
|
9
9
|
GEM
|
|
10
10
|
remote: https://rubygems.org/
|
|
11
11
|
specs:
|
|
12
|
-
actionpack (7.0.
|
|
13
|
-
actionview (= 7.0.
|
|
14
|
-
activesupport (= 7.0.
|
|
15
|
-
rack (~> 2.0, >= 2.2.
|
|
12
|
+
actionpack (7.0.6)
|
|
13
|
+
actionview (= 7.0.6)
|
|
14
|
+
activesupport (= 7.0.6)
|
|
15
|
+
rack (~> 2.0, >= 2.2.4)
|
|
16
16
|
rack-test (>= 0.6.3)
|
|
17
17
|
rails-dom-testing (~> 2.0)
|
|
18
18
|
rails-html-sanitizer (~> 1.0, >= 1.2.0)
|
|
19
|
-
actionview (7.0.
|
|
20
|
-
activesupport (= 7.0.
|
|
19
|
+
actionview (7.0.6)
|
|
20
|
+
activesupport (= 7.0.6)
|
|
21
21
|
builder (~> 3.1)
|
|
22
22
|
erubi (~> 1.4)
|
|
23
23
|
rails-dom-testing (~> 2.0)
|
|
24
24
|
rails-html-sanitizer (~> 1.1, >= 1.2.0)
|
|
25
|
-
activesupport (7.0.
|
|
25
|
+
activesupport (7.0.6)
|
|
26
26
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
|
27
27
|
i18n (>= 1.6, < 2)
|
|
28
28
|
minitest (>= 5.1)
|
|
29
29
|
tzinfo (~> 2.0)
|
|
30
30
|
addressable (2.8.4)
|
|
31
31
|
public_suffix (>= 2.0.2, < 6.0)
|
|
32
|
+
amazing_print (1.5.0)
|
|
32
33
|
ast (2.4.2)
|
|
33
|
-
awesome_print (1.9.2)
|
|
34
34
|
builder (3.2.4)
|
|
35
35
|
concurrent-ruby (1.2.2)
|
|
36
36
|
crack (0.4.5)
|
|
37
37
|
rexml
|
|
38
38
|
crass (1.0.6)
|
|
39
|
+
debug (1.8.0)
|
|
40
|
+
irb (>= 1.5.0)
|
|
41
|
+
reline (>= 0.3.1)
|
|
39
42
|
erubi (1.12.0)
|
|
40
43
|
hashdiff (1.0.1)
|
|
41
44
|
http-2-next (0.5.1)
|
|
42
|
-
httpx (0.
|
|
45
|
+
httpx (0.24.1)
|
|
43
46
|
http-2-next (>= 0.4.1)
|
|
44
|
-
i18n (1.
|
|
47
|
+
i18n (1.14.1)
|
|
45
48
|
concurrent-ruby (~> 1.0)
|
|
49
|
+
io-console (0.6.0)
|
|
50
|
+
irb (1.7.1)
|
|
51
|
+
reline (>= 0.3.0)
|
|
46
52
|
json (2.6.3)
|
|
47
|
-
|
|
53
|
+
language_server-protocol (3.17.0.3)
|
|
54
|
+
loofah (2.21.3)
|
|
48
55
|
crass (~> 1.0.2)
|
|
49
|
-
nokogiri (>= 1.
|
|
56
|
+
nokogiri (>= 1.12.0)
|
|
50
57
|
method_source (1.0.0)
|
|
51
|
-
minitest (5.18.
|
|
52
|
-
|
|
58
|
+
minitest (5.18.1)
|
|
59
|
+
mocha (2.0.4)
|
|
60
|
+
ruby2_keywords (>= 0.0.5)
|
|
61
|
+
nokogiri (1.15.3-arm64-darwin)
|
|
62
|
+
racc (~> 1.4)
|
|
63
|
+
nokogiri (1.15.3-x86_64-linux)
|
|
53
64
|
racc (~> 1.4)
|
|
54
65
|
parallel (1.23.0)
|
|
55
|
-
parser (3.2.2.
|
|
66
|
+
parser (3.2.2.3)
|
|
56
67
|
ast (~> 2.4.1)
|
|
68
|
+
racc
|
|
57
69
|
public_suffix (5.0.1)
|
|
58
|
-
racc (1.
|
|
70
|
+
racc (1.7.1)
|
|
59
71
|
rack (2.2.7)
|
|
60
72
|
rack-test (2.1.0)
|
|
61
73
|
rack (>= 1.3)
|
|
62
|
-
rails-dom-testing (2.
|
|
63
|
-
activesupport (>=
|
|
74
|
+
rails-dom-testing (2.1.1)
|
|
75
|
+
activesupport (>= 5.0.0)
|
|
76
|
+
minitest
|
|
64
77
|
nokogiri (>= 1.6)
|
|
65
|
-
rails-html-sanitizer (1.
|
|
66
|
-
loofah (~> 2.
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
78
|
+
rails-html-sanitizer (1.6.0)
|
|
79
|
+
loofah (~> 2.21)
|
|
80
|
+
nokogiri (~> 1.14)
|
|
81
|
+
railties (7.0.6)
|
|
82
|
+
actionpack (= 7.0.6)
|
|
83
|
+
activesupport (= 7.0.6)
|
|
70
84
|
method_source
|
|
71
85
|
rake (>= 12.2)
|
|
72
86
|
thor (~> 1.0)
|
|
73
87
|
zeitwerk (~> 2.5)
|
|
74
88
|
rainbow (3.1.1)
|
|
75
|
-
rake (
|
|
76
|
-
regexp_parser (2.8.
|
|
89
|
+
rake (13.0.6)
|
|
90
|
+
regexp_parser (2.8.1)
|
|
91
|
+
reline (0.3.5)
|
|
92
|
+
io-console (~> 0.5)
|
|
77
93
|
rexml (3.2.5)
|
|
78
|
-
rubocop (1.
|
|
94
|
+
rubocop (1.54.1)
|
|
79
95
|
json (~> 2.3)
|
|
96
|
+
language_server-protocol (>= 3.17.0)
|
|
80
97
|
parallel (~> 1.10)
|
|
81
|
-
parser (>= 3.2.
|
|
98
|
+
parser (>= 3.2.2.3)
|
|
82
99
|
rainbow (>= 2.2.2, < 4.0)
|
|
83
100
|
regexp_parser (>= 1.8, < 3.0)
|
|
84
101
|
rexml (>= 3.2.5, < 4.0)
|
|
85
102
|
rubocop-ast (>= 1.28.0, < 2.0)
|
|
86
103
|
ruby-progressbar (~> 1.7)
|
|
87
104
|
unicode-display_width (>= 2.4.0, < 3.0)
|
|
88
|
-
rubocop-ast (1.
|
|
105
|
+
rubocop-ast (1.29.0)
|
|
89
106
|
parser (>= 3.2.1.0)
|
|
90
|
-
rubocop-minitest (0.
|
|
107
|
+
rubocop-minitest (0.31.0)
|
|
91
108
|
rubocop (>= 1.39, < 2.0)
|
|
92
|
-
rubocop-performance (1.
|
|
109
|
+
rubocop-performance (1.18.0)
|
|
93
110
|
rubocop (>= 1.7.0, < 2.0)
|
|
94
111
|
rubocop-ast (>= 0.4.0)
|
|
95
|
-
rubocop-rails (2.
|
|
112
|
+
rubocop-rails (2.20.2)
|
|
96
113
|
activesupport (>= 4.2.0)
|
|
97
114
|
rack (>= 1.1)
|
|
98
115
|
rubocop (>= 1.33.0, < 2.0)
|
|
99
116
|
rubocop-rake (0.6.0)
|
|
100
117
|
rubocop (~> 1.0)
|
|
101
|
-
rubocop-
|
|
118
|
+
rubocop-shopify (2.14.0)
|
|
119
|
+
rubocop (~> 1.51)
|
|
120
|
+
rubocop-sorbet (0.7.0)
|
|
121
|
+
rubocop (>= 0.90.0)
|
|
122
|
+
rubocop-standard (7.1.0)
|
|
102
123
|
rubocop
|
|
103
124
|
rubocop-minitest
|
|
104
125
|
rubocop-performance
|
|
105
126
|
rubocop-rails
|
|
106
127
|
rubocop-rake
|
|
128
|
+
rubocop-shopify
|
|
129
|
+
rubocop-sorbet
|
|
107
130
|
ruby-progressbar (1.13.0)
|
|
108
|
-
|
|
131
|
+
ruby2_keywords (0.0.5)
|
|
132
|
+
thor (1.2.2)
|
|
109
133
|
tzinfo (2.0.6)
|
|
110
134
|
concurrent-ruby (~> 1.0)
|
|
111
135
|
unicode-display_width (2.4.2)
|
|
@@ -116,15 +140,17 @@ GEM
|
|
|
116
140
|
zeitwerk (2.6.8)
|
|
117
141
|
|
|
118
142
|
PLATFORMS
|
|
119
|
-
|
|
143
|
+
arm64-darwin-22
|
|
144
|
+
x86_64-linux
|
|
120
145
|
|
|
121
146
|
DEPENDENCIES
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
147
|
+
amazing_print
|
|
148
|
+
debug
|
|
149
|
+
minitest (~> 5.18)
|
|
150
|
+
mocha (~> 2.0)
|
|
151
|
+
rake (~> 13.0)
|
|
125
152
|
rubocop (~> 1.6)
|
|
126
|
-
rubocop-
|
|
127
|
-
rubocop-standard (~> 5.1)
|
|
153
|
+
rubocop-standard
|
|
128
154
|
slack_webhook_logger!
|
|
129
155
|
webmock (~> 3.11)
|
|
130
156
|
|
data/README.md
CHANGED
|
@@ -7,7 +7,7 @@ A simple Slack logger using ActiveSupport broadcast and a slim HTTPS call.
|
|
|
7
7
|
Add this line to your application's Gemfile:
|
|
8
8
|
|
|
9
9
|
```ruby
|
|
10
|
-
gem '
|
|
10
|
+
gem 'slack_webhook_logger'
|
|
11
11
|
```
|
|
12
12
|
|
|
13
13
|
And then execute:
|
|
@@ -19,13 +19,13 @@ $ bundle install
|
|
|
19
19
|
Or install it yourself as:
|
|
20
20
|
|
|
21
21
|
```
|
|
22
|
-
$ gem install
|
|
22
|
+
$ gem install slack_webhook_logger
|
|
23
23
|
```
|
|
24
24
|
|
|
25
25
|
Then, run the install generator:
|
|
26
26
|
|
|
27
27
|
```
|
|
28
|
-
$ rails generate
|
|
28
|
+
$ rails generate slack_webhook_logger:install
|
|
29
29
|
```
|
|
30
30
|
|
|
31
31
|
Provide the webhook URL in the config, and finally, extend the logger:
|
|
@@ -38,4 +38,28 @@ end
|
|
|
38
38
|
|
|
39
39
|
## Configuration
|
|
40
40
|
|
|
41
|
+
You should have a file in `config/initializers/slack_webhook_logger.rb` that looks somrthing like this:
|
|
42
|
+
|
|
43
|
+
```ruby
|
|
44
|
+
SlackWebhookLogger.setup do |config|
|
|
45
|
+
# The URL where messages will be sent. This is required.
|
|
46
|
+
config.webhook_url = 'https://hooks.slack.com/services/xxx/yyy/zzz'
|
|
47
|
+
|
|
48
|
+
# The minimum error level to see in Slack. This is optional; the default is :WARN.
|
|
49
|
+
#
|
|
50
|
+
# All log levels are supported, but don't rely on anything less then :WARN
|
|
51
|
+
# since Slack only allows one message per minute.
|
|
52
|
+
# config.level = :WARN
|
|
53
|
+
|
|
54
|
+
# You can provide a custom log formatter if you want to. This is optional.
|
|
55
|
+
# The formatter must construct a JSON blob that adheres to Slack's expected
|
|
56
|
+
# POST payload for `chat.postMessage`: https://api.slack.com/methods/chat.postMessage
|
|
57
|
+
# config.formatter = SomeOtherFormatter.new
|
|
58
|
+
|
|
59
|
+
# You can provide an array of regular expressions to ignore certain messages
|
|
60
|
+
# from being sent to Slack. This is optional.
|
|
61
|
+
# config.ignore_patterns = []
|
|
62
|
+
end
|
|
63
|
+
```
|
|
64
|
+
|
|
41
65
|
You can change the log level or the format of the logging text if you wish. See the generated slack_webhook_logger.rb file for more information on that.
|
data/Rakefile
CHANGED
|
@@ -1,16 +1,20 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require
|
|
4
|
-
require
|
|
3
|
+
require "bundler/gem_tasks"
|
|
4
|
+
require "rubygems/package_task"
|
|
5
|
+
require "rake/testtask"
|
|
5
6
|
|
|
6
7
|
Rake::TestTask.new(:test) do |t|
|
|
7
|
-
t.libs <<
|
|
8
|
-
t.libs <<
|
|
9
|
-
t.test_files = FileList[
|
|
8
|
+
t.libs << "test"
|
|
9
|
+
t.libs << "lib"
|
|
10
|
+
t.test_files = FileList["test/**/*_test.rb"]
|
|
10
11
|
end
|
|
11
12
|
|
|
12
|
-
|
|
13
|
+
require "rubocop/rake_task"
|
|
13
14
|
|
|
14
|
-
|
|
15
|
+
RuboCop::RakeTask.new
|
|
15
16
|
|
|
16
|
-
|
|
17
|
+
GEMSPEC = Bundler.load_gemspec("slack_webhook_logger.gemspec")
|
|
18
|
+
gem_path = Gem::PackageTask.new(GEMSPEC).define
|
|
19
|
+
desc "Package the ruby gem"
|
|
20
|
+
task "package" => [gem_path]
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require
|
|
3
|
+
require "rails/generators/base"
|
|
4
4
|
|
|
5
5
|
module SlackWebhookLogger
|
|
6
6
|
class InstallGenerator < Rails::Generators::Base
|
|
7
7
|
source_root File.expand_path("..#{File::SEPARATOR}..#{File::SEPARATOR}templates", __FILE__)
|
|
8
8
|
|
|
9
|
-
desc
|
|
9
|
+
desc "Create a Slack::WebhookLogger initializer"
|
|
10
10
|
|
|
11
11
|
def copy_initializer
|
|
12
|
-
template
|
|
12
|
+
template("slack_webhook_logger.rb", "config/initializers/slack_webhook_logger.rb")
|
|
13
13
|
end
|
|
14
14
|
end
|
|
15
15
|
end
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
SlackWebhookLogger.setup do |config|
|
|
4
4
|
# The URL where messages will be sent. This is required.
|
|
5
|
-
config.webhook_url =
|
|
5
|
+
config.webhook_url = "https://hooks.slack.com/services/xxx/yyy/zzz"
|
|
6
6
|
|
|
7
7
|
# The minimum error level to see in Slack. This is optional; the default is :WARN.
|
|
8
8
|
#
|
|
@@ -7,21 +7,21 @@ module SlackWebhookLogger
|
|
|
7
7
|
def format
|
|
8
8
|
@format ||= proc do |severity, time, _progname, msg|
|
|
9
9
|
heading = case severity
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
10
|
+
when "FATAL"
|
|
11
|
+
"📛 *#{severity}*"
|
|
12
|
+
when "ERROR"
|
|
13
|
+
"🛑 *#{severity}*"
|
|
14
|
+
when "WARN"
|
|
15
|
+
"⚠️ *#{severity}*"
|
|
16
|
+
when "INFO"
|
|
17
|
+
"ℹ️ *#{severity}*"
|
|
18
|
+
when "DEBUG"
|
|
19
|
+
"🐛 *#{severity}*"
|
|
20
|
+
else
|
|
21
|
+
"🪵 *Logger*"
|
|
22
|
+
end
|
|
23
23
|
|
|
24
|
-
title = "#{heading} (#{time}) [#{ENV.fetch(
|
|
24
|
+
title = "#{heading} (#{time}) [#{ENV.fetch("RAILS_ENV", nil)}]"
|
|
25
25
|
|
|
26
26
|
text = <<~MSG
|
|
27
27
|
#{msg2str(msg)}
|
|
@@ -40,23 +40,23 @@ module SlackWebhookLogger
|
|
|
40
40
|
text: [title, text].join("\n").to_s,
|
|
41
41
|
blocks: [
|
|
42
42
|
{
|
|
43
|
-
type:
|
|
43
|
+
type: "section",
|
|
44
44
|
text: {
|
|
45
|
-
type:
|
|
46
|
-
text: title
|
|
47
|
-
}
|
|
45
|
+
type: "mrkdwn",
|
|
46
|
+
text: title,
|
|
47
|
+
},
|
|
48
48
|
},
|
|
49
49
|
{
|
|
50
|
-
type:
|
|
50
|
+
type: "divider",
|
|
51
51
|
},
|
|
52
52
|
{
|
|
53
|
-
type:
|
|
53
|
+
type: "section",
|
|
54
54
|
text: {
|
|
55
|
-
type:
|
|
56
|
-
text: text
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
]
|
|
55
|
+
type: "plain_text",
|
|
56
|
+
text: text,
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
],
|
|
60
60
|
}
|
|
61
61
|
end
|
|
62
62
|
|
|
@@ -66,7 +66,7 @@ module SlackWebhookLogger
|
|
|
66
66
|
msg
|
|
67
67
|
when ::Exception
|
|
68
68
|
"#{msg.message} (#{msg.class})\n" <<
|
|
69
|
-
|
|
69
|
+
(msg.backtrace || []).join("\n")
|
|
70
70
|
else
|
|
71
71
|
msg.inspect
|
|
72
72
|
end
|
|
@@ -1,12 +1,18 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require
|
|
3
|
+
require "active_support/core_ext/module/delegation"
|
|
4
4
|
|
|
5
5
|
module SlackWebhookLogger
|
|
6
6
|
class Logger < ::ActiveSupport::Logger
|
|
7
7
|
class << self
|
|
8
|
-
delegate :fatal,
|
|
9
|
-
|
|
8
|
+
delegate :fatal,
|
|
9
|
+
:error,
|
|
10
|
+
:warn,
|
|
11
|
+
:info,
|
|
12
|
+
:debug,
|
|
13
|
+
:add,
|
|
14
|
+
:log,
|
|
15
|
+
to: :instance
|
|
10
16
|
end
|
|
11
17
|
end
|
|
12
18
|
end
|
|
@@ -1,21 +1,32 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require
|
|
4
|
-
require
|
|
5
|
-
require
|
|
3
|
+
require "uri"
|
|
4
|
+
require "json"
|
|
5
|
+
require "httpx"
|
|
6
6
|
|
|
7
7
|
module SlackWebhookLogger
|
|
8
8
|
class RequestIO
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
class << self
|
|
10
|
+
def close
|
|
11
|
+
true
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def write(hash)
|
|
15
|
+
return if hash.blank?
|
|
16
|
+
|
|
17
|
+
return if SlackWebhookLogger.ignore_patterns.any? { |ignore_pattern| hash[:text].match(ignore_pattern) }
|
|
12
18
|
|
|
13
|
-
|
|
14
|
-
return if hash.blank?
|
|
19
|
+
response = HTTPX.post(SlackWebhookLogger.webhook_uri.to_s, form: hash)
|
|
15
20
|
|
|
16
|
-
|
|
21
|
+
return if (200..299).cover?(response.status)
|
|
17
22
|
|
|
18
|
-
|
|
23
|
+
case response
|
|
24
|
+
when HTTPX::ErrorResponse
|
|
25
|
+
warn(response)
|
|
26
|
+
else
|
|
27
|
+
warn(response.body)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
19
30
|
end
|
|
20
31
|
end
|
|
21
32
|
end
|
data/lib/slack_webhook_logger.rb
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require
|
|
4
|
-
require
|
|
3
|
+
require "active_support/logger"
|
|
4
|
+
require "active_support/core_ext/module/attribute_accessors"
|
|
5
5
|
|
|
6
|
-
require
|
|
7
|
-
require
|
|
8
|
-
require
|
|
6
|
+
require "net/http"
|
|
7
|
+
require "net/https"
|
|
8
|
+
require "uri"
|
|
9
9
|
|
|
10
|
-
require
|
|
11
|
-
require
|
|
12
|
-
require
|
|
10
|
+
require "slack_webhook_logger/logger"
|
|
11
|
+
require "slack_webhook_logger/formatter"
|
|
12
|
+
require "slack_webhook_logger/request_io"
|
|
13
13
|
|
|
14
14
|
module SlackWebhookLogger
|
|
15
15
|
# Can be modified in Rails app
|
|
@@ -23,22 +23,24 @@ module SlackWebhookLogger
|
|
|
23
23
|
mattr_reader :logger
|
|
24
24
|
mattr_reader :https
|
|
25
25
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
26
|
+
class << self
|
|
27
|
+
# rubocop:disable Style/ClassVars
|
|
28
|
+
def setup
|
|
29
|
+
@@logger = SlackWebhookLogger::Logger.new(SlackWebhookLogger::RequestIO)
|
|
29
30
|
|
|
30
|
-
|
|
31
|
+
yield self
|
|
31
32
|
|
|
32
|
-
|
|
33
|
-
|
|
33
|
+
@@logger.formatter = @@formatter || SlackWebhookLogger::Formatter.new
|
|
34
|
+
@@logger.level = @@level || :warn
|
|
34
35
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
36
|
+
begin
|
|
37
|
+
@@webhook_uri = URI.parse(@@webhook_url)
|
|
38
|
+
rescue URI::InvalidURIError
|
|
39
|
+
raise ArgumentError, "Invalid URI for webhook_url"
|
|
40
|
+
end
|
|
40
41
|
|
|
41
|
-
|
|
42
|
+
@@ignore_patterns ||= []
|
|
43
|
+
end
|
|
44
|
+
# rubocop:enable Style/ClassVars
|
|
42
45
|
end
|
|
43
|
-
# rubocop:enable Style/ClassVars
|
|
44
46
|
end
|
|
@@ -1,33 +1,33 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative
|
|
3
|
+
require_relative "lib/slack_webhook_logger/version"
|
|
4
4
|
|
|
5
5
|
Gem::Specification.new do |spec|
|
|
6
|
-
spec.name =
|
|
6
|
+
spec.name = "slack_webhook_logger"
|
|
7
7
|
spec.version = SlackWebhookLogger::VERSION
|
|
8
|
-
spec.authors = [
|
|
9
|
-
spec.email = [
|
|
8
|
+
spec.authors = ["Garen J. Torikian"]
|
|
9
|
+
spec.email = ["gjtorikian@gmail.com"]
|
|
10
10
|
|
|
11
|
-
spec.summary =
|
|
12
|
-
spec.homepage =
|
|
13
|
-
spec.license =
|
|
14
|
-
spec.required_ruby_version = Gem::Requirement.new(
|
|
11
|
+
spec.summary = "A slim wrapper for posting to Rails logs to Slack"
|
|
12
|
+
spec.homepage = "https://github.com/gjtorikian/slack_webhook_logger"
|
|
13
|
+
spec.license = "MIT"
|
|
14
|
+
spec.required_ruby_version = Gem::Requirement.new("~> 3.0")
|
|
15
15
|
|
|
16
|
-
spec.metadata[
|
|
17
|
-
spec.metadata[
|
|
16
|
+
spec.metadata["homepage_uri"] = spec.homepage
|
|
17
|
+
spec.metadata["source_code_uri"] = spec.homepage
|
|
18
18
|
|
|
19
19
|
# Specify which files should be added to the gem when it is released.
|
|
20
20
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
|
21
21
|
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
|
22
|
-
|
|
22
|
+
%x(git ls-files -z).split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
|
23
23
|
end
|
|
24
24
|
|
|
25
|
-
spec.require_paths = [
|
|
25
|
+
spec.require_paths = ["lib"]
|
|
26
26
|
|
|
27
|
-
spec.add_dependency
|
|
28
|
-
spec.add_dependency
|
|
29
|
-
spec.add_dependency
|
|
27
|
+
spec.add_dependency("activesupport", ">= 5.0", "< 8.0")
|
|
28
|
+
spec.add_dependency("httpx", "~> 0.20")
|
|
29
|
+
spec.add_dependency("railties", ">= 5.0", "< 8.0") # for the generators
|
|
30
30
|
spec.metadata = {
|
|
31
|
-
|
|
31
|
+
"rubygems_mfa_required" => "true",
|
|
32
32
|
}
|
|
33
33
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: slack_webhook_logger
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.5.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Garen J. Torikian
|
|
8
|
-
autorequire:
|
|
8
|
+
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2023-05
|
|
11
|
+
date: 2023-07-05 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: activesupport
|
|
@@ -64,7 +64,7 @@ dependencies:
|
|
|
64
64
|
- - "<"
|
|
65
65
|
- !ruby/object:Gem::Version
|
|
66
66
|
version: '8.0'
|
|
67
|
-
description:
|
|
67
|
+
description:
|
|
68
68
|
email:
|
|
69
69
|
- gjtorikian@gmail.com
|
|
70
70
|
executables: []
|
|
@@ -72,11 +72,16 @@ extensions: []
|
|
|
72
72
|
extra_rdoc_files: []
|
|
73
73
|
files:
|
|
74
74
|
- ".github/FUNDING.yml"
|
|
75
|
-
- ".github/
|
|
75
|
+
- ".github/dependabot.yml"
|
|
76
|
+
- ".github/workflows/automerge.yml"
|
|
76
77
|
- ".github/workflows/lint.yml"
|
|
78
|
+
- ".github/workflows/release.yml"
|
|
79
|
+
- ".github/workflows/test.yml"
|
|
77
80
|
- ".gitignore"
|
|
78
81
|
- ".rubocop.yml"
|
|
82
|
+
- ".ruby-version"
|
|
79
83
|
- ".vscode/settings.json"
|
|
84
|
+
- CHANGELOG.md
|
|
80
85
|
- CODE_OF_CONDUCT.md
|
|
81
86
|
- Gemfile
|
|
82
87
|
- Gemfile.lock
|
|
@@ -98,7 +103,7 @@ licenses:
|
|
|
98
103
|
- MIT
|
|
99
104
|
metadata:
|
|
100
105
|
rubygems_mfa_required: 'true'
|
|
101
|
-
post_install_message:
|
|
106
|
+
post_install_message:
|
|
102
107
|
rdoc_options: []
|
|
103
108
|
require_paths:
|
|
104
109
|
- lib
|
|
@@ -113,8 +118,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
113
118
|
- !ruby/object:Gem::Version
|
|
114
119
|
version: '0'
|
|
115
120
|
requirements: []
|
|
116
|
-
rubygems_version: 3.4.
|
|
117
|
-
signing_key:
|
|
121
|
+
rubygems_version: 3.4.15
|
|
122
|
+
signing_key:
|
|
118
123
|
specification_version: 4
|
|
119
124
|
summary: A slim wrapper for posting to Rails logs to Slack
|
|
120
125
|
test_files: []
|
data/.github/workflows/ci.yml
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
name: Ruby CI
|
|
2
|
-
|
|
3
|
-
on:
|
|
4
|
-
push:
|
|
5
|
-
|
|
6
|
-
jobs:
|
|
7
|
-
test:
|
|
8
|
-
runs-on: ubuntu-latest
|
|
9
|
-
|
|
10
|
-
strategy:
|
|
11
|
-
fail-fast: false
|
|
12
|
-
matrix:
|
|
13
|
-
ruby-version: [3.0.2]
|
|
14
|
-
|
|
15
|
-
steps:
|
|
16
|
-
- uses: actions/checkout@v2
|
|
17
|
-
|
|
18
|
-
- name: Set up Ruby ${{ matrix.ruby-version }}
|
|
19
|
-
uses: ruby/setup-ruby@v1
|
|
20
|
-
with:
|
|
21
|
-
ruby-version: ${{ matrix.ruby-version }}
|
|
22
|
-
bundler-cache: true
|
|
23
|
-
|
|
24
|
-
- name: Install dependencies
|
|
25
|
-
run: bundle install
|
|
26
|
-
|
|
27
|
-
- name: Run tests
|
|
28
|
-
run: bundle exec rake
|