lita-pagerduty 0.1.3 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
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