appsignal_report 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -0
- data/README.md +66 -17
- data/bin/appsignal_report_deploy +6 -49
- data/bin/appsignal_report_weekly +6 -49
- data/lib/appsignal_report/base_report.rb +6 -4
- data/lib/appsignal_report/cli/option_parser.rb +56 -0
- data/lib/appsignal_report/cli/runner.rb +50 -0
- data/lib/appsignal_report/slack_message.rb +2 -6
- data/lib/appsignal_report/version.rb +1 -1
- data/lib/appsignal_report.rb +3 -0
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c8508bab60307495cb9596feb78d732807fedbb6
|
4
|
+
data.tar.gz: e73a769860e794be7b8778f2e2bb22ef4bef657d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1043721a87de2856a24660357e9485acdda70cbf392a1ed2e2fb983695c980138679abcd634034d6ae09af57bbabb77e4536b707c0cf008d9489d72c4c5e2a36
|
7
|
+
data.tar.gz: 0bca2b97f7f11aac1b60d34d61ecf44e3ade22593a7ae6651aae47b5df6eabdc1470df95aef86d2a62f83d6e35066db96c2e092d72b3e765b1f5cda5abb4b5e5
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -6,8 +6,51 @@ Elixir applications.
|
|
6
6
|
|
7
7
|
## Status
|
8
8
|
|
9
|
+
[![Gem Version](https://badge.fury.io/rb/appsignal_report.svg)](https://badge.fury.io/rb/appsignal_report)
|
9
10
|
[![Build Status](https://travis-ci.org/dsager/appsignal_report.svg?branch=master)](https://travis-ci.org/dsager/appsignal_report)
|
10
11
|
|
12
|
+
## Usage
|
13
|
+
|
14
|
+
Use `gem install appsignal_report` to get `appsignal_report` (or add
|
15
|
+
`gem 'appsignal_report'` to your Gemfile). That will provide two executables
|
16
|
+
`appsignal_report_deploy` and `appsignal_report_weekly`, they both support
|
17
|
+
the same set of options:
|
18
|
+
|
19
|
+
```
|
20
|
+
$ appsignal_report_deploy -h
|
21
|
+
Usage: APPSIGNAL_API_TOKEN=XXX ./bin/appsignal_report_deploy [options]
|
22
|
+
|
23
|
+
Specific options:
|
24
|
+
-i, --app-id ID Specify Appsignal App Id
|
25
|
+
-n, --app-name NAME Specify a name for the Appsignal App
|
26
|
+
-s, --slack WEBHOOK_URL Post the report to a Slack Webhook
|
27
|
+
|
28
|
+
Common options:
|
29
|
+
-h, --help Show this message
|
30
|
+
```
|
31
|
+
|
32
|
+
The option `--app-id` is the only required one, by default the tool will
|
33
|
+
output the report data in JSON format to STDOUT.
|
34
|
+
|
35
|
+
## Posting to Slack
|
36
|
+
|
37
|
+
`appsignal_report` supports posting formatted messages about the report
|
38
|
+
to Slack, instead of printing the raw report data. To do so, you need to
|
39
|
+
provide the URL of a
|
40
|
+
[Slack webhook](https://api.slack.com/custom-integrations/incoming-webhooks)
|
41
|
+
using the CLI option `--slack`:
|
42
|
+
|
43
|
+
```
|
44
|
+
$ APPSIGNAL_API_TOKEN=XXX ./bin/appsignal_report_weekly \
|
45
|
+
-app-id XYZ123 \
|
46
|
+
-app-name 'back-end' \
|
47
|
+
-slack https://hooks.slack.com/services/X/Y/Z
|
48
|
+
```
|
49
|
+
|
50
|
+
This is an example of how the post looks on Slack:
|
51
|
+
|
52
|
+
![Slack Post Example](img/slack-post.png?raw=true "Slack Post Example")
|
53
|
+
|
11
54
|
## Reports
|
12
55
|
|
13
56
|
Currently the gem supports two kinds of reports, a deploy report and a weekly
|
@@ -25,25 +68,24 @@ This only works if you are using AppSignal's
|
|
25
68
|
[deploy markers](https://docs.appsignal.com/push-api/deploy-marker.html) to
|
26
69
|
record your deployments.
|
27
70
|
|
28
|
-
###
|
71
|
+
### Example
|
29
72
|
|
30
73
|
```
|
31
|
-
$ gem install appsignal_report
|
32
|
-
$ APPSIGNAL_API_TOKEN=ABC123 appsignal_report_deploy -i XYZ456
|
33
74
|
{
|
34
75
|
"title": "AppSignal Deploy Report",
|
35
76
|
"last_deploy_time": "2017-08-10 09:47:52 UTC",
|
77
|
+
"resolution": "minutely",
|
36
78
|
"before": {
|
37
79
|
"data_points": 62,
|
38
80
|
"error_rate": 0.4675038958657989,
|
39
81
|
"response_time": 94.9387856438841,
|
40
|
-
"
|
82
|
+
"throughput": 32727
|
41
83
|
},
|
42
84
|
"after": {
|
43
85
|
"data_points": 62,
|
44
86
|
"error_rate": 0.0733371596199222,
|
45
87
|
"response_time": 56.71109484008057,
|
46
|
-
"
|
88
|
+
"throughput": 31362
|
47
89
|
},
|
48
90
|
"data_samples_from": "2017-08-10 08:47:00 UTC",
|
49
91
|
"data_samples_to": "2017-08-10 10:48:00 UTC",
|
@@ -52,14 +94,14 @@ $ APPSIGNAL_API_TOKEN=ABC123 appsignal_report_deploy -i XYZ456
|
|
52
94
|
"error_rate_pct": -0.8431303775894644,
|
53
95
|
"response_time": -38.22769080380353,
|
54
96
|
"response_time_pct": -0.40265620151489834,
|
55
|
-
"
|
56
|
-
"
|
97
|
+
"throughput": -1365,
|
98
|
+
"throughput_pct": -0.041708680905674214
|
57
99
|
},
|
58
100
|
"messages": {
|
59
101
|
"info": "The deploy finished at 2017-08-10 09:47:52 UTC",
|
60
102
|
"error_rate": "The error rate decreased by 0.39% (from 0.47% to 0.07%, that is a change of -84.31%).",
|
61
103
|
"response_time": "The response time decreased by 38.23ms (from 94.94ms to 56.71ms, that is a change of -40.27%).",
|
62
|
-
"
|
104
|
+
"throughput": "The hourly throughput decreased by 1365.0 req/m (from 32727.0 req/m to 31362.0 req/m, that is a change of -4.17%)."
|
63
105
|
}
|
64
106
|
}
|
65
107
|
```
|
@@ -70,27 +112,26 @@ The weekly report pulls metrics for the last two weeks. Based on these metrics
|
|
70
112
|
it calculates changes in response time, error rate and throughput, comparing one
|
71
113
|
week to the other.
|
72
114
|
|
73
|
-
###
|
115
|
+
### Example
|
74
116
|
|
75
117
|
```
|
76
|
-
$ gem install appsignal_report
|
77
|
-
$ APPSIGNAL_API_TOKEN=ABC123 appsignal_report_weekly -i XYZ456
|
78
118
|
{
|
79
119
|
"title": "AppSignal Weekly Report",
|
80
120
|
"now": "2017-08-14 13:19:15 UTC",
|
81
121
|
"one_week_ago": "2017-08-07 13:19:15 UTC",
|
82
122
|
"two_weeks_ago": "2017-07-31 13:19:15 UTC",
|
123
|
+
"resolution": "hourly",
|
83
124
|
"before": {
|
84
125
|
"data_points": 168,
|
85
126
|
"error_rate": 0.19637939102939866,
|
86
127
|
"response_time": 74.6427894180237,
|
87
|
-
"
|
128
|
+
"throughput": 34611.166666666664
|
88
129
|
},
|
89
130
|
"after": {
|
90
131
|
"data_points": 168,
|
91
132
|
"error_rate": 0.06227341986188213,
|
92
133
|
"response_time": 61.364840452820985,
|
93
|
-
"
|
134
|
+
"throughput": 30819.684523809523
|
94
135
|
},
|
95
136
|
"data_samples_from": "2017-07-31 14:00:00 UTC",
|
96
137
|
"data_samples_to": "2017-08-14 13:00:00 UTC",
|
@@ -99,14 +140,14 @@ $ APPSIGNAL_API_TOKEN=ABC123 appsignal_report_weekly -i XYZ456
|
|
99
140
|
"error_rate_pct": -0.6828922855119783,
|
100
141
|
"response_time": -13.277948965202711,
|
101
142
|
"response_time_pct": -0.17788655901967856,
|
102
|
-
"
|
103
|
-
"
|
143
|
+
"throughput": -3791.4821428571413,
|
144
|
+
"throughput_pct": -0.1095450546169726
|
104
145
|
},
|
105
146
|
"messages": {
|
106
147
|
"info": "Comparing the weeks 2017-07-31-2017-08-07 and 2017-08-07-2017-08-14.",
|
107
148
|
"error_rate": "The error rate decreased by 0.13% (from 0.2% to 0.06%, that is a change of -68.29%).",
|
108
149
|
"response_time": "The response time decreased by 13.28ms (from 74.64ms to 61.36ms, that is a change of -17.79%).",
|
109
|
-
"
|
150
|
+
"throughput": "The hourly throughput decreased by 3791.48 req/h (from 34611.17 req/h to 30819.68 req/h, that is a change of -10.95%)."
|
110
151
|
}
|
111
152
|
}
|
112
153
|
```
|
@@ -125,9 +166,17 @@ application. If you look at the example URL
|
|
125
166
|
`appsignal.com/devex/sites/XYZ456/web/exceptions`, the application ID is
|
126
167
|
`XYZ456`.
|
127
168
|
|
169
|
+
### How do I set up a Slack webhook?
|
170
|
+
|
171
|
+
Go to this [page](https://my.slack.com/services/new/incoming-webhook) to set up
|
172
|
+
a Slack webhook. You can specify some settings like user name or an avatar, and
|
173
|
+
should be provided a webhook URL in the format of
|
174
|
+
`https://hooks.slack.com/services/ABC/123/XYZ`.
|
175
|
+
|
128
176
|
## Maintainer
|
129
177
|
|
130
|
-
[
|
178
|
+
- [Devex](https://github.com/orgs/Devex)
|
179
|
+
- [Daniel Sager](https://github.com/dsager)
|
131
180
|
|
132
181
|
## Contributing
|
133
182
|
|
data/bin/appsignal_report_deploy
CHANGED
@@ -18,55 +18,12 @@
|
|
18
18
|
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
|
19
19
|
|
20
20
|
require 'appsignal_report'
|
21
|
-
require 'optparse'
|
22
21
|
|
23
|
-
|
24
|
-
|
25
|
-
parser.banner =
|
26
|
-
'Usage: APPSIGNAL_API_TOKEN=XXX ./bin/appsignal_report_deploy [options]'
|
27
|
-
parser.separator ''
|
28
|
-
parser.separator 'Specific options:'
|
29
|
-
parser.on('-i ID',
|
30
|
-
'--app-id ID',
|
31
|
-
String,
|
32
|
-
'Specify Appsignal App Id') do |id|
|
33
|
-
options[:app_id] = id
|
34
|
-
end
|
35
|
-
parser.on('-n NAME',
|
36
|
-
'--app-name NAME',
|
37
|
-
String,
|
38
|
-
'Specify a name for the Appsignal App') do |name|
|
39
|
-
options[:app_name] = name
|
40
|
-
end
|
41
|
-
parser.on('-s WEBHOOK_URL',
|
42
|
-
'--slack WEBHOOK_URL',
|
43
|
-
String,
|
44
|
-
'Post the report to a Slack Webhook') do |url|
|
45
|
-
options[:slack_webhook] = url
|
46
|
-
end
|
47
|
-
parser.separator ''
|
48
|
-
parser.separator 'Common options:'
|
49
|
-
parser.on_tail('-h', '--help', 'Show this message') do
|
50
|
-
puts parser
|
51
|
-
exit
|
52
|
-
end
|
53
|
-
end
|
54
|
-
parser.parse!
|
22
|
+
option_parser = AppsignalReport::CLI::OptionParser
|
23
|
+
.new(type: :deploy, api_token: ENV['APPSIGNAL_API_TOKEN'])
|
55
24
|
|
56
|
-
|
57
|
-
api_token: ENV['APPSIGNAL_API_TOKEN'],
|
58
|
-
app_id: options[:app_id],
|
59
|
-
app_name: options[:app_name]
|
60
|
-
)
|
25
|
+
option_parser.parse
|
61
26
|
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
message = AppsignalReport::SlackMessage.new(
|
66
|
-
report: report,
|
67
|
-
webhook_url: options[:slack_webhook]
|
68
|
-
)
|
69
|
-
puts message.post
|
70
|
-
else
|
71
|
-
puts report.report.to_json
|
72
|
-
end
|
27
|
+
AppsignalReport::CLI::Runner
|
28
|
+
.new(option_parser.options)
|
29
|
+
.run
|
data/bin/appsignal_report_weekly
CHANGED
@@ -15,55 +15,12 @@
|
|
15
15
|
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
|
16
16
|
|
17
17
|
require 'appsignal_report'
|
18
|
-
require 'optparse'
|
19
18
|
|
20
|
-
|
21
|
-
|
22
|
-
parser.banner =
|
23
|
-
'Usage: APPSIGNAL_API_TOKEN=XXX ./bin/appsignal_report_weekly [options]'
|
24
|
-
parser.separator ''
|
25
|
-
parser.separator 'Specific options:'
|
26
|
-
parser.on('-i ID',
|
27
|
-
'--app-id ID',
|
28
|
-
String,
|
29
|
-
'Specify Appsignal App Id') do |id|
|
30
|
-
options[:app_id] = id
|
31
|
-
end
|
32
|
-
parser.on('-n NAME',
|
33
|
-
'--app-name NAME',
|
34
|
-
String,
|
35
|
-
'Specify a name for the Appsignal App') do |name|
|
36
|
-
options[:app_name] = name
|
37
|
-
end
|
38
|
-
parser.on('-s WEBHOOK_URL',
|
39
|
-
'--slack WEBHOOK_URL',
|
40
|
-
String,
|
41
|
-
'Post the report to a Slack Webhook') do |url|
|
42
|
-
options[:slack_webhook] = url
|
43
|
-
end
|
44
|
-
parser.separator ''
|
45
|
-
parser.separator 'Common options:'
|
46
|
-
parser.on_tail('-h', '--help', 'Show this message') do
|
47
|
-
puts parser
|
48
|
-
exit
|
49
|
-
end
|
50
|
-
end
|
51
|
-
parser.parse!
|
19
|
+
option_parser = AppsignalReport::CLI::OptionParser
|
20
|
+
.new(type: :weekly, api_token: ENV['APPSIGNAL_API_TOKEN'])
|
52
21
|
|
53
|
-
|
54
|
-
api_token: ENV['APPSIGNAL_API_TOKEN'],
|
55
|
-
app_id: options[:app_id],
|
56
|
-
app_name: options[:app_name]
|
57
|
-
)
|
22
|
+
option_parser.parse
|
58
23
|
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
message = AppsignalReport::SlackMessage.new(
|
63
|
-
report: report,
|
64
|
-
webhook_url: options[:slack_webhook]
|
65
|
-
)
|
66
|
-
puts message.post
|
67
|
-
else
|
68
|
-
puts report.report.to_json
|
69
|
-
end
|
24
|
+
AppsignalReport::CLI::Runner
|
25
|
+
.new(option_parser.options)
|
26
|
+
.run
|
@@ -37,13 +37,14 @@ module AppsignalReport
|
|
37
37
|
|
38
38
|
def process_metrics
|
39
39
|
api_response = perform_api_request(metrics_uri)
|
40
|
+
@report[:resolution] = api_response[:resolution]
|
40
41
|
data = balance_samples(gather_samples(api_response[:data]))
|
41
42
|
%i(before after).each do |key|
|
42
43
|
@report[key] = {
|
43
44
|
data_points: data[key].size,
|
44
45
|
error_rate: get_average(data[key], :ex_rate),
|
45
46
|
response_time: get_average(data[key], :mean),
|
46
|
-
|
47
|
+
throughput: get_average(data[key], :count),
|
47
48
|
}
|
48
49
|
end
|
49
50
|
@report.merge!(
|
@@ -60,7 +61,8 @@ module AppsignalReport
|
|
60
61
|
info: info_message,
|
61
62
|
error_rate: metric_message(:error_rate, '%'),
|
62
63
|
response_time: metric_message(:response_time, 'ms'),
|
63
|
-
|
64
|
+
throughput: metric_message(:throughput,
|
65
|
+
" req/#{@report[:resolution][0]}"),
|
64
66
|
}
|
65
67
|
end
|
66
68
|
|
@@ -91,8 +93,8 @@ module AppsignalReport
|
|
91
93
|
error_rate_pct: pct_diff(:error_rate),
|
92
94
|
response_time: abs_diff(:response_time),
|
93
95
|
response_time_pct: pct_diff(:response_time),
|
94
|
-
|
95
|
-
|
96
|
+
throughput: abs_diff(:throughput),
|
97
|
+
throughput_pct: pct_diff(:throughput),
|
96
98
|
}
|
97
99
|
end
|
98
100
|
|
@@ -0,0 +1,56 @@
|
|
1
|
+
module AppsignalReport
|
2
|
+
module CLI
|
3
|
+
class OptionParser
|
4
|
+
def initialize(additional_options = {})
|
5
|
+
@additional_options = additional_options
|
6
|
+
end
|
7
|
+
|
8
|
+
def parse
|
9
|
+
option_parser.parse!
|
10
|
+
end
|
11
|
+
|
12
|
+
def options
|
13
|
+
@options ||= {
|
14
|
+
slack_webhook: nil,
|
15
|
+
app_id: nil,
|
16
|
+
app_name: nil,
|
17
|
+
}.merge(@additional_options)
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def option_parser
|
23
|
+
::OptionParser.new do |parser|
|
24
|
+
parser.banner =
|
25
|
+
'Usage: APPSIGNAL_API_TOKEN=XXX ./bin/appsignal_report_* [options]'
|
26
|
+
parser.separator ''
|
27
|
+
parser.separator 'Specific options:'
|
28
|
+
parser.on('-i ID',
|
29
|
+
'--app-id ID',
|
30
|
+
String,
|
31
|
+
'Specify Appsignal App Id') do |id|
|
32
|
+
options[:app_id] = id
|
33
|
+
end
|
34
|
+
parser.on('-n NAME',
|
35
|
+
'--app-name NAME',
|
36
|
+
String,
|
37
|
+
'Specify a name for the Appsignal App') do |name|
|
38
|
+
options[:app_name] = name
|
39
|
+
end
|
40
|
+
parser.on('-s WEBHOOK_URL',
|
41
|
+
'--slack WEBHOOK_URL',
|
42
|
+
String,
|
43
|
+
'Post the report to a Slack Webhook') do |url|
|
44
|
+
options[:slack_webhook] = url
|
45
|
+
end
|
46
|
+
parser.separator ''
|
47
|
+
parser.separator 'Common options:'
|
48
|
+
parser.on_tail('-h', '--help', 'Show this message') do
|
49
|
+
puts parser
|
50
|
+
exit
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module AppsignalReport
|
2
|
+
module CLI
|
3
|
+
class Runner
|
4
|
+
attr_reader :options
|
5
|
+
|
6
|
+
def initialize(options)
|
7
|
+
@options = options
|
8
|
+
end
|
9
|
+
|
10
|
+
def run
|
11
|
+
report.generate
|
12
|
+
options[:slack_webhook] ? post_to_slack : print_json
|
13
|
+
end
|
14
|
+
|
15
|
+
def report
|
16
|
+
@report ||= report_class.new(
|
17
|
+
api_token: options[:api_token],
|
18
|
+
app_id: options[:app_id],
|
19
|
+
app_name: options[:app_name]
|
20
|
+
)
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def report_class
|
26
|
+
case options[:type]
|
27
|
+
when :deploy
|
28
|
+
AppsignalReport::DeployReport
|
29
|
+
when :weekly
|
30
|
+
AppsignalReport::WeeklyReport
|
31
|
+
else
|
32
|
+
raise ArgumentError, "invalid report type: '#{options[:type]}'"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
def print_json
|
38
|
+
puts report.report.to_json
|
39
|
+
end
|
40
|
+
|
41
|
+
def post_to_slack
|
42
|
+
message = AppsignalReport::SlackMessage.new(
|
43
|
+
report: report,
|
44
|
+
webhook_url: options[:slack_webhook]
|
45
|
+
)
|
46
|
+
puts message.post
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -36,7 +36,7 @@ module AppsignalReport
|
|
36
36
|
":information_source: #{report.report[:messages][:info]}",
|
37
37
|
"#{error_rate_icon} #{report.report[:messages][:error_rate]}",
|
38
38
|
"#{response_time_icon} #{report.report[:messages][:response_time]}",
|
39
|
-
"#{throughput_icon} #{report.report[:messages][:
|
39
|
+
"#{throughput_icon} #{report.report[:messages][:throughput]}",
|
40
40
|
]
|
41
41
|
end
|
42
42
|
|
@@ -50,11 +50,7 @@ module AppsignalReport
|
|
50
50
|
|
51
51
|
def throughput_icon
|
52
52
|
up_down =
|
53
|
-
|
54
|
-
'downwards'
|
55
|
-
else
|
56
|
-
'upwards'
|
57
|
-
end
|
53
|
+
report.report[:diff][:throughput].negative? ? 'downwards' : 'upwards'
|
58
54
|
":chart_with_#{up_down}_trend:"
|
59
55
|
end
|
60
56
|
end
|
data/lib/appsignal_report.rb
CHANGED
@@ -2,9 +2,12 @@ require 'uri'
|
|
2
2
|
require 'net/http'
|
3
3
|
require 'json'
|
4
4
|
require 'time'
|
5
|
+
require 'optparse'
|
5
6
|
|
6
7
|
require_relative 'appsignal_report/version'
|
7
8
|
require_relative 'appsignal_report/base_report'
|
8
9
|
require_relative 'appsignal_report/weekly_report'
|
9
10
|
require_relative 'appsignal_report/deploy_report'
|
10
11
|
require_relative 'appsignal_report/slack_message'
|
12
|
+
require_relative 'appsignal_report/cli/option_parser'
|
13
|
+
require_relative 'appsignal_report/cli/runner'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: appsignal_report
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Sager
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-08-
|
11
|
+
date: 2017-08-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -53,6 +53,8 @@ files:
|
|
53
53
|
- bin/appsignal_report_weekly
|
54
54
|
- lib/appsignal_report.rb
|
55
55
|
- lib/appsignal_report/base_report.rb
|
56
|
+
- lib/appsignal_report/cli/option_parser.rb
|
57
|
+
- lib/appsignal_report/cli/runner.rb
|
56
58
|
- lib/appsignal_report/deploy_report.rb
|
57
59
|
- lib/appsignal_report/slack_message.rb
|
58
60
|
- lib/appsignal_report/version.rb
|
@@ -77,7 +79,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
77
79
|
version: '0'
|
78
80
|
requirements: []
|
79
81
|
rubyforge_project:
|
80
|
-
rubygems_version: 2.
|
82
|
+
rubygems_version: 2.6.11
|
81
83
|
signing_key:
|
82
84
|
specification_version: 4
|
83
85
|
summary: Useful reports around your AppSignal metrics
|