lita-pagerduty 0.1.3 → 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 +4 -4
- data/lib/lita/handlers/pagerduty_utility.rb +27 -1
- data/lib/pagerduty_helper/utility.rb +14 -0
- data/lita-pagerduty.gemspec +2 -2
- data/locales/en.yml +7 -0
- data/spec/lita/handlers/pagerduty_utility_spec.rb +1 -0
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9c9ba4c8271e94b9c23d22f707845a00386f969e
|
4
|
+
data.tar.gz: ecd72110e2cf05de53a053d0fd37d966021a2cf6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8f33eaa15bb597dc5ec5ccfebd0e0f8bcb8d4df069651790ee873c5e6b9e0fbdf93917b2380dc7611f09c4967b08e69fc25b204dd256062d7d310e6460e9dae2
|
7
|
+
data.tar.gz: 76f1d1a750a73c00002f61255be2c5e3ac313cc11f5bda026e2cd838dc2a423aac6d2ba3c8f49a027624554d7b87733175f1fcf7de0ae57c0b81e1c883df2609
|
@@ -51,6 +51,13 @@ module Lita
|
|
51
51
|
}
|
52
52
|
)
|
53
53
|
|
54
|
+
route(
|
55
|
+
/^pager\s+me\s+(.+?)\s+(\d+)m?$/,
|
56
|
+
:pager_me,
|
57
|
+
command: true,
|
58
|
+
help: { t('help.pager_me.syntax') => t('help.pager_me.desc') }
|
59
|
+
)
|
60
|
+
|
54
61
|
def on_call_list(response)
|
55
62
|
schedules = pd_client.get_schedules.schedules
|
56
63
|
if schedules.any?
|
@@ -78,6 +85,25 @@ module Lita
|
|
78
85
|
end
|
79
86
|
# rubocop:enable Metrics/AbcSize
|
80
87
|
|
88
|
+
# rubocop:disable Metrics/AbcSize
|
89
|
+
def pager_me(response)
|
90
|
+
schedule_name = response.match_data[1].strip
|
91
|
+
schedule = pd_client.get_schedules.schedules.find { |s| s.name.casecmp(schedule_name) == 0 }
|
92
|
+
return response.reply(t('on_call_lookup.no_matching_schedule', schedule_name: schedule_name)) unless schedule
|
93
|
+
|
94
|
+
email = fetch_user(response.user)
|
95
|
+
return response.reply(t('identify.missing')) unless email
|
96
|
+
|
97
|
+
users = pd_client.get_users(query: email)
|
98
|
+
return response.reply(t('identify.unrecognised')) unless users.total == 1
|
99
|
+
|
100
|
+
override = take_pager(schedule.id, users.users.first.id, response.match_data[2].strip.to_i)
|
101
|
+
return response.reply(t('pager_me.failure')) unless override
|
102
|
+
|
103
|
+
response.reply(t('pager_me.success', name: override.user.name, email: override.user.email, finish: override.end))
|
104
|
+
end
|
105
|
+
# rubocop:enable Metrics/AbcSize
|
106
|
+
|
81
107
|
def identify(response)
|
82
108
|
email = response.match_data['email']
|
83
109
|
stored_email = fetch_user(response.user)
|
@@ -96,7 +122,7 @@ module Lita
|
|
96
122
|
private
|
97
123
|
|
98
124
|
def lookup_on_call_user(schedule_id)
|
99
|
-
now = Time.now.utc
|
125
|
+
now = ::Time.now.utc
|
100
126
|
pd_client.get_schedule_users(
|
101
127
|
id: schedule_id,
|
102
128
|
since: now.iso8601,
|
@@ -25,5 +25,19 @@ module PagerdutyHelper
|
|
25
25
|
def format_user(user)
|
26
26
|
"email_#{user.id}"
|
27
27
|
end
|
28
|
+
|
29
|
+
def take_pager(schedule_id, user_id, duration_mins)
|
30
|
+
from = ::Time.now.utc + 10
|
31
|
+
to = from + (60 * duration_mins)
|
32
|
+
|
33
|
+
pd_client.create_schedule_override(
|
34
|
+
id: schedule_id,
|
35
|
+
override: {
|
36
|
+
user_id: user_id,
|
37
|
+
start: from.iso8601,
|
38
|
+
end: to.iso8601
|
39
|
+
}
|
40
|
+
)
|
41
|
+
end
|
28
42
|
end
|
29
43
|
end
|
data/lita-pagerduty.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |spec|
|
2
2
|
spec.name = 'lita-pagerduty'
|
3
|
-
spec.version = '0.
|
3
|
+
spec.version = '0.2.0'
|
4
4
|
spec.authors = ['Eric Sigler']
|
5
5
|
spec.email = ['eric@pagerduty.com']
|
6
6
|
spec.description = 'A Lita handler to interact with PagerDuty'
|
@@ -15,7 +15,7 @@ Gem::Specification.new do |spec|
|
|
15
15
|
spec.require_paths = ['lib']
|
16
16
|
|
17
17
|
spec.add_runtime_dependency 'lita', '>= 4.0'
|
18
|
-
spec.add_runtime_dependency 'pagerduty-sdk'
|
18
|
+
spec.add_runtime_dependency 'pagerduty-sdk', '>= 1.0.9'
|
19
19
|
|
20
20
|
spec.add_development_dependency 'bundler', '~> 1.3'
|
21
21
|
spec.add_development_dependency 'coveralls'
|
data/locales/en.yml
CHANGED
@@ -53,10 +53,14 @@ en:
|
|
53
53
|
whos_on_call:
|
54
54
|
syntax: who's on call?
|
55
55
|
desc: Show everyone currently on call (not implemented yet)
|
56
|
+
pager_me:
|
57
|
+
syntax: pager me <schedule> <minutes>
|
58
|
+
desc: Take the pager for the given schedule for the specified number of minutes
|
56
59
|
identify:
|
57
60
|
already: You have already been identified!
|
58
61
|
complete: You have now been identified.
|
59
62
|
missing: You have not identified yourself (use the help command for more info)
|
63
|
+
unrecognised: You have identified yourself with an email address unknown to PagerDuty
|
60
64
|
incident:
|
61
65
|
acknowledged: "%{id}: Incident acknowledged"
|
62
66
|
already_set: "%{id}: Incident already %{status}"
|
@@ -82,3 +86,6 @@ en:
|
|
82
86
|
response: "%{name} (%{email}) is currently on call for %{schedule_name}"
|
83
87
|
no_matching_schedule: "No matching schedules found for '%{schedule_name}'"
|
84
88
|
no_one_on_call: "No one is currently on call for %{schedule_name}"
|
89
|
+
pager_me:
|
90
|
+
success: "%{name} (%{email}) is now on call until %{finish}"
|
91
|
+
failure: "failed to take the pager"
|
@@ -8,6 +8,7 @@ describe Lita::Handlers::PagerdutyUtility, lita_handler: true do
|
|
8
8
|
is_expected.to route_command('pager oncall ops').to(:on_call_lookup)
|
9
9
|
is_expected.to route_command('pager identify foobar@example.com').to(:identify)
|
10
10
|
is_expected.to route_command('pager forget').to(:forget)
|
11
|
+
is_expected.to route_command('pager me ops 12m').to(:pager_me)
|
11
12
|
end
|
12
13
|
|
13
14
|
before do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lita-pagerduty
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eric Sigler
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-03-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: lita
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 1.0.9
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: 1.0.9
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: bundler
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|