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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 66b7b0f56bb0f4ba6149e3860d4dbd5b7aabfacf
4
- data.tar.gz: 5acc389206c04fe9a4ec6c8673b30f6a82c13fa2
3
+ metadata.gz: 9c9ba4c8271e94b9c23d22f707845a00386f969e
4
+ data.tar.gz: ecd72110e2cf05de53a053d0fd37d966021a2cf6
5
5
  SHA512:
6
- metadata.gz: 6aa15779bb76977f0d7b23f1031b2838b36ffb29ff03a1aec479874c9061925d96600f61640edad83d0e1d491c4bad562019202c03e43b60bfef64d6f9607141
7
- data.tar.gz: 0f19fe4edede435071dd5db57c75978543d595697c270f309d77c1ad0a0e9e4d059962c1017e27873ea7d8c1ae2f3048c4b0e7f8da3b6e6e30d6fe75fb4e158a
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
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |spec|
2
2
  spec.name = 'lita-pagerduty'
3
- spec.version = '0.1.3'
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'
@@ -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.1.3
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-01-27 00:00:00.000000000 Z
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: '0'
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: '0'
40
+ version: 1.0.9
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: bundler
43
43
  requirement: !ruby/object:Gem::Requirement