lita-metrics 0.1.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 +7 -0
- data/.coveralls.yml +1 -0
- data/.gitignore +18 -0
- data/.travis.yml +8 -0
- data/Gemfile +5 -0
- data/LICENSE +19 -0
- data/README.md +67 -0
- data/Rakefile +6 -0
- data/lib/lita-metrics.rb +16 -0
- data/lib/lita/handlers/metrics.rb +88 -0
- data/lita-metrics.gemspec +27 -0
- data/locales/en.yml +4 -0
- data/spec/lita/handlers/metrics_spec.rb +166 -0
- data/spec/spec_helper.rb +14 -0
- data/templates/.gitkeep +0 -0
- metadata +187 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: f4dd851e5cdba74c0ed101f678eb7e047bc51c6f
|
4
|
+
data.tar.gz: 719ed64a1e3a628884b9a66e73b968bbfe5d7463
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 36d77bf75181b61bbf202136c4b75628ce66827b258a16b615b15161ec620d1302741af174b38cf97d6f1ec596c5c41ca17727872496bc5c5543c8043bf85e52
|
7
|
+
data.tar.gz: e5799ba8e53eff76198b1c8f4cae47dc7bee400a2859f9204dc384304900de36eb087cc956353449045881e7e1cd04c574d0065d6d1cd8fb6fcad58e76921eee
|
data/.coveralls.yml
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
service_name: travis-ci
|
data/.gitignore
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
Copyright (c) 2015 Tristan Chong
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
+
of this software and associated documentation files (the "Software"), to deal
|
5
|
+
in the Software without restriction, including without limitation the rights
|
6
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
+
copies of the Software, and to permit persons to whom the Software is
|
8
|
+
furnished to do so, subject to the following conditions:
|
9
|
+
|
10
|
+
The above copyright notice and this permission notice shall be included in
|
11
|
+
all copies or substantial portions of the Software.
|
12
|
+
|
13
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
+
THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
# lita-metrics
|
2
|
+
|
3
|
+
[](https://travis-ci.org/PagerDuty/lita-metrics)
|
4
|
+
[](https://coveralls.io/r/PagerDuty/lita-metrics)
|
5
|
+
|
6
|
+
**lita-metrics** is a handler for [Lita](https://github.com/jimmycuadra/lita) that keeps track of Lita usage metrics (e.g. users, rooms, handlers and methods triggered) using [Datadog](http://www.datadoghq.com/). It also logs messages that match valid chat routes, as well as attempted commands that failed to trigger any handlers.
|
7
|
+
|
8
|
+
## Installation
|
9
|
+
|
10
|
+
Add lita-metrics to your Lita instance's Gemfile:
|
11
|
+
|
12
|
+
``` ruby
|
13
|
+
gem "lita-metrics"
|
14
|
+
```
|
15
|
+
|
16
|
+
## Configuration
|
17
|
+
|
18
|
+
### Optional attributes
|
19
|
+
* `statsd_host` - Your Statsd server's address. Default: `'localhost'`
|
20
|
+
* `statsd_port`- Your Statsd server's port. Default: `8125`
|
21
|
+
* `valid_command_logger` - [Logger options](http://ruby-doc.org/stdlib-2.2.0/libdoc/logger/rdoc/Logger.html#label-How+to+create+a+logger) for recording messages that match routes. Default: `STDOUT`
|
22
|
+
* `invalid_command_logger` - Logger options for recording failed commands. Default: `STDOUT`
|
23
|
+
* `valid_command_metric` - The name of the valid message counter to be incremented in Datadog. Default: `'lita.commands.valid'`
|
24
|
+
* `invalid_command_metric` - The name of the invalid command counter to be incremented in Datadog. Default: `'lita.commands.invalid'`
|
25
|
+
* `log_fields` - Fields to include in the logs; possible options are listed below. Default: `[:user, :room, :message]`
|
26
|
+
* `:user` - ID of the user who sent the message
|
27
|
+
* `:room` - ID of the room in which the message was sent
|
28
|
+
* `:message` - The message text
|
29
|
+
* `:command` - A boolean indicating whether the message was a command
|
30
|
+
* `:handler` - The name of the handler invoked. Not available for invalid commands
|
31
|
+
* `:method` - The name of the handler method invoked. Not available for invalid commands
|
32
|
+
|
33
|
+
``` ruby
|
34
|
+
Lita.configure do |config|
|
35
|
+
config.handlers.metrics.statsd_host = 'localhost'
|
36
|
+
config.handlers.metrics.statsd_port = 8125
|
37
|
+
config.handlers.metrics.valid_command_logger = '/var/log/lita/messages.log', 'daily'
|
38
|
+
config.handlers.metrics.invalid_command_logger = '/var/log/lita/attempted_commands.log', 10, 1024000
|
39
|
+
config.handlers.metrics.valid_command_metric = 'lita.messages.all'
|
40
|
+
config.handlers.metrics.invalid_command_metric = 'lita.messages.failed'
|
41
|
+
config.handlers.metrics.log_fields = [:user, :handler, :message]
|
42
|
+
end
|
43
|
+
```
|
44
|
+
|
45
|
+
## Usage
|
46
|
+
|
47
|
+
Once the handler is configured, it will record metrics and logs without needing to be invoked explicitly by any commands. For example, if I send the command `/r/chatops` and [lita-snoo](https://github.com/tristaneuan/lita-snoo) is installed, the StatsD server will receive this:
|
48
|
+
```
|
49
|
+
lita.commands.valid:1|c|#user:1,private_message:false,command:true,room:shell,handler:Lita::Handlers::Snoo,method:subreddit
|
50
|
+
```
|
51
|
+
...and the log might look like this:
|
52
|
+
```
|
53
|
+
I, [2015-08-21T17:45:33.761986 #81678] INFO -- : 1,shell,/r/chatops
|
54
|
+
```
|
55
|
+
|
56
|
+
If I send the command `foo` and there is no handler installed that recognizes it, the StatsD server will receive this:
|
57
|
+
```
|
58
|
+
lita.commands.invalid:1|c|#user:1,private_message:false,command:true,room:shell
|
59
|
+
```
|
60
|
+
...and the log might look like this:
|
61
|
+
```
|
62
|
+
I, [2015-08-24T16:40:25.726132 #45705] INFO -- : 1,shell,foo
|
63
|
+
```
|
64
|
+
|
65
|
+
## License
|
66
|
+
|
67
|
+
[MIT](http://opensource.org/licenses/MIT)
|
data/Rakefile
ADDED
data/lib/lita-metrics.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'lita'
|
2
|
+
|
3
|
+
Lita.load_locales Dir[File.expand_path(
|
4
|
+
File.join('..', '..', 'locales', '*.yml'), __FILE__
|
5
|
+
)]
|
6
|
+
|
7
|
+
require 'csv'
|
8
|
+
require 'logger'
|
9
|
+
require 'statsd'
|
10
|
+
|
11
|
+
require 'lita/handlers/metrics'
|
12
|
+
|
13
|
+
Lita::Handlers::Metrics.template_root File.expand_path(
|
14
|
+
File.join('..', '..', 'templates'),
|
15
|
+
__FILE__
|
16
|
+
)
|
@@ -0,0 +1,88 @@
|
|
1
|
+
module Lita
|
2
|
+
module Handlers
|
3
|
+
class Metrics < Handler
|
4
|
+
class << self
|
5
|
+
attr_accessor :statsd
|
6
|
+
attr_accessor :valid_command_log
|
7
|
+
attr_accessor :invalid_command_log
|
8
|
+
end
|
9
|
+
|
10
|
+
config :statsd_host, type: String, default: 'localhost'
|
11
|
+
config :statsd_port, type: Integer, default: 8125
|
12
|
+
config :valid_command_logger, default: STDOUT
|
13
|
+
config :invalid_command_logger, default: STDOUT
|
14
|
+
config :valid_command_metric, type: String, default: 'lita.commands.valid'
|
15
|
+
config :invalid_command_metric, type: String, default: 'lita.commands.invalid'
|
16
|
+
config :log_fields, default: [:user, :room, :message]
|
17
|
+
|
18
|
+
on :loaded, :setup
|
19
|
+
on :message_dispatched, :valid_command
|
20
|
+
on :unhandled_message, :invalid_command
|
21
|
+
|
22
|
+
def setup(_payload)
|
23
|
+
self.class.statsd = Statsd.new(config.statsd_host, config.statsd_port)
|
24
|
+
self.class.valid_command_log = ::Logger.new(*arrayize(config.valid_command_logger))
|
25
|
+
self.class.invalid_command_log = ::Logger.new(*arrayize(config.invalid_command_logger))
|
26
|
+
end
|
27
|
+
|
28
|
+
def valid_command(payload)
|
29
|
+
fields = extract_fields(payload)
|
30
|
+
|
31
|
+
self.class.statsd.increment(
|
32
|
+
config.valid_command_metric,
|
33
|
+
tags: fields.each.select { |k, v| k != :message }.map { |k, v| "#{k}:#{v}" }
|
34
|
+
)
|
35
|
+
|
36
|
+
self.class.valid_command_log.info(format_log(fields)) unless fields[:private_message]
|
37
|
+
end
|
38
|
+
|
39
|
+
def invalid_command(payload)
|
40
|
+
fields = extract_fields(payload)
|
41
|
+
|
42
|
+
return unless fields[:command]
|
43
|
+
|
44
|
+
self.class.statsd.increment(
|
45
|
+
config.invalid_command_metric,
|
46
|
+
tags: fields.each.select { |k, v| k != :message }.map { |k, v| "#{k}:#{v}" }
|
47
|
+
)
|
48
|
+
|
49
|
+
self.class.invalid_command_log.info(format_log(fields)) unless fields[:private_message]
|
50
|
+
end
|
51
|
+
|
52
|
+
private
|
53
|
+
|
54
|
+
def arrayize(arg)
|
55
|
+
arg.is_a?(Array) ? arg : [arg]
|
56
|
+
end
|
57
|
+
|
58
|
+
def extract_fields(payload)
|
59
|
+
m = payload[:message]
|
60
|
+
|
61
|
+
fields = {
|
62
|
+
message: m.body,
|
63
|
+
user: m.user.id,
|
64
|
+
private_message: m.source.private_message?,
|
65
|
+
command: m.command?
|
66
|
+
}
|
67
|
+
|
68
|
+
fields[:room] = m.source.room_object.id unless fields[:private_message]
|
69
|
+
|
70
|
+
h = payload[:handler]
|
71
|
+
r = payload[:route]
|
72
|
+
|
73
|
+
return fields if h.nil? && r.nil?
|
74
|
+
|
75
|
+
fields[:handler] = h.name
|
76
|
+
fields[:method] = r.callback.method_name || '(block)'
|
77
|
+
|
78
|
+
fields
|
79
|
+
end
|
80
|
+
|
81
|
+
def format_log(fields)
|
82
|
+
CSV.generate_line(arrayize(config.log_fields).each.map { |x| fields[x] }).chomp
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
Lita.register_handler(Metrics)
|
87
|
+
end
|
88
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
Gem::Specification.new do |spec|
|
2
|
+
spec.name = "lita-metrics"
|
3
|
+
spec.version = "0.1.0"
|
4
|
+
spec.authors = ["Tristan Chong"]
|
5
|
+
spec.email = ["tristan@pagerduty.com"]
|
6
|
+
spec.description = "A Lita handler that tracks Lita usage metrics."
|
7
|
+
spec.summary = "A Lita handler that tracks Lita usage metrics."
|
8
|
+
spec.homepage = "https://github.com/PagerDuty/lita-metrics"
|
9
|
+
spec.license = "MIT"
|
10
|
+
spec.metadata = { "lita_plugin_type" => "handler" }
|
11
|
+
|
12
|
+
spec.files = `git ls-files`.split($/)
|
13
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
14
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
15
|
+
spec.require_paths = ["lib"]
|
16
|
+
|
17
|
+
spec.add_runtime_dependency "lita", ">= 4.5"
|
18
|
+
spec.add_runtime_dependency "dogstatsd-ruby", "~> 1.5.0"
|
19
|
+
|
20
|
+
spec.add_development_dependency "bundler", "~> 1.3"
|
21
|
+
spec.add_development_dependency "pry-byebug"
|
22
|
+
spec.add_development_dependency "rake"
|
23
|
+
spec.add_development_dependency "rack-test"
|
24
|
+
spec.add_development_dependency "rspec", ">= 3.0.0"
|
25
|
+
spec.add_development_dependency "simplecov"
|
26
|
+
spec.add_development_dependency "coveralls"
|
27
|
+
end
|
data/locales/en.yml
ADDED
@@ -0,0 +1,166 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Lita::Handlers::Metrics, lita_handler: true do
|
4
|
+
let(:test_handler) do
|
5
|
+
Class.new do
|
6
|
+
extend Lita::Handler::ChatRouter
|
7
|
+
|
8
|
+
def self.name
|
9
|
+
'Lita::Handlers::Test'
|
10
|
+
end
|
11
|
+
|
12
|
+
route(/message/, :test_message)
|
13
|
+
route(/command/, :test_command, command: true)
|
14
|
+
|
15
|
+
def test_message(response)
|
16
|
+
response.reply('message')
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_command(response)
|
20
|
+
response.reply('command')
|
21
|
+
end
|
22
|
+
|
23
|
+
route(/block/) do |response|
|
24
|
+
response.reply('block')
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
let(:john) do
|
30
|
+
Lita::User.create('U1234ABCD', name: 'John', mention_name: 'john')
|
31
|
+
end
|
32
|
+
|
33
|
+
let(:general) do
|
34
|
+
Lita::Room.create_or_update('C1234567890', name: 'general')
|
35
|
+
end
|
36
|
+
|
37
|
+
before do
|
38
|
+
robot.trigger(:loaded)
|
39
|
+
registry.register_handler(test_handler)
|
40
|
+
end
|
41
|
+
|
42
|
+
it { is_expected.to route_event(:message_dispatched).to(:valid_command) }
|
43
|
+
it { is_expected.to route_event(:unhandled_message).to(:invalid_command) }
|
44
|
+
|
45
|
+
describe '#valid_command' do
|
46
|
+
describe 'statsd' do
|
47
|
+
it 'increments the valid command counter for messages that match a route' do
|
48
|
+
expect(described_class.statsd).to receive(:increment).with(
|
49
|
+
'lita.commands.valid',
|
50
|
+
tags: [
|
51
|
+
'user:U1234ABCD',
|
52
|
+
'private_message:false',
|
53
|
+
'command:false',
|
54
|
+
'room:C1234567890',
|
55
|
+
'handler:Lita::Handlers::Test',
|
56
|
+
'method:test_message'
|
57
|
+
]
|
58
|
+
)
|
59
|
+
send_message('message', as: john, from: general)
|
60
|
+
end
|
61
|
+
|
62
|
+
it 'counts blocks correctly' do
|
63
|
+
expect(described_class.statsd).to receive(:increment).with(
|
64
|
+
'lita.commands.valid',
|
65
|
+
tags: [
|
66
|
+
'user:U1234ABCD',
|
67
|
+
'private_message:false',
|
68
|
+
'command:false',
|
69
|
+
'room:C1234567890',
|
70
|
+
'handler:Lita::Handlers::Test',
|
71
|
+
'method:(block)'
|
72
|
+
]
|
73
|
+
)
|
74
|
+
send_message('block', as: john, from: general)
|
75
|
+
end
|
76
|
+
|
77
|
+
it 'allows the valid command metric name to be configured' do
|
78
|
+
registry.config.handlers.metrics.valid_command_metric = 'lita.messages.all'
|
79
|
+
expect(described_class.statsd).to receive(:increment).with(
|
80
|
+
'lita.messages.all',
|
81
|
+
tags: anything
|
82
|
+
)
|
83
|
+
send_command('command', as: john, from: general)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
describe 'logger' do
|
88
|
+
it 'logs messages that match a route' do
|
89
|
+
expect(described_class.valid_command_log).to receive(:info).with('U1234ABCD,C1234567890,message')
|
90
|
+
send_message('message', as: john, from: general)
|
91
|
+
end
|
92
|
+
|
93
|
+
it 'does not log messages that do not match a route' do
|
94
|
+
expect(described_class.valid_command_log).not_to receive(:info)
|
95
|
+
send_message('foo', as: john, from: general)
|
96
|
+
end
|
97
|
+
|
98
|
+
it 'does not log commands that do not match a route' do
|
99
|
+
expect(described_class.valid_command_log).not_to receive(:info)
|
100
|
+
send_command('foo', as: john, from: general)
|
101
|
+
end
|
102
|
+
|
103
|
+
it 'does not log private messages' do
|
104
|
+
expect(described_class.valid_command_log).not_to receive(:info)
|
105
|
+
send_message('message', as: john, privately: true)
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
describe '#invalid_command' do
|
111
|
+
describe 'statsd' do
|
112
|
+
it 'increments the invalid command counter for commands that do not match a route' do
|
113
|
+
expect(described_class.statsd).to receive(:increment).with(
|
114
|
+
'lita.commands.invalid',
|
115
|
+
tags: [
|
116
|
+
'user:U1234ABCD',
|
117
|
+
'private_message:false',
|
118
|
+
'command:true',
|
119
|
+
'room:C1234567890'
|
120
|
+
]
|
121
|
+
)
|
122
|
+
send_command('foo', as: john, from: general)
|
123
|
+
end
|
124
|
+
|
125
|
+
it 'does not increment the invalid command counter for messages that do not match a route' do
|
126
|
+
expect(described_class.statsd).not_to receive(:increment).with(
|
127
|
+
'lita.commands.invalid',
|
128
|
+
tags: anything
|
129
|
+
)
|
130
|
+
send_message('foo', as: john, from: general)
|
131
|
+
end
|
132
|
+
|
133
|
+
it 'allows the invalid command metric name to be configured' do
|
134
|
+
registry.config.handlers.metrics.invalid_command_metric = 'lita.messages.failed'
|
135
|
+
expect(described_class.statsd).to receive(:increment).with(
|
136
|
+
'lita.messages.failed',
|
137
|
+
tags: anything
|
138
|
+
)
|
139
|
+
send_command('foo', as: john, from: general)
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
describe 'logger' do
|
144
|
+
it 'logs unhandled commands' do
|
145
|
+
expect(described_class.invalid_command_log).to receive(:info).with('U1234ABCD,C1234567890,foo')
|
146
|
+
send_command('foo', as: john, from: general)
|
147
|
+
end
|
148
|
+
|
149
|
+
it 'does not log unhandled messages that are not commands' do
|
150
|
+
expect(described_class.invalid_command_log).not_to receive(:info)
|
151
|
+
send_message('foo', as: john, from: general)
|
152
|
+
end
|
153
|
+
|
154
|
+
it 'does not log unhandled commands sent as private messages' do
|
155
|
+
expect(described_class.invalid_command_log).not_to receive(:info)
|
156
|
+
send_command('foo', as: john, privately: true)
|
157
|
+
end
|
158
|
+
|
159
|
+
it 'allows the log fields to be configured' do
|
160
|
+
registry.config.handlers.metrics.log_fields = :message
|
161
|
+
expect(described_class.invalid_command_log).to receive(:info).with('foo')
|
162
|
+
send_command('foo', as: john, from: general)
|
163
|
+
end
|
164
|
+
end
|
165
|
+
end
|
166
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require "simplecov"
|
2
|
+
require "coveralls"
|
3
|
+
SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
|
4
|
+
SimpleCov::Formatter::HTMLFormatter,
|
5
|
+
Coveralls::SimpleCov::Formatter
|
6
|
+
]
|
7
|
+
SimpleCov.start { add_filter "/spec/" }
|
8
|
+
|
9
|
+
require "lita-metrics"
|
10
|
+
require "lita/rspec"
|
11
|
+
|
12
|
+
# A compatibility mode is provided for older plugins upgrading from Lita 3. Since this plugin
|
13
|
+
# was generated with Lita 4, the compatibility mode should be left disabled.
|
14
|
+
Lita.version_3_compatibility_mode = false
|
data/templates/.gitkeep
ADDED
File without changes
|
metadata
ADDED
@@ -0,0 +1,187 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: lita-metrics
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Tristan Chong
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-08-25 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: lita
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '4.5'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '4.5'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: dogstatsd-ruby
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.5.0
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 1.5.0
|
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.3'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.3'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: pry-byebug
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rake
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rack-test
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rspec
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: 3.0.0
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 3.0.0
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: simplecov
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: coveralls
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
description: A Lita handler that tracks Lita usage metrics.
|
140
|
+
email:
|
141
|
+
- tristan@pagerduty.com
|
142
|
+
executables: []
|
143
|
+
extensions: []
|
144
|
+
extra_rdoc_files: []
|
145
|
+
files:
|
146
|
+
- ".coveralls.yml"
|
147
|
+
- ".gitignore"
|
148
|
+
- ".travis.yml"
|
149
|
+
- Gemfile
|
150
|
+
- LICENSE
|
151
|
+
- README.md
|
152
|
+
- Rakefile
|
153
|
+
- lib/lita-metrics.rb
|
154
|
+
- lib/lita/handlers/metrics.rb
|
155
|
+
- lita-metrics.gemspec
|
156
|
+
- locales/en.yml
|
157
|
+
- spec/lita/handlers/metrics_spec.rb
|
158
|
+
- spec/spec_helper.rb
|
159
|
+
- templates/.gitkeep
|
160
|
+
homepage: https://github.com/PagerDuty/lita-metrics
|
161
|
+
licenses:
|
162
|
+
- MIT
|
163
|
+
metadata:
|
164
|
+
lita_plugin_type: handler
|
165
|
+
post_install_message:
|
166
|
+
rdoc_options: []
|
167
|
+
require_paths:
|
168
|
+
- lib
|
169
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - ">="
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
174
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
175
|
+
requirements:
|
176
|
+
- - ">="
|
177
|
+
- !ruby/object:Gem::Version
|
178
|
+
version: '0'
|
179
|
+
requirements: []
|
180
|
+
rubyforge_project:
|
181
|
+
rubygems_version: 2.4.5
|
182
|
+
signing_key:
|
183
|
+
specification_version: 4
|
184
|
+
summary: A Lita handler that tracks Lita usage metrics.
|
185
|
+
test_files:
|
186
|
+
- spec/lita/handlers/metrics_spec.rb
|
187
|
+
- spec/spec_helper.rb
|